Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 13

 
Krokus :

Belki bu yüzden:

Başka fikir gelmiyor...




Satır aralarını okudunuz. Genel olarak, döngüye genel olarak ne yerleştirdiğinize bakın. Döngünün kapsamı ..
 
Merhaba, tablet için MT4 android'de her sunucu için ayrı ayrı terminal indirmeniz mi gerekiyor? Dosya oturum açma yoluyla bir PC'de nasıl oturum açabilirim? ayrıca söyle bana, mt4'te işlem yapmak için bir android tablete autoclick'in yüklenebileceğini kim bilebilir?
 

tünaydın! Bu durumu anlamıyorum:

OrderCloseTime()!=saat()

Saatte birden fazla siparişin açılmasını istemiyorum!

Ama siparişler hala açık! Ne yanlış olabilir?

 
lowech :

tünaydın! Bu durumu anlamıyorum:

OrderCloseTime()!=saat()

Saatte birden fazla siparişin açılmasını istemiyorum!

Ama siparişler hala açık! Ne yanlış olabilir?

İlk: OrderCloseTime() - sipariş kapanış zamanı. Emir kapalı değilse, sıfıra eşittir. Açılış saatini izlemeniz gerekiyor.

İkincisi: Hour(), Expert Advisor'ın başlatıldığı saattir ve bu saat , programın yürütülmesi sırasında değişmez. Son alıntının varış zamanı ile karşılaştırmanız gerekir - TimeCurrent()

İşlev, geçerli sembolün son konumunun açılmasından sonraki saniye sayısını döndürür:

 //+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos( int op, int mn) {
   datetime t= 0 ;
   int       i, k= OrdersTotal ();

   for (i= 0 ; i<k; i++) {
       if ( OrderSelect (i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue ;
         if (OrderType()!=op)           continue ;
         if (OrderMagicNumber()!=mn)   continue ;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return ( TimeCurrent ()-t);
}
//+----------------------------------------------------------------------------+

Yani, Magic ile son Satın Alma pozisyonunu açtıktan sonraki saniye sayısını kontrol etmek için yapmanız gerekenler:

 if (SecondsAfterOpenLastPos(OP_BUY, Magic)> 3600 ) {
   // Можно открывать следующий
   }
 
Merhaba, terminalin bir sonraki açılışında, hafta sonundan sonra, cent hesabında, danışmanlarla çalışma çizelgeleri de dahil olmak üzere tüm çizelgeler kayboldu. Aşağıda açık pozisyonlar, bakiyeler ve fonlar korunsa da, grafik yerine gri bir alan var. Terminali yeniden indirmem ve danışmanlarla birlikte çalışma çizelgelerini yeniden kurmam gerekti, ardından her şey düzgün çalışıyor. Lütfen söyleyin, bunun nedeni nedir ve gelecekte böyle bir kusuru en acısız şekilde nasıl giderebilirim?
 

İlk: OrderCloseTime() - sipariş kapanış zamanı. Emir kapalı değilse, sıfıra eşittir. Açılış saatini izlemeniz gerekiyor.

İkincisi: Hour(), Expert Advisor'ın başlatıldığı saattir ve bu saat , programın yürütülmesi sırasında değişmez. Son alıntının varış zamanı ile karşılaştırmanız gerekir - TimeCurrent()

İşlev, geçerli sembolün son konumunun açılmasından sonraki saniye sayısını döndürür:

 //+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos( int op, int mn) {
   datetime t= 0 ;
   int       i, k= OrdersTotal ();

   for (i= 0 ; i<k; i++) {
       if ( OrderSelect (i, SELECT_BY_POS)) {
         if (OrderSymbol()!=Symbol())  continue ;
         if (OrderType()!=op)           continue ;
         if (OrderMagicNumber()!=mn)   continue ;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return ( TimeCurrent ()-t);
}
//+----------------------------------------------------------------------------+

Yani, Magic ile son Satın Alma pozisyonunu açtıktan sonraki saniye sayısını kontrol etmek için yapmanız gerekenler:

 if (SecondsAfterOpenLastPos(OP_BUY, Magic)> 3600 ) {
   // Можно открывать следующий
   }
özellik için teşekkürler! başka yok mu?! bar başına sadece bir sipariş açmak için?!
 
lowech :
özellik için teşekkürler! başka yok mu?! bar başına sadece bir sipariş açmak için?!
 //+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos( int op, int mn) {
   datetime t= 0 ;
   int       i, k= OrdersTotal ();

   for (i= 0 ; i<k; i++) {
       if ( OrderSelect (i, SELECT_BY_POS)) {
         if (OrderSymbol()!= Symbol ())   continue ;
         if (OrderType()!=op)           continue ;
         if (OrderMagicNumber()!=mn)   continue ;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return (( TimeCurrent ()-t)/ 60 / Period ());
}
//+----------------------------------------------------------------------------+

aynı çöp, saniye değil, yalnızca çubuk sayısını kontrol edin

 
//+----------------------------------------------------------------------------+
datetime BarsAfterOpenLastPos( int op, int mn) {
   datetime t= 0 ;
   int       i, k= OrdersTotal ();

   for (i= 0 ; i<k; i++) {
       if ( OrderSelect (i, SELECT_BY_POS)) {
         if (OrderSymbol()!= Symbol ())   continue ;
         if (OrderType()!=op)           continue ;
         if (OrderMagicNumber()!=mn)   continue ;
         if (t<OrderOpenTime()) t=OrderOpenTime();
         }
      }
   return (( TimeCurrent ()-t)/ 60 / Period ());
}
//+----------------------------------------------------------------------------+

aynı çöp, saniye değil, yalnızca çubuk sayısını kontrol edin


İşler! sadece TP tarafından bir sipariş kapatıldığında, hemen yenisi açılır! bu nasıl düzeltilebilir?
 
İşlem katmanları neden platformda görüntülenmiyor ve danışman çalışmıyor?
 
lowech :

aynı çöp, saniye değil, yalnızca çubuk sayısını kontrol edin


İşler! sadece TP tarafından bir sipariş kapatıldığında, hemen yenisi açılır! bu nasıl düzeltilebilir?

Bu nedenle, son siparişin kapanmasından sonraki çubuk sayısı için bir kontrol daha yapmanız gerekir:

 //+----------------------------------------------------------------------------+
int BarsAfterCloseLastPos ( int fi_MG, int fi_Type = - 1 )
{
     datetime ldt_Time = 0 ;
     int       li_Total = OrdersTotal ();
//----
     for ( int li_pos = 0 ; li_pos < li_Total; li_pos++)
    {
         if (! OrderSelect (li_pos, SELECT_BY_POS, MODE_HISTORY)) continue ;
         if (OrderSymbol() != Symbol ()) continue ;
         if (fi_Type >= 0 ) if (OrderType() != fi_Type) continue ;
         if (OrderMagicNumber() != fi_MG) continue ;
         if (ldt_Time >= OrderCloseTime()) continue ;
        ldt_Time = OrderCloseTime();
    }
    //---- Обрабатываем событие - отсутствие своих ордеров
    if (ldt_Time == 0) return (-1);
//----
     return (iBarShift ( NULL , 0 , ldt_Time));
}
//+----------------------------------------------------------------------------+
Neden: