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

 
Vladimir Karputov :

Optimizasyon, AJANLAR (sizin durumunuzda - YEREL TEMSİLCİLER) tarafından gerçekleştirilir.

Yerel aracıların günlüklerini görüntülemek için : Günlük sekmesine sağ tıklayın ve aracı klasörüne gidin

Hataların olmadığı nokta budur. Her şey sayılır. Belki bir tür güvenlik duvarı veya başka bir şey?

Dosyalar:
 
Aleksandr Dziuba :

Hataların olmadığı nokta budur. Her şey sayılır. Belki bir tür güvenlik duvarı veya başka bir şey?

Tek bir test yapın - tek geçiş. Optimizasyon değil, tek geçiş. Bu şekilde günlük görünür olacaktır.

 
Vladimir Karputov :

Tek bir test yapın - tek geçiş. Optimizasyon değil, tek geçiş. Bu şekilde günlük görünür olacaktır.

görsel derken? Günlüğü aldım. Orada görülecek kötü bir şey yok. Tüm parametreler geçildi. Hatta yerine getirdi. ve çıktı Bakiyesi 20.000 olduğu gibi kaldı.

Dosyalar:
20200924.log  17 kb
 
Aleksandr Dziuba :

görsel derken? Günlüğü aldım. Orada görülecek kötü bir şey yok. Tüm parametreler geçildi. Hatta yerine getirdi. ve çıkış Bakiyesi 20.000 olduğu gibi kaldı.

Bu yüzden kodu, hata olması durumunda veya bir ticaret işlemini tamamlamanın imkansız olması durumunda hata mesajları verecek şekilde değiştirin. Veya genel olarak kod hatalıdır ve sinyal vermez. Mucizeler gerçekleşmez.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Импортируемая функция не может иметь такого параметра (нельзя передавать указатель, класс или структуру, содержащую динамический массив, указатель, класс и т.д.) Недопустимый возвращаемый тип. Например, такая ошибка будет выдана для функций, импортированных из...
 
Vladimir Karputov :

Bu yüzden kodu, hata olması durumunda veya bir ticaret işlemini tamamlamanın imkansız olması durumunda hata mesajları verecek şekilde değiştirin. Veya genel olarak kod hatalıdır ve sinyal vermez. Mucizeler gerçekleşmez.

Evet.

Genel olarak, optimizasyon Ontick'e dahil değildir. OnInit işleniyor. Ve On Tick oluşturulmaz. Sorun nedir.

Giriş ve çıkışlara noktalı Yazdır ( ) koyun. Yalnızca Init günlüğe kaydedilir.

not

Hataları işliyorum. Alışkanlık. 1987'den beri program yazıyorum.

 
Aleksandr Dziuba :

Evet.

Genel olarak, optimizasyon Ontick'e dahil değildir. OnInit işleniyor. Ve On Tick oluşturulmaz. Sorun nedir.

Giriş ve çıkışlara noktalı Yazdır ( ) koyun. Yalnızca Init günlüğe kaydedilir.

not

Hataları işliyorum. Alışkanlık. 1987'den beri program yazıyorum.

Şifre olmadan sadece telepatlar yardım edebilir - ve şimdi, şansın yaver gideceği gibi, tüm telepatlar tatilde.

 
Vladimir Karputov :

Kod olmadan sadece telepatlar yardım edebilir - ve şimdi, şansın yaver gideceği gibi, tüm telepatlar tatilde.

Nedenini buldum. Bazı nedenlerden dolayı, Ontick'te göstergeler yeniden hesaplanmaz (yeniden hesaplanan çubukların sayısını göstermez). Belki alıntıları güncellemeniz gerekir.

Yine de teşekkür ederim. Daha akıllı oldum. Günlüklerin nerede yazıldığını buldum.

 

MQL4 -> MQL5'ten basit bir gösterge dönüştürüldü, ancak son birkaç çubukta sinyal yok. Lütfen nedenini bulmama yardım et. Kaynak kodu ve sonuç eki. Dönüştürülmüş olanı da buraya koyacağım.

 #property indicator_chart_window
#property indicator_plots    4
#property indicator_buffers 4
#property indicator_color1 PaleVioletRed
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
#property indicator_color4 LimeGreen

input int   dist2           = 21 ;       // Distance#2
input int   dist1           = 14 ;       // Distance#1

double b1[];
double b2[];
double b3[];
double b4[];

int     handle_atr;
int     min_rates_total;
double atr[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit () {

   SetIndexBuffer ( 0 ,b1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,b2, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,b3, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,b4, INDICATOR_DATA );
   
   ArraySetAsSeries (b1, true );
   ArraySetAsSeries (b2, true );
   ArraySetAsSeries (b3, true );
   ArraySetAsSeries (b4, true );

   PlotIndexSetInteger ( 0 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 1 , PLOT_DRAW_TYPE , DRAW_LINE );
   PlotIndexSetInteger ( 2 , PLOT_DRAW_TYPE , DRAW_ARROW );
   PlotIndexSetInteger ( 3 , PLOT_DRAW_TYPE , DRAW_ARROW );

       PlotIndexSetInteger ( 2 , PLOT_ARROW , 159 );
       PlotIndexSetInteger ( 3 , PLOT_ARROW , 159 );
   
   ResetLastError ();
   handle_atr = iATR ( NULL , PERIOD_CURRENT , 50 );
   if (handle_atr== INVALID_HANDLE ) {
       Print ( "   ***   ATR handle was unable to create. Error " , GetLastError ());
       return INIT_FAILED ;
   }

   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   PlotIndexSetDouble ( 3 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   
   PlotIndexSetString ( 0 , PLOT_LABEL , "SuperSignals Upper" );
   PlotIndexSetString ( 1 , PLOT_LABEL , "SuperSignals Lower" );
   PlotIndexSetString ( 2 , PLOT_LABEL , "SuperSignals Sell" );
   PlotIndexSetString ( 3 , PLOT_LABEL , "SuperSignals Buy" );

         return INIT_SUCCEEDED ;
   
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &High[],
                 const double &Low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[]) {
                
   int counted_bars=prev_calculated;
   int i,limit;
   
   ArraySetAsSeries (Low, true );
   ArraySetAsSeries (High, true );

   if (counted_bars< 0 ) return 0 ;
   if (counted_bars> 0 ) counted_bars--;
           limit=rates_total-counted_bars;
           limit= MathMax (limit,dist1);
           limit= MathMax (limit,dist2);

   for (i = limit- 1 ; i >= 0 ; i--) {
         int hhb1 = ArrayMaximum (High,i-dist1/ 2 ,dist1);
         int llb1 = ArrayMinimum (Low, i-dist1/ 2 ,dist1);
         int hhb  = ArrayMaximum (High, MathMax ( 0 ,i-dist2/ 2 ),dist2);
         int llb  = ArrayMinimum (Low, MathMax ( 0 ,i-dist2/ 2 ),dist2);

            b1[i] = EMPTY_VALUE ;
            b2[i] = EMPTY_VALUE ;
            b3[i] = EMPTY_VALUE ;
            b4[i] = EMPTY_VALUE ;
         
         ArraySetAsSeries (atr, true );
         int copied= CopyBuffer (handle_atr, 0 , 0 ,limit,atr);
         if (copied<= 0 ) Print ( "   ***   ATR failed to copy." );
         double tr = atr[i];

                      b1[i] = High[hhb];
                      b2[i] = Low[llb];
         if (i==hhb1) b3[i] = High[hhb1]+tr/ 2 ;
         if (i==llb1) b4[i] = Low[llb1] -tr/ 2 ;
    }
   
   return rates_total;
}
//+------------------------------------------------------------------+

Sonuç.


 
Grigori.SB :

MQL4 -> MQL5'ten basit bir gösterge dönüştürüldü, ancak son birkaç çubukta sinyal yok. Lütfen nedenini bulmama yardım et. Kaynak kodu ve sonuç eki. Dönüştürülmüş olanı da buraya koyacağım.

Sonuç.


Görünüşe göre platformlar arasında mantıksız bir şekilde yapılan bir şey suçlu olabilir.

Farklı giriş parametrelerine dikkat edin

MT4

 ArrayMaximum
Ищет в одномерном числовом массиве максимальный элемент.

int    ArrayMaximum (
   const void &   array[],             // массив для поиска
   int            count= WHOLE_ARRAY ,   // количество проверяемых
   int            start= 0                // с какого индекса начинаем поиск
   );

MT5

 ArrayMaximum
Ищет максимальный элемент в первом измерении многомерного числового массива.

int    ArrayMaximum (
   const void &   array[],             // массив для поиска
   int            start= 0 ,             // с какого индекса начинаем поиск
   int            count= WHOLE_ARRAY      // количество проверяемых
   );
 
Vitaly Muzichenko :

Görünüşe göre platformlar arasında mantıksız bir şekilde yapılan bir şey suçlu olabilir.

Farklı giriş parametrelerine dikkat edin

MT4

MT5

Teşekkürler Vitaly.

Bu noktada değişkenlerin sırası doğru, dönüşüm sırasında onları değiştirdim. Evet ve MQL4 sürümünde iHighest / iLowest işlevleri vardı.

Burada farklı bir şey var. Ben zaten kafamı kırdım.