MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 13
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
İş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?