MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1599

 
Nerd Trader :
isCrossing() neden 2 döndürmüyor ??? IsCrossing() 'in kendisinin ikinci if için bir girişi vardır, ancak OnTick() 'in isCrossing() == 2 olduğunda if öğesine bir girişi yoktur. Ne oluyor be...

Her iki koşul da uygundur...böylece ilk sonucu alırsınız

 
MakarFX :

Her iki koşul da uygundur...böylece ilk sonucu alırsınız

Yalnızca Teklif == ma olduğunda uygundur. <= olarak < olarak değiştirildi (>= için de), ancak hiçbir şey değişmedi.
 
Nerd Trader :
isCrossing() neden 2 döndürmüyor ??? IsCrossing() 'in kendisinin ikinci if için bir girişi vardır, ancak OnTick() 'in isCrossing() == 2 olduğunda if öğesine bir girişi yoktur. Ne oluyor be...

Nedense 1'in de dönmeyeceğini düşünüyorum.

Bu durum

 if (g_barTime < iTime ( NULL ,g_timeFrame, 0 )// и дальше

yeni bir bar açmaktan bahsediyor. Çubuğun ilk işaretinde, açık == yüksek == düşük == kapat ve == Teklif - dolayısıyla koşul

 && high > ma && Bid <= ma)

veya

 && low < ma && Bid >= ma)
yapılamaz...

Bugün if(i != i) şartı ile ilgili bir soru vardı bu şartlar aşağı yukarı aynı.

 
OnTick() işlevi, şu anda düzenleyicimde bulunan işlevdir:
 void OnTick ()
  {
/*     if(isCrossing() == 1){          
      Print("enter to '1. if (isCrossing)'");
        if(shouldBars(1))         
          Print("angulation is ", shouldAngulation(1));            
    } */

     if (isCrossing() == 2 ){
       Print ( "enter to '2. if (isCrossing)'" );
       if (shouldBars( 2 ))
         Print ( "angulation is " , shouldAngulation( 2 ));
         //if(shouldAngulation(2))
           //OpenSell();
    }

   
  }
İlk bloğu yorumlarsanız, ikincisi yürütülür. Hata nerede anlamadım.

not
f- ii isCrossing () 'de her şeyi olduğu gibi bırakmasına rağmen.
 
Alexey Viktorov :

Nedense 1'in de dönmeyeceğini düşünüyorum.

Bu durum

yeni bir bar açmaktan bahsediyor. Çubuğun ilk işaretinde, açık == yüksek == düşük == kapat ve == Teklif - dolayısıyla koşul

veya

yapılamaz...

Bugün if(i != i) şartı ile ilgili bir soru vardı bu şartlar aşağı yukarı aynı.

"1" döner, MetaEditor'daki kodda hata ayıklanır.

Ayrıca, her şey her şeye eşit olsa bile, o zaman sadece ilk onayda.

 
Nerd Trader :

"1" döner, MetaEditor'daki kodda hata ayıklanır.

Ayrıca, her şey her şeye eşit olsa bile, o zaman sadece ilk onayda.

Evet, yanılmışım. Yalnızca tüm koşullar karşılandıktan sonra yeni bir çubuk görünecektir.

Açık ile yüksek ve düşük değiştirmeyi deneyin. Strateji üzerinde çok fazla etkisi olmayabilir ...

 
Nerd Trader :

"1" döner, MetaEditor'daki kodda hata ayıklanır.

Ayrıca, her şey her şeye eşit olsa bile, o zaman sadece ilk onayda.

Bu nasıl çalışır

 //--- input parameters
input int                   g_maPeriod  = 14 ;
input int                   g_maShift   = 1 ;
input ENUM_APPLIED_PRICE    g_maPrice   = PRICE_CLOSE ;   //Applied price
input ENUM_MA_METHOD        g_maMethod  = MODE_SMA ;     //Method Ma
input ENUM_TIMEFRAMES       g_timeFrame = PERIOD_CURRENT ;   //Timeframe for calculate
datetime g_barTime= 0 ;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (g_barTime != iTime ( NULL ,g_timeFrame, 0 ))
     {
       if (isCrossing()== 1 )
        {
         Print ( "enter to '1. if (isCrossing)'" ); g_barTime = iTime ( NULL ,g_timeFrame, 0 );
        }
       if (isCrossing()== 2 )
        {
         Print ( "enter to '2. if (isCrossing)'" ); g_barTime = iTime ( NULL ,g_timeFrame, 0 );
        }
     }
  }
//+------------------------------------------------------------------+
int isCrossing()
  {  
   int res= 0 ;
   double low = iLow ( Symbol (), g_timeFrame, 1 );
   double high = iHigh ( Symbol (), g_timeFrame, 1 );
   double ma = iMA ( _Symbol , g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maPrice, 0 );

   if (high > ma && Bid <= ma) res= 1 ;
  
   if (low < ma && Bid >= ma) res= 2 ;
   return (res);
  }
//+------------------------------------------------------------------+
2021.08 . 25 09 : 24 : 56.629 2021.08 . 20 23 : 50 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.624 2021.08 . 20 23 : 45 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.592 2021.08 . 20 21 : 35 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.582 2021.08 . 20 21 : 05 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.566 2021.08 . 20 20 : 20 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.554 2021.08 . 20 18 : 50 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.553 2021.08 . 20 18 : 45 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.553 2021.08 . 20 18 : 40 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
 
MakarFX :

Bu nasıl çalışır


Bunu yaptım ve her şey çalıştı, yalnızca isCrossing()'den gelen mesajlar kopyalandı, çünkü işlev bir onay işareti için iki kez çağrıldı.

 void OnTick ()
  {
   if (BarTime != iTime ( NULL , 0 , 0 )){

     if (isCrossing == 1 ){
       ...
     }

     if (isCrossing == 2 ){
       ...
     }
     BarTime = iTime ( NULL , 0 , 0 ); 
  }

int isCrossing()
  {  
    ...

     if (high > ma && Bid <= ma){
       Print ( "Crossing down" );
       return 1 ;
    } 
  
     if (low < ma && Bid >= ma){
       Print ( "Crossing up" );
       return 2 ;
    }
   return 0 ;
  }


Genel olarak, ilk başta olduğu gibi bıraktım, ancak şimdi her şey isCrossing () öğesinden bir değişkene döndürülüyor. Hiçbir şey kopyalanmaz ve her şey çalışır. Herkese teşekkürler :)

 void OnTick ()
  {
     int iCrossing = isCrossing();

     if (iCrossing == 1 ){
       ...
    }

     if (iCrossing == 2 ){
       ...
    }   
  }
 
MakarFX :
 2021.08 . 25 09 : 24 : 56.629 2021.08 . 20 23 : 50 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.624 2021.08 . 20 23 : 45 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.592 2021.08 . 20 21 : 35 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.582 2021.08 . 20 21 : 05 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.566 2021.08 . 20 20 : 20 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.554 2021.08 . 20 18 : 50 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.553 2021.08 . 20 18 : 45 : 00   Nerd Trader EURUSD,M5: enter to ' 2 . if (isCrossing)'
2021.08 . 25 09 : 24 : 56.553 2021.08 . 20 18 : 40 : 00   Nerd Trader EURUSD,M5: enter to ' 1 . if (isCrossing)'
Bir günlük eklediğinizi şimdi gördüm. Yinelenen yazılarınız da var :)
 

İşlevler arasındaki farkın ne olduğunu açıklayabilir misiniz?

for (int j = OrdersHistoryTotal()-1; j >= 0; j--)

{

if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))

ve

int i=OrdersHistoryTotal();

for(int konum=0; konum<i; konum++)

{

if(Sipariş Seçimi(kon, SELECT_BY_POS, MODE_HISTORY))