İş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.
İş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 была закрыта не на текущем баре }
İş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?
İ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.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
İş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:
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?
İş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 ));
}
Bu durumda, if (CONDITION && NumberOfBarCloseLastPos()> -2 ) deneyebilir veya düşünebilirsiniz.
İş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:
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:
// Последняя позиция Buy была закрыта не на текущем баре
}
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:
// Последняя позиция Buy была закрыта не на текущем баре
}
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:
// Последняя позиция Buy была закрыта на текущем баре
}
İş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:
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?