Bir sonraki önemli kontrol, fonksiyonun çağrıldığı programın tipidir. Güncellemeye neden olan gösterge ile aynı periyoda sahip bir zaman serisini güncellemek için bir istek göndermenin oldukça istenmeyen bir durum olduğunu hatırlayın. Gösterge ile aynı sembol periyodu için veri talep edilmesinin istenmemesi, geçmiş verilerin göstergenin çalıştığı aynı iş parçacığında güncellenmesinden kaynaklanmaktadır. Bu nedenle, bir perçin olasılığı yüksektir. Kontrol etmek için, MQL5_PROGRAM_TYPE değiştiricisi ile MQL5InfoInteger() işlevini kullanırız.
Dört köşenin tam verilerini almamız gerekiyor. iCustom'un ilk, en gerekli tepe noktasını yanlış verdiği ortaya çıktı. Grafik görüntünün gerisinde kalıyor, sonraki üçü doğru. Benzeri zaten bulundu - https://www.mql5.com/en/forum/100123
Zaten her şeyi denedim, hatta sadece ZigZag verilerini kontrol etmek için ayrı bir Uzman Danışman attım. Kendiniz görün, belki bir yerde bir hata yaptım? Sadece kurun ve açılış fiyatlarının görselleştirilmesini etkinleştirin. Anla-
//+------------------------------------------------------------------+//| data_ZigZag.mq5 |//| Copyright 2017, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2017, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"inputstring data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
inputint ExtDepth= 12 ;
inputint ExtDeviation= 5 ;
inputint ExtBackstep = 3 ;
inputint n_zz= 100 ; //n_zz =100; double pd_1,pd_2,pd_3,pd_4;
int pn_1,pn_2,pn_3,pn_4;
int zz_Handle;
double zz_buf[];
datetime time[];
string this_sym;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//---
this_sym= Symbol ();
//+------------------------------------------------------------------+//--- сохраним текущий символ графика для дальнейшей работы советника именно на этом символе
zz_Handle= iCustom (this_sym, 0 , "Examples\\Zigzag" ,
ExtDepth,
ExtDeviation,
ExtBackstep
);
Print ( __FUNCTION__ , "__LINE__" , __LINE__ , " . . . . . " ,
"zz_Handle = " ,zz_Handle, " error = " , GetLastError ());
//--- проверяем наличие хендла индикатораif (zz_Handle== INVALID_HANDLE )
{
//--- хендл не получен, выводим сообщение в лог об ошибке, завершаем работу с ошибкойPrint ( __FUNCTION__ , "__LINE__" , __LINE__ , " ----- " ,
"Не удалось получить хендл индикатора zz_Handle" , " error = " , GetLastError ());
return (- 1 );
}
//--- добавляем индикатор на ценовой графикChartIndicatorAdd ( ChartID (), 0 ,zz_Handle);
//--- устанавливаем индексацию для массива zz_buf как в таймсерииArraySetAsSeries (zz_buf, true );
ArraySetAsSeries (time, true );
//---//+------------------------------------------------------------------+return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
IndicatorRelease (zz_Handle);
ArrayFree (zz_buf);
ArrayFree (time);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
//+------------------------------------------------------------------+int zz_copy= 0 ;
//--- копируем данные из индикаторного массива в динамический массив
zz_copy= CopyBuffer (zz_Handle, 0 , 0 ,n_zz,zz_buf);
//--- если есть ошибки, то выводим сообщение в лог об ошибке и выходим из функцииif (zz_copy< 0 )
{
Print ( "Не удалось скопировать данные из индикаторного буфера zz_buf. error = " ,
GetLastError ()); return ;
}
//+------------------------------------------------------------------+
pd_1 = 0 ;
pd_2 = 0 ;
pd_3 = 0 ;
pd_4 = 0 ;
pn_1 = 0 ;
pn_2 = 0 ;
pn_3 = 0 ;
pn_4 = 0 ;
int zz_q= ArraySize (zz_buf);
int q= 0 ;
for (q= 0 ; q<zz_q; q++)
{
if (zz_buf[q]!= 0 && zz_buf[q]!= EMPTY_VALUE )
{
if (pd_1== 0 ) { pn_1=q; pd_1=zz_buf[q]; }
elseif (pd_2== 0 ) { pn_2=q; pd_2=zz_buf[q]; }
elseif (pd_3== 0 ) { pn_3=q; pd_3=zz_buf[q]; }
elseif (pd_4== 0 ) { pn_4=q; pd_4=zz_buf[q]; }
}
if (pn_4> 0 ) break ;
}
//+------------------------------------------------------------------+CopyTime (this_sym, Period (), 0 ,n_zz,time);
//+------------------------------------------------------------------+ObjectDelete ( 0 , "name1" );
string name1= "name1" ;
if (! ObjectCreate ( 0 ,name1, OBJ_ARROW_UP , 0 ,time[pn_1],pd_1))
{
Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
}
//--- установим размер знака ObjectSetInteger ( 0 ,name1, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+ObjectDelete ( 0 , "name2" );
string name2= "name2" ;
if (! ObjectCreate ( 0 ,name2, OBJ_ARROW_UP , 0 ,time[pn_2],pd_2))
{
Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
}
//--- установим размер знака ObjectSetInteger ( 0 ,name2, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+ObjectDelete ( 0 , "name3" );
string name3= "name3" ;
if (! ObjectCreate ( 0 ,name3, OBJ_ARROW_UP , 0 ,time[pn_3],pd_3))
{
Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
}
//--- установим размер знака ObjectSetInteger ( 0 ,name3, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+ObjectDelete ( 0 , "name4" );
string name4= "name4" ;
if (! ObjectCreate ( 0 ,name4, OBJ_ARROW_UP , 0 ,time[pn_4],pd_4))
{
Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
}
//--- установим размер знака ObjectSetInteger ( 0 ,name4, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+///*if (pd_1!= 0 && pd_2!= 0 && pd_3!= 0 && pd_4!= 0 )
Alert ( __FUNCTION__ , "__LINE__" , __LINE__ ,
" q =" ,q,
" pd_1 =" ,pd_1,
" pd_2 =" ,pd_2,
" pd_3 =" ,pd_3,
" pd_4 =" ,pd_4,
" pn_1 =" ,pn_1,
" pn_2 =" ,pn_2,
" pn_3 =" ,pn_3,
" pn_4 =" ,pn_4,
" TimeCurrent()=" , TimeCurrent ()
);
//*///+------------------------------------------------------------------+
}
//+------------------------------------------------------------------+
Soru Metatrader 4'te, tek bir tıklamayla belirli bir zararı durdur ve belirli bir kâr ile seçtiğim 2 ila 250 pozisyonu açmak için bir program yazmak mümkün mü? Tek tek elle açmamak için
Soru Metatrader 4'te, tek bir tıklamayla belirli bir zararı durdur ve belirli bir kâr ile seçtiğim 2 ila 250 pozisyonu açmak için bir program yazmak mümkün mü? Tek tek elle açmamak için
Yapabilir. Soruyu yanlış yerde sorun - burada MT5'te.
MT4 konularında yeni başlayanlar için birkaç dal vardır.
Tünaydın. 1604'ü oluşturmak için yapılan son MT5 güncellemesinden sonra göstergelerim düzgün çalışmayı durdurdu. kullanırım sözde "sıvı" göstergeler. Örneğin, bir pencerede farklı dönemlere ait birkaç stokastik ayarlanır. Yani şimdi kısa olanlar çizildi normalde, daha önce olduğu gibi, biraz daha uzun olanlar sadece birkaç çubuk çizer ve en uzun olanlar hiç çizilmez.
Görünüşe göre hikaye büyük ölçüde eksik hale geldi. Ne olmuş olabileceğini önerebilir misin?
yakın zamanda mql4'ten mql5'e taşındı. RTS endeksinde bir danışmanı test ediyorum ve böyle bir sorun vardı, anlaşma yapma koşullarından biri yazılı olmasına rağmen birkaç anlaşma açıyor: if (... OrdersTotal()==0 ). Bu koşul neden çalışmıyor? Sadece bir ticaret açmak için ne yapılabilir?
RogozaIV : yakın zamanda mql4'ten mql5'e taşındı. RTS endeksinde bir danışmanı test ediyorum ve böyle bir sorun vardı, anlaşma yapma koşullarından biri yazılı olmasına rağmen birkaç anlaşma açıyor: if (...OrdersTotal()==0). Bu koşul neden çalışmıyor? Sadece bir ticaret açmak için ne yapılabilir?
Vitaly buraya bakın https://www.mql5.com/ru/docs/series/timeseries_access#synchronized , yükleme geçmişi için bir komut dosyası örneği var, yardımcı olabilir
Teşekkürler, çözmeye çalışacağım.
Şimdi soru şu:
Bir sonraki önemli kontrol, fonksiyonun çağrıldığı programın tipidir. Güncellemeye neden olan gösterge ile aynı periyoda sahip bir zaman serisini güncellemek için bir istek göndermenin oldukça istenmeyen bir durum olduğunu hatırlayın. Gösterge ile aynı sembol periyodu için veri talep edilmesinin istenmemesi, geçmiş verilerin göstergenin çalıştığı aynı iş parçacığında güncellenmesinden kaynaklanmaktadır. Bu nedenle, bir perçin olasılığı yüksektir. Kontrol etmek için, MQL5_PROGRAM_TYPE değiştiricisi ile MQL5InfoInteger() işlevini kullanırız.
if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE )== PROGRAM_INDICATOR && Nokta ()== nokta && Sembol ()== sembol )
dönüş (-4);
Göstergede benim için çalışması gerekir.
Beyler, ZigZag ile ıstırap çekiyorum.
Dört köşenin tam verilerini almamız gerekiyor. iCustom'un ilk, en gerekli tepe noktasını yanlış verdiği ortaya çıktı. Grafik görüntünün gerisinde kalıyor, sonraki üçü doğru. Benzeri zaten bulundu - https://www.mql5.com/en/forum/100123
Zaten her şeyi denedim, hatta sadece ZigZag verilerini kontrol etmek için ayrı bir Uzman Danışman attım. Kendiniz görün, belki bir yerde bir hata yaptım? Sadece kurun ve açılış fiyatlarının görselleştirilmesini etkinleştirin. Anla-

Doğru veriler nasıl elde edilir?Test cihazı aşağıdaki sonucu verir:
Hilenin nerede olduğunu bulamıyorum. Sevgili profesyoneller, lütfen beni aydınlatın, çok minnettar olacağım.
Soru Metatrader 4'te, tek bir tıklamayla belirli bir zararı durdur ve belirli bir kâr ile seçtiğim 2 ila 250 pozisyonu açmak için bir program yazmak mümkün mü? Tek tek elle açmamak için
Soru Metatrader 4'te, tek bir tıklamayla belirli bir zararı durdur ve belirli bir kâr ile seçtiğim 2 ila 250 pozisyonu açmak için bir program yazmak mümkün mü? Tek tek elle açmamak için
Yapabilir. Soruyu yanlış yerde sorun - burada MT5'te.
MT4 konularında yeni başlayanlar için birkaç dal vardır.
Örneğin - burada .
Tünaydın. Dünden önceki gün MQL çalışmaya başladım, bu yüzden böyle bir şey yazdım.
Test cihazı aşağıdaki çıktıyı verir:
Hilenin nerede olduğunu bulamıyorum. Sevgili profesyoneller, lütfen beni aydınlatın, çok minnettar olacağım.
yazdırmadan önce double'ı dizeye dönüştürün. Ya da neyin yanlış olduğunu açıklayın...
sözde "sıvı" göstergeler. Örneğin, bir pencerede farklı dönemlere ait birkaç stokastik ayarlanır. Yani şimdi kısa olanlar çizildi
normalde, daha önce olduğu gibi, biraz daha uzun olanlar sadece birkaç çubuk çizer ve en uzun olanlar hiç çizilmez.
Görünüşe göre hikaye büyük ölçüde eksik hale geldi. Ne olmuş olabileceğini önerebilir misin?
yakın zamanda mql4'ten mql5'e taşındı. RTS endeksinde bir danışmanı test ediyorum ve böyle bir sorun vardı, anlaşma yapma koşullarından biri yazılı olmasına rağmen birkaç anlaşma açıyor: if (...OrdersTotal()==0). Bu koşul neden çalışmıyor? Sadece bir ticaret açmak için ne yapılabilir?
PositionsTotal ()