初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1253

 
Vladimir Karputov:

优化是由代理(在你的情况下,是本地代理)进行的。

查看 本地代理日志:右击日志标签,进入代理文件夹

这就是问题所在,没有错误。一切都检查出来了,也许有防火墙或其他什么东西。

附加的文件:
 
Aleksandr Dziuba:

这就是问题所在--没有错误。一切都算数,也许有防火墙之类的东西?

运行一次测试,一次通过。不是优化,只是单次通过。这样你就能看到日志了。

 
Vladimir Karputov:

运行单个测试--单次通过。不是优化,而是一次过。这样你就可以肯定地看到日志。

你是什么意思,视觉?好了,我拿到了日志。我没有看到有什么不好的地方。参数都是通过的。即使它运行了,但产出仍然是20,000。

附加的文件:
20200924.log  17 kb
 
Aleksandr Dziuba:

你是什么意思,视觉?好了,我拿到了日志。我不认为这有什么不妥。参数都是通过的。但输出的余额是20000,现在也是如此。

因此,修改代码,使其在出现错误或无法进行交易操作时给出错误信息。或者一般来说,代码是错误的,没有给出信号。奇迹不会发生。

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

所以要修改代码,使其在发生错误或交易无法执行时给出错误信息。或者代码有问题,根本就没有发出任何信号。没有奇迹。

是的。

因此,优化不包括在Ontick中。正在处理OnInit。但On-Tick并没有生成。问题就在这里。

我在输入和输出中集成了打印点( )。 只有Init被写入日志。

P.S.

我处理错误。习惯的力量。我从1987年开始写程序。

 
Aleksandr Dziuba:

是的。

一般来说,优化并不包括在Ontick中。OnInit被处理。但是On Tick没有生成。问题是。

我在输入和输出中集成了打印点( )。 只有Init被写入日志。

P.S.

我处理错误。习惯的力量。我从1987年开始写程序。

只有心灵感应者才能在没有密码的情况下提供帮助--而现在所有的心灵感应者都在度假。

 
Vladimir Karputov:

没有密码,只有心灵感应者可以提供帮助--而现在,幸运的是,所有的心灵感应者都在度假。

我找到了原因。由于某些原因,指标在Ontick中没有被重新计算(它没有给出重新计算的条数)。也许我需要更新引言。

不过,我已经失去了感谢。我已经变得更聪明了。我已经知道了日志是在哪里写的。

 

从MQL4->MQL5转换了一个简单的指标,但在最后几个柱子上没有信号。请帮助我找到原因。源代码和结果见附件。我也将在这里粘贴转换后的版本。

#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;
}
//+------------------------------------------------------------------+

其结果是。


 
Grigori.S.B:

从MQL4->MQL5转换了一个简单的指标,但在最后几个柱子上没有信号。请帮助我找到原因。源代码和结果见附件。我也将在这里粘贴转换后的版本。

其结果是。


罪魁祸首可能是一些在平台之间不符合逻辑的做法

请注意不同的输入参数

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:

排序的罪魁祸首可能是一些在平台之间没有逻辑的事情

注意不同的输入参数

MT4

MT5

谢谢你,维塔利。

这个地方的变量顺序是正确的。 我在转换过程中把它们对调了。此外,MQL4中还有iHighest/ iLowest函数

这是另一回事。我已经绞尽脑汁了。