Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 645

 
Alexey Kozitsyn :
Zamandaki son sıranın listedeki son sıra olmadığını varsayarsak, ilk sırayı (No. 0) hesaba katmadığı için örneğiniz doğru değildir.

İlk olarak, zamana göre son siparişin bileti bulunur ve ardından modifikasyonlu bir döngü yapılır. Döngüde son siparişin daha önce bulunan bir bileti ile karşılaşıldığında atlanır.

Son siparişin biletini aramak için, tüm siparişlerin tüm geçmişini çalıştırmanız gerekmez - istediğiniz geçmişin boyutunu ayarlayabilirsiniz - bir gün, iki, üç, bir hafta ... "yerinde" daha kısa ve arama aralığından daha erken bir zamana sahip tüm siparişleri atlayın. Örneğin: arama geçmişinin boyutu 1 gün olarak ayarlanır - şu anki zamandan daha eski olan tüm siparişler - bir gün atlanır. Ancak döngüye hala ihtiyaç var. Listedeki yalnızca sonuncuyu alırsak, Satın Al olabilir ve Satmaya ihtiyacımız var. Ve sondan bir önceki kişidir. Bu nedenle, artık verilerini almayacağız.

 
Artyom Trishkin :

İlk olarak, zamana göre son siparişin bileti bulunur ve ardından modifikasyonlu bir döngü yapılır. Döngüde son siparişin daha önce bulunan bir bileti ile karşılaşıldığında atlanır.

Son siparişin biletini aramak için, tüm siparişlerin tüm geçmişini çalıştırmanız gerekmez - istediğiniz geçmişin boyutunu ayarlayabilirsiniz - bir gün, iki, üç, bir hafta ... "yerinde" daha kısa ve arama aralığından daha erken bir zamana sahip tüm siparişleri atlayın. Örneğin: arama geçmişinin boyutu 1 gün olarak ayarlanır - şu anki zamandan daha eski olan tüm siparişler - bir gün atlanır. Ancak döngüye hala ihtiyaç var. Listedeki yalnızca sonuncuyu alırsak, Satın Al olabilir ve Satmaya ihtiyacımız var. Ve sondan bir önceki kişidir. Bu nedenle, artık verilerini almayacağız.

Artem, açıklamalar için teşekkürler elbette ama listedeki sırayı nasıl bulacağımı biliyorum. Ve cevabım size değil, örneğindeki Alexei'ye (özellikle, "> 0" koşulunun işe yaramayacağı gerçeği üzerine).

Mila.com'a doğru yazsan iyi olur (sadece kod ile). Tembelim :)

 
Alexey Kozitsyn :
Zamandaki son sıranın listedeki son sıra olmadığını varsayarsak, ilk sırayı (No. 0) hesaba katmadığı için örneğiniz doğru değildir.

Peki, nasıl dikkate almıyor?

Alexey Viktorov :

Ekle. seçenek: Döngüden önce, _1 değişkenine bir bilet yazın, örneğin sıfır sipariş ve ardından

/********************Script program start function********************/
void OnStart ()
{
  int i, t1, t2, modTicket , total = OrdersTotal ();
   datetime d1, d2;
     if ( OrderSelect ( 0 , SELECT_BY_POS ))
     {
      t1 = OrderTicket ();
       d1 = OrderOpenTime ();
     }    
     for (i = 1 ; i < total; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
       {
        t2 = OrderTicket ();
         d2 = OrderOpenTime ();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
} /********************************************************************/

void modOrder( int ticket);
{
// здесь код модификации ордера.
} /********************************************************************/
Umarım bir şeyleri mahvetmemişimdir. Yine kontrol etmedim...
 
Alexey Viktorov :

Peki, nasıl dikkate almıyor?

/********************Script program start function********************/
void OnStart ()
{
  int i, t1, t2, modTicket , total = OrdersTotal ();
   datetime d1, d2;
     if ( OrderSelect ( 0 , SELECT_BY_POS ))
     {
      t1 = OrderTicket ();
       d1 = OrderOpenTime ();
     }    
     for (i = 1 ; i < total; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
       {
        t2 = OrderTicket ();
         d2 = OrderOpenTime ();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
} /********************************************************************/

void modOrder( int ticket);
{
// здесь код модификации ордера.
} /********************************************************************/
Umarım hiçbir şeyi mahvetmemişimdir. Yine kontrol etmedim...
Başlangıç olarak alırsanız, işe yarayacaktır, ancak bunu sondan yapmak daha iyidir ... ancak siparişleri silmeden de normaldir.
 
Alexey Kozitsyn :
Başlangıç olarak alırsanız, işe yarayacaktır, ancak bunu sondan yapmak daha iyidir ... ancak siparişleri silmeden de normaldir.

Aslında, birkaç emri değiştirmek için, ne derse desin, bir döngü içinde sıralanmaları gerekir. Böylece, yalnızca siparişin açılış zamanını karşılaştırmak için ek mikrosaniye harcanacağı ortaya çıktı. En iyi seçenek bu olurdu.

Ve döngünün yönü ... ama hiç önemli değil, siparişlerin kapanması değil. Önceki versiyonda, ben kandırdım ve bir kapanış yazdım, bu yüzden döngü orada uygundu ...

 

Günün iyi zamanı!

Bir gösterge yazarken elimi deniyorum. Görünüşe göre almak istediğim şey - görsel olarak aldım, ancak göstergenin gerekli bilgileri, bilgileri, örneğin metin bilgilerini veya int türünde iletmesini istiyorum. Hangi satırların üzerine kurulu 10 arabelleğim olduğu göz önüne alındığında, bunu nasıl yapacağımı söyle? Teşekkür ederim!

 

Tünaydın ! Beni çok fazla zorlama, ama bu bölümü buldum ve birkaç soru sormaya karar verdim .. terminalimi kullanarak .. bir broker MT4 (1) 'den indirildi .. bir demo çalıştırdı ... bir süre sonra başka birine kaydolduktan sonra, ayrıca

terminali indirmeyi teklif etti. MT4'ten çok daha iyi yapıldı .. Soru, aynı terminalde farklı brokerlerin hesaplarını açmanın mümkün olup olmadığıdır? ve hepsini MT5'e aktarabilir miyim? ve göstergeler MT4'ten 5'e uygun mu?

Teşekkür ederim ...

 

Böyle aktif bir yardım, çok teşekkür ederim.

Zaten yeni bir problemle savaşıyorum)

Lütfen yeni bir ZigZag topunun görünümünün gerçeğini bulmama yardım edin.

Bir değişkende ilk tepenin fiyatını hatırlamaya çalıştım, sonra karşılaştırdım, fiyat değiştiyse bayrağı kaldır, yeni bir tepe var.
if (newZZH1_PR!=GetExtremumZZPrice( Symbol (),T_F_, 1 ))
{
   newZZH1_PR=GetExtremumZZPrice( Symbol (),T_F_, 1 );
   newZZH1= true ;
}

Ancak, fonksiyonun zaman içinde rastgele, sonra ilk üst fiyatın, sonra ikincisinin fiyatının geri döndüğü ortaya çıktı.

  Yeni zirvenin oluşmadığı, ancak bayrağın kaldırıldığı ortaya çıktı.
double GetExtremumZZPrice( string sy= "" , int tf= 0 , int ne= 0 )
{

   if (sy== "" || sy== "0" ) sy= Symbol ();
   double zz;
   int     i, k= iBars (sy, tf), ke= 0 ;

   for (i= 1 ; i<k; i++) {
    zz= iCustom (sy, tf, "ZigZag" , ExtDepth,ExtDeviation,ExtBackstep, 0 , i);
     if (zz!= 0 ) {
      ke++;
       if (ke>ne) return (zz);
    }
  }
   Print ( "GetExtremumZZPrice(): Экстремум ЗигЗага номер " ,ne, " не найден" );
   return ( 0 );
}
İdeal olarak, işlevi her zaman ilk tepenin fiyatını döndürecek şekilde ayarlamanız gerekir, ancak herhangi bir çözümden memnuniyet duyarım.
 
mila.com :

Böyle aktif yardım, çok teşekkür ederim.

Zaten yeni bir problemle savaşıyorum)

Lütfen yeni bir ZigZag topunun görünümünün gerçeğini bulmama yardım edin.

Bir değişkende ilk tepenin fiyatını hatırlamaya çalıştım, sonra karşılaştırdım, fiyat değiştiyse bayrağı kaldır, yeni bir tepe var.
if (newZZH1_PR!=GetExtremumZZPrice( Symbol (),T_F_, 1 ))
{
   newZZH1_PR=GetExtremumZZPrice( Symbol (),T_F_, 1 );
   newZZH1= true ;
}

Ancak, fonksiyonun zaman içinde rastgele, sonra ilk üst fiyatın, sonra ikincisinin fiyatının geri döndüğü ortaya çıktı.

  Yeni zirvenin oluşmadığı, ancak bayrağın kaldırıldığı ortaya çıktı.
double GetExtremumZZPrice( string sy= "" , int tf= 0 , int ne= 0 )
{

   if (sy== "" || sy== "0" ) sy= Symbol ();
   double zz;
   int     i, k= iBars (sy, tf), ke= 0 ;

   for (i= 1 ; i<k; i++) {
    zz= iCustom (sy, tf, "ZigZag" , ExtDepth,ExtDeviation,ExtBackstep, 0 , i);
     if (zz!= 0 ) {
      ke++;
       if (ke>ne) return (zz);
    }
  }
   Print ( "GetExtremumZZPrice(): Экстремум ЗигЗага номер " ,ne, " не найден" );
   return ( 0 );
}
İdeal olarak, işlevi her zaman ilk tepenin fiyatını döndürecek şekilde ayarlamanız gerekir, ancak herhangi bir çözümden memnuniyet duyarım.

Zigzag'ın aslında üç tamponu vardır - 0 yaygındır, 1 üst ekstremumdur, 2 alt kısımdır

Sıfır çubuğunda, tamponlardan birinde her zaman bir değer vardır - ya birincide (diz yukarı doğru yönlendirilirse) veya ikincisinde (aşağı doğruysa). Buna göre, mevcut mumdaki sıfır tamponunda her zaman bir değer vardır - ya ilk tampondan ya da ikinciden.

Kesin olarak üst sabit bir ekstremum bulmak için, ilk tamponun ilk boş olmayan değerini, çubuk 1'den başlayarak aramanız gerekir. Alt ekstremum için, ikinci tamponun ilk boş olmayan değerini bulmanız gerekir. , 1. çubuktan başlayarak.

Bunun yeni bir üst veya alt olduğunu anlamak için, en son bulunan üst / alt zamanını hatırlamanız ve o anda bulduklarınızla karşılaştırmanız gerekir.

Karışık oldu ama umarım anlarsın...

 
İki MT5 terminali vardır. Görev: Bir terminalde yalnızca uzun işlemlere ve diğerinde yalnızca kısa işlemlere izin verilecek şekilde komut dosyaları yazmak mümkün müdür?
Neden: