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

 
Viachaslau Baiko :

İşte böyle bir nüansım var: Bu kodu aldım ( Alekseu Fedotov sayesinde):

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos( string sy= "0" , int tf= 0 , int op=- 1 , int mn=- 1 ) {
   datetime t;
   int       i, k= OrdersHistoryTotal ();

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (t< OrderCloseTime ()) t= OrderCloseTime ();
            }
          }
        }
      }
    }
  }
   return ( iBarShift (sy, tf, t, True ));
}

Ve şimdi kontrol ediyorum:

if (УСЛОВИЕ && NumberOfBarCloseLastPos()> 0 )

Ve işte bütün engel, çünkü. başlangıçta NumberOfBarCloseLastPos "-1" olacaktır. Ve buna göre, ilk sipariş asla açılmayacak.

Böyle bir durumda ne yapılabilir? Yoksa bir şeyi yanlış mı anladım?

Bu durumda, if (CONDITION && NumberOfBarCloseLastPos()> -2 ) deneyebilir veya düşünebilirsiniz.
 
Viachaslau Baiko :

İşte böyle bir nüansım var: Bu kodu aldım ( Alekseu Fedotov sayesinde):

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos( string sy= "0" , int tf= 0 , int op=- 1 , int mn=- 1 ) {
...
   return ( iBarShift (sy, tf, t, True ));
}
if ( УСЛОВИЕ && (NumberOfBarCloseLastPos()> 0 || NumberOfBarCloseLastPos()==- 1 ) )
 
Vitaly Muzichenko :
İyi. Ve düşünmeyi önerdim.
 
Алексей Тарабанов :
Bu durumda, if (CONDITION && NumberOfBarCloseLastPos()> -2 ) deneyebilir veya düşünebilirsiniz.
Ancak bu seçenek ile "0" değeri olacaktır.
 
Vitaly Muzichenko :
if ( УСЛОВИЕ && (NumberOfBarCloseLastPos()> 0 || NumberOfBarCloseLastPos()==- 1 ) )
Her şey çalıştı! Teşekkür ederim!
 
Viachaslau Baiko :

İşte böyle bir nüansım var: Bu kodu aldım ( Alekseu Fedotov sayesinde):

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos( string sy= "0" , int tf= 0 , int op=- 1 , int mn=- 1 ) {
   datetime t;
   int       i, k= OrdersHistoryTotal ();

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (t< OrderCloseTime ()) t= OrderCloseTime ();
            }
          }
        }
      }
    }
  }
   return ( iBarShift (sy, tf, t, True ));
}

Ve şimdi kontrol ediyorum:

if (УСЛОВИЕ && NumberOfBarCloseLastPos()> 0 )

Ve işte bütün engel, çünkü. başlangıçta NumberOfBarCloseLastPos "-1" olacaktır. Ve buna göre, ilk sipariş asla açılmayacak.

Böyle bir durumda ne yapılabilir? Yoksa bir şeyi yanlış mı anladım?

Pekala, şunu yapardım:

//+------------------------------------------------------------------+
int BarCloseLastPos( string symbol_name, ENUM_TIMEFRAMES timeframe, int type, int magic_number) {
   datetime time= 0 ;
   int       j=- 1 ;
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
         if ( OrderMagicNumber ()!=magic_number)   continue ;
         if ( OrderSymbol ()!=symbol_name)         continue ;
         if ( OrderType ()!=type)                   continue ;
         if ( OrderCloseTime ()>time) {
            time= OrderCloseTime ();
            j=i;
            }
         }
      }
   if ( OrderSelect (j, SELECT_BY_POS , MODE_HISTORY )) return ( iBarShift (symbol_name,timeframe,time));
   return ( EMPTY );
}
//+------------------------------------------------------------------+

...ve kontrol edin:

if (BarCloseLastPos( Symbol (), PERIOD_CURRENT , OP_BUY ,Magic)> 0 ) {
   // Последняя позиция Buy была закрыта не на текущем баре
   }
 
Artyom Trishkin :

Pekala, şunu yapardım:

//+------------------------------------------------------------------+
int BarCloseLastPos( string symbol_name, ENUM_TIMEFRAMES timeframe, int type, int magic_number) {
   datetime time= 0 ;
   int       j=- 1 ;
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
         if ( OrderMagicNumber ()!=magic_number)   continue ;
         if ( OrderSymbol ()!=symbol_name)         continue ;
         if ( OrderType ()!=type)                   continue ;
         if ( OrderCloseTime ()>time) {
            time= OrderCloseTime ();
            j=i;
            }
         }
      }
   if ( OrderSelect (j, SELECT_BY_POS , MODE_HISTORY )) return ( iBarShift (symbol_name,timeframe,time));
   return ( EMPTY );
}
//+------------------------------------------------------------------+

...ve kontrol edin:

if (BarCloseLastPos( Symbol (), PERIOD_CURRENT , OP_BUY ,Magic)> 0 ) {
   // Последняя позиция Buy была закрыта не на текущем баре
   }
Peki ya şu anki barda aşağılık, kapalıysa?
 
Алексей Тарабанов :
Peki ya şu anki barda aşağılık, kapalıysa?

Bu tam olarak atlamanız gereken şeydir. Bir önceki bu çubukta kapalıysa - sıfırda - bir pozisyon açmasına gerek yoktur.

Ve mevcut çubukta pozisyonun kapalı olduğu koşulunu kontrol etmeniz gerekiyorsa, sıfırı kontrol etmeniz gerekir:

if (BarCloseLastPos( Symbol (), PERIOD_CURRENT , OP_BUY ,Magic)== 0 ) {
   // Последняя позиция Buy была закрыта на текущем баре
   }
 
Viachaslau Baiko :

İşte böyle bir nüansım var: Bu kodu aldım ( Alekseu Fedotov sayesinde):

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos( string sy= "0" , int tf= 0 , int op=- 1 , int mn=- 1 ) {
   datetime t;
   int       i, k= OrdersHistoryTotal ();

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (t< OrderCloseTime ()) t= OrderCloseTime ();
            }
          }
        }
      }
    }
  }
   return ( iBarShift (sy, tf, t, True ));
}

Ve şimdi kontrol ediyorum:

if (УСЛОВИЕ && NumberOfBarCloseLastPos()> 0 )

Ve işte bütün engel, çünkü. başlangıçta NumberOfBarCloseLastPos "-1" olacaktır. Ve buna göre, ilk sipariş asla açılmayacak.

Böyle bir durumda ne yapılabilir? Yoksa bir şeyi yanlış mı anladım?

if (УСЛОВИЕ && NumberOfBarCloseLastPos()!= 0 )
 
İyi günler MT4 forum kullanıcıları! Bir sorunla karşılaştım ve sanırım ya nasıl kalkan yapacağımı bilmiyorum ve bir sürü hesap makinesi ya da MT4 derleyici kalkanları bir şekilde kendi yöntemiyle, kod yazdırıyorum ((1.1145-1.1123-0.0020)/0.0001) gerekir 2.0 olsun ve bir nedenden dolayı 1.9999999878 çıktı veriyor ideal olarak kod şuna benziyordu print((OrdArr[i].buy-Ord[1,3]-PipStep)/Point) pipstep eşittir 0,0020 tüm değişkenler iki katı sonuç onda bir çıktı olması gerekenden daha az. Belki birisi sorunun ne olduğunu biliyordur! TEŞEKKÜR.