MT4, lütfen topluluğa yardım edin. 1. M1 grafiğinde (tiklerle veya 0,5 sn'lik bir zamanlayıcı ile) çalışan bir Expert Advisor'da, H1 grafiğinde yeni bir mum çubuğu göründüğü anda hesaplamalar yapmanız gerekir. Her saatin son M1 mum çubuğunu takip eden M1 mum çubuğunun başlangıcını yakalayabilirsiniz (NN:00 dakika), ama bu bir şekilde çirkin... Ve H1 mum çubuğu şu anda çekilmeyebilir. Belki biri daha zarif bir şekilde yaptı? 2. EA metnindeki gösterge koduna kıyasla gösterge değerini iCustom() aracılığıyla almak ne kadar sürer? 3. Expert Advisor metnindeki gösterge kodu çok daha hızlı hesaplanırsa, M1 grafiğine ekli Expert Advisor'daki H1 grafiği kullanılarak gösterge değeri nasıl hesaplanabilir?
MT4, lütfen topluluğa yardım edin. 1. M1 grafiğinde (tiklerle veya 0,5 sn'lik bir zamanlayıcı ile) çalışan bir Expert Advisor'da, H1 grafiğinde yeni bir mum çubuğu göründüğü anda hesaplamalar yapmanız gerekir. Her saatin son M1 mum çubuğunu takip eden M1 mum çubuğunun başlangıcını yakalayabilirsiniz (NN:00 dakika), ama bu bir şekilde çirkin... Ve H1 mum çubuğu şu anda çekilmeyebilir. Belki birisi daha zarif bir şekilde yaptı? 2. EA metnindeki gösterge koduna kıyasla gösterge değerini iCustom() aracılığıyla almak ne kadar sürer? 3. Expert Advisor metnindeki gösterge kodu çok daha hızlı hesaplanırsa, M1 grafiğine ekli Expert Advisor'daki H1 grafiği kullanılarak gösterge değeri nasıl hesaplanabilir?
İlk soruyu yanıtlayan işlev, yeni bir bar tanımlar.
MikeZv : Teşekkürler, Sergey! Forumda beni çok ama çok korkuttular: "Statik değişkenler kullanmayın!" :)
Bunu ilk kez duyuyorum, onlarda neyin bu kadar korkunç olduğunu merak ediyorum, ben de nadiren kullanıyorum, ancak belirli görevler için daha uygunlar.
Sergey Gritsay : Bunu ilk kez duyuyorum, onlarda neyin bu kadar korkunç olduğunu merak ediyorum, ben de nadiren kullanıyorum, ancak belirli görevler için daha uygunlar.
Buradaki nokta, bir statik değişkenin yalnızca Expert Advisor'ın tüm süresi boyunca aynı sembol ve zaman çerçevesi için NevDay() çağrılması durumunda kullanılabileceğidir. 2 veya daha fazla karakter varsa, NevDay() yanlış değerler döndürür. EA'm çoklu para birimi olarak tasarlandı... :(
MikeZv : Buradaki nokta, bir statik değişkenin yalnızca Expert Advisor'ın tüm süresi boyunca aynı sembol ve zaman çerçevesi için NevDay() çağrılması durumunda kullanılabileceğidir. 2 veya daha fazla karakter varsa, NevDay() yanlış değerler döndürür. EA'm çoklu para birimi olarak tasarlandı... :(
Çoklu para birimi moduna ihtiyacınız varsa, işte hem MT4 hem de MT5'te çalışan bir örnek
MikeZv : Buradaki nokta, bir statik değişkenin yalnızca Expert Advisor'ın tüm süresi boyunca aynı sembol ve zaman çerçevesi için NevDay() çağrılması durumunda kullanılabileceğidir. 2 veya daha fazla karakter varsa, NevDay() yanlış değerler döndürür. EA'm çoklu para birimi olarak tasarlandı... :(
İşte sınıfı kullanan başka bir seçenek
//+------------------------------------------------------------------+//| тест.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CNevBar
{
private :
datetime curbar;
datetime lastbar;
public :
CNevBar();
~CNevBar();
bool new_bar( string symbol, ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+void CNevBar::~CNevBar( void )
{
}
//+------------------------------------------------------------------+bool CNevBar:: new_bar( string symbol, ENUM_TIMEFRAMES period)
{
curbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
if (lastbar== 0 )lastbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
if (lastbar!=curbar)
{
lastbar=curbar;
return ( true );
}
return ( false );
}
CNevBar *eurusd_H1; // объявим экземпляр класса для симмвола EURUSD
CNevBar *eurusd_M15; // объявим экземпляр класса для симмвола EURUSD
CNevBar *audusd_M30; // объявим экземпляр класса для симмвола AUDUSD
CNevBar *audusd_M5; // объявим экземпляр класса для симмвола AUDUSD//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//---
eurusd_H1= new CNevBar(); // создадим экземпляр класса для симмвола EURUSD
audusd_M30= new CNevBar(); // создадим экземпляр класса для симмвола AUDUSD
eurusd_M15= new CNevBar(); // создадим экземпляр класса для симмвола EURUSD
audusd_M5= new CNevBar(); // создадим экземпляр класса для симмвола AUDUSD//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
//---delete eurusd_H1; // удалим экземпляр класса для симмвола EURUSDdelete audusd_M30; // удалим экземпляр класса для симмвола AUDUSDdelete eurusd_M15; // удалим экземпляр класса для симмвола EURUSDdelete audusd_M5; // удалим экземпляр класса для симмвола AUDUSD
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
if (eurusd_H1.new_bar( "EURUSD" , PERIOD_H1 ))
{
Alert ( "EURUSD" , " Новый бар на Н1" );
}
if (eurusd_M15.new_bar( "EURUSD" , PERIOD_M15 ))
{
Alert ( "EURUSD" , " Новый бар на M15" );
}
if (audusd_M30.new_bar( "AUDUSD" , PERIOD_M30 ))
{
Alert ( "AUDUSD" , " Новый бар на M30" );
}
if (audusd_M5.new_bar( "AUDUSD" , PERIOD_M5 ))
{
Alert ( "AUDUSD" , " Новый бар на M5" );
}
//---
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
test sonucu
2016.02 . 2021 : 09 : 432015.01 . 1000 : 00 тест 3 test started
2016.02 . 2021 : 09 : 452015.01 . 1200 : 00 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на M15
2016.02 . 2021 : 09 : 472015.01 . 1200 : 00 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M30
2016.02 . 2021 : 09 : 502015.01 . 1200 : 00 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 09 : 532015.01 . 1200 : 05 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 09 : 592015.01 . 1200 : 10 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 042015.01 . 1200 : 15 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на M15
2016.02 . 2021 : 10 : 042015.01 . 1200 : 15 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 102015.01 . 1200 : 20 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 132015.01 . 1200 : 25 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 162015.01 . 1200 : 30 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на M15
2016.02 . 2021 : 10 : 162015.01 . 1200 : 30 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M30
2016.02 . 2021 : 10 : 162015.01 . 1200 : 30 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 232015.01 . 1200 : 35 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 262015.01 . 1200 : 40 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 292015.01 . 1200 : 45 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на M15
2016.02 . 2021 : 10 : 292015.01 . 1200 : 45 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 342015.01 . 1200 : 50 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 362015.01 . 1200 : 55 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 392015.01 . 1201 : 00 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на Н 12016.02 . 2021 : 10 : 392015.01 . 1201 : 00 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на M15
2016.02 . 2021 : 10 : 392015.01 . 1201 : 00 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M30
2016.02 . 2021 : 10 : 392015.01 . 1201 : 00 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 462015.01 . 1201 : 05 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 502015.01 . 1201 : 10 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 552015.01 . 1201 : 15 тест 3 EURUSD,M1: Alert : EURUSD Новый бар на M15
2016.02 . 2021 : 10 : 552015.01 . 1201 : 15 тест 3 EURUSD,M1: Alert : AUDUSD Новый бар на M5
2016.02 . 2021 : 10 : 572015.01 . 1201 : 17 Tester: stop button pressed
MT4, lütfen topluluğa yardım edin.
1. M1 grafiğinde (tiklerle veya 0,5 sn'lik bir zamanlayıcı ile) çalışan bir Expert Advisor'da, H1 grafiğinde yeni bir mum çubuğu göründüğü anda hesaplamalar yapmanız gerekir.
Her saatin son M1 mum çubuğunu takip eden M1 mum çubuğunun başlangıcını yakalayabilirsiniz (NN:00 dakika), ama bu bir şekilde çirkin... Ve H1 mum çubuğu şu anda çekilmeyebilir.
Belki biri daha zarif bir şekilde yaptı?
2. EA metnindeki gösterge koduna kıyasla gösterge değerini iCustom() aracılığıyla almak ne kadar sürer?
3. Expert Advisor metnindeki gösterge kodu çok daha hızlı hesaplanırsa, M1 grafiğine ekli Expert Advisor'daki H1 grafiği kullanılarak gösterge değeri nasıl hesaplanabilir?
MT4, lütfen topluluğa yardım edin.
1. M1 grafiğinde (tiklerle veya 0,5 sn'lik bir zamanlayıcı ile) çalışan bir Expert Advisor'da, H1 grafiğinde yeni bir mum çubuğu göründüğü anda hesaplamalar yapmanız gerekir.
Her saatin son M1 mum çubuğunu takip eden M1 mum çubuğunun başlangıcını yakalayabilirsiniz (NN:00 dakika), ama bu bir şekilde çirkin... Ve H1 mum çubuğu şu anda çekilmeyebilir.
Belki birisi daha zarif bir şekilde yaptı?
2. EA metnindeki gösterge koduna kıyasla gösterge değerini iCustom() aracılığıyla almak ne kadar sürer?
3. Expert Advisor metnindeki gösterge kodu çok daha hızlı hesaplanırsa, M1 grafiğine ekli Expert Advisor'daki H1 grafiği kullanılarak gösterge değeri nasıl hesaplanabilir?
İlk soruyu yanıtlayan işlev, yeni bir bar tanımlar.
kullanım durumu
int OnInit() { //--- NevBar(PERIOD_H1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(NevBar(PERIOD_H1)) { производим вычисления. } } //+------------------------------------------------------------------+İlk soruyu yanıtlayan işlev, yeni bir bar tanımlar.
Çok teşekkür ederim Sergey, belgelere baktım ama bir şekilde iTime()'ı kaçırdım ... :
OnInit()'te neden NevBar()'ı çağırmalısınız?
İlk işlev çağrısı , aksi takdirde hemen tetiklenir. Düzenlendi OnInit() çağrılmadı
İlkişlev çağrısı , aksi takdirde hemen tetiklenir. Düzenlendi OnInit() çağrılmadı
Teşekkürler, Sergey! Forumda beni çok ama çok korkuttular: "Statik değişkenler kullanmayın!" :)
Teşekkürler, Sergey! Forumda beni çok ama çok korkuttular: "Statik değişkenler kullanmayın!" :)
Bunu ilk kez duyuyorum, onlarda neyin bu kadar korkunç olduğunu merak ediyorum, ben de nadiren kullanıyorum, ancak belirli görevler için daha uygunlar.
Buradaki nokta, bir statik değişkenin yalnızca Expert Advisor'ın tüm süresi boyunca aynı sembol ve zaman çerçevesi için NevDay() çağrılması durumunda kullanılabileceğidir. 2 veya daha fazla karakter varsa, NevDay() yanlış değerler döndürür. EA'm çoklu para birimi olarak tasarlandı... :(
Çoklu para birimi moduna ihtiyacınız varsa, işte hem MT4 hem de MT5'te çalışan bir örnek
Buradaki nokta, bir statik değişkenin yalnızca Expert Advisor'ın tüm süresi boyunca aynı sembol ve zaman çerçevesi için NevDay() çağrılması durumunda kullanılabileceğidir. 2 veya daha fazla karakter varsa, NevDay() yanlış değerler döndürür. EA'm çoklu para birimi olarak tasarlandı... :(
İşte sınıfı kullanan başka bir seçenek
test sonucu