Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 747

 
Sergey Gritsay :

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-


 //+------------------------------------------------------------------+
//|                                                  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"

input string    data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
input int       ExtDepth= 12 ;
input int       ExtDeviation= 5 ;
input int       ExtBackstep = 3 ;
input int 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                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   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                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   IndicatorRelease (zz_Handle);
   ArrayFree (zz_buf);
   ArrayFree (time);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//+------------------------------------------------------------------+
   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]; }
         else if (pd_2== 0 ) { pn_2=q; pd_2=zz_buf[q]; }
         else if (pd_3== 0 ) { pn_3=q; pd_3=zz_buf[q]; }
         else if (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 ()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
Doğru veriler nasıl elde edilir?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
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 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

 
fxtz :

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 .

 
antonsinichkin :
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...
 
Bu konuyla ilgili olmayan yorumlar " MQL4 MT4 MetaTrader 4 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 
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?
 PositionsTotal ()