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

 
Kira27:

(dc)) 最后一个问题的答案对理解SB设备有很大帮助。

变量 -- *位置。它被标记为红色。它只是一个有这个名字的变量,还是*意味着什么? 它被编译成这个尾巴, 包括#include

而其中没有这样的变量,它是从哪里来的,是在什么地方声明的吗?)接下来,顺便说一下,这也不失为一个有趣的问题,它是什么 -- double &sl ???

阅读功能 为起点。有关于函数声明中的变量。

也要正确地插入按钮的代码编码

 

你能告诉我问题可能是什么吗?我把一个EA放在图表上,它不会进去,专家顾问这样写。

2021.01.24 22:11:44.019 Nova V6 (EURUSD,H1) cannot load custom indicator 'Standard Deviation smoothing' [4802]
2021.01.24 22:11:44.020 Nova V6 (EURUSD,H1) Failed to create handle of the iCustom indicator for the symbol EURUSD/PERIOD_H1, error code 4802



在日志中,这个

2021.01.24 22:18:04.506 Experts expert Nova V6 (EURUSD,H1) loaded successfully
2021.01.24 22:18:07.274 Experts initializing of Nova V6 (EURUSD,H1) failed with code 1
2021.01.24 22:18:07.288 Experts expert Nova V6 (EURUSD,H1) removed
Standard Deviation - Трендовые индикаторы - Справка по MetaTrader 5
Standard Deviation - Трендовые индикаторы - Справка по MetaTrader 5
  • www.metatrader5.com
Технический Индикатор Стандартное отклонение (Standard Deviation, StdDev) измеряет волатильность рынка. Этот индикатор характеризует размер...
 
pit84:

你能告诉我问题可能是什么吗?我把一个EA放在图表上,它不会进去,专家顾问这样写。



在我的日记中,这样写道

在 "指标 "文件夹中没有"标准偏差 平滑 "指标。

 
pit84:

你能告诉我问题可能是什么吗?我把一个EA放在图表上,它不会进去,专家顾问这样写。



在日志中,它是这样说的

没有自定义指标指示器

 

最有趣的是,有一个指标,它可以毫无问题地放在图表上,但专家顾问不愿意

 
pit84:

最有趣的是,有一个指标,它可以毫无问题地进入图表,但EA却不愿意

仔细阅读:在你表示的地方,没有指标。

使用编码 按钮插入您的MQL5代码,并从Windows Explorer粘贴一张截图--以证明指标的存在。
 
BillionerClub:

不远的地方,从步行,同样的错误,告诉我代码中的错误是什么?

所有的心灵感应者都在度假。不幸的是,没有人可以阅读你的想法。

 
BillionerClub:

离收银台不远处,从去,同样的错误,告诉我代码中的错误是什么?

从,远,从,去,说,去,与 - HZ )))))))))))

 
Vladimir Karputov:

所有的心灵感应者都在度假。不幸的是,没有人可以阅读你的想法。

基本上我自己在寻找我的代码中的bug,但由于这里有讨论,我决定把它交给你,也许它也被讨论,也许我的代码也会被解决。

 
//+------------------------------------------------------------------+
//|                                 Standard Deviation smoothing.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#include <MovingAverages.mqh>
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//--- the iStdDev plot
#property indicator_label1  "StdDev smoothing"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGreenYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- input parameters 
input int                  Inp_StdDev_ma_period    = 20;          // period of averaging
input int                  Inp_StdDev_ma_shift     = 0;           // shift
input ENUM_MA_METHOD       Inp_StdDev_ma_method    = MODE_SMA;    // type of smoothing
input ENUM_APPLIED_PRICE   Inp_StdDev_applied_price= PRICE_CLOSE; // type of price
//--- indicator buffer 
double StdDevBuffer[];
double StdDevBufferTemp[];
int    handle_iStdDev;        // variable for storing the handle_iStdDev of the iStdDev indicator 
string short_name;            // name of the indicator on a chart 
int    bars_calculated=0;     // we will keep the number of values in the Standard Deviation indicator 
int    m_weightsum;
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
   m_weightsum=0;
//--- assignment of array to indicator buffer 
   SetIndexBuffer(0,StdDevBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,StdDevBufferTemp,INDICATOR_CALCULATIONS);
//--- set shift 
   PlotIndexSetInteger(0,PLOT_SHIFT,Inp_StdDev_ma_shift);
//--- create handle_iStdDev of the indicator iStdDev   
   handle_iStdDev=iStdDev(Symbol(),Period(),Inp_StdDev_ma_period,
                          Inp_StdDev_ma_shift,Inp_StdDev_ma_method,Inp_StdDev_applied_price);
//--- if the handle_iStdDev is not created 
   if(handle_iStdDev==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle_iStdDev of the iStdDev indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//--- show the symbol/timeframe the Standard Deviation indicator is calculated for 
   short_name=StringFormat("StdDev smoothing(%d)",Inp_StdDev_ma_period);
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- normal initialization of the indicator   
   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[])
  {
//--- number of values copied from the iStdDev indicator 
   int values_to_copy;
//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle_iStdDev);
   if(calculated<=0)
     {
      PrintFormat("BarsCalculated() returned %d, error code %d",calculated,GetLastError());
      return(0);
     }
//--- if it is the first start of calculation of the indicator or if the number of values in the iStdDev indicator changed 
//---or if it is necessary to calculated the indicator for two or more bars (it means something has changed in the price history) 
   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
     {
      //--- if the iStdDevBuffer array is greater than the number of values in the iStdDev indicator for symbol/period, then we don't copy everything  
      //--- otherwise, we copy less than the size of indicator buffers 
      if(calculated>rates_total)
         values_to_copy=rates_total;
      else
         values_to_copy=calculated;
     }
   else
     {
      //--- it means that it's not the first time of the indicator calculation, and since the last call of OnCalculate() 
      //--- for calculation not more than one bar is added 
      values_to_copy=(rates_total-prev_calculated)+1;
     }
//--- fill the array with values of the Standard Deviation indicator 
//--- if FillArrayFromBuffer returns false, it means the information is nor ready yet, quit operation 
   if(!FillArrayFromBuffer(StdDevBufferTemp,Inp_StdDev_ma_shift,handle_iStdDev,values_to_copy))
      return(0);
   if(prev_calculated==0)
      for(int i=0;i<Inp_StdDev_ma_period-1;i++)
         StdDevBufferTemp[i]=0.0;
   switch(Inp_StdDev_ma_method)
     {
      case  MODE_SMA:
         SimpleMAOnBuffer(rates_total,prev_calculated,0,3,StdDevBufferTemp,StdDevBuffer);
         break;
      case  MODE_EMA:
         ExponentialMAOnBuffer(rates_total,prev_calculated,0,3,StdDevBufferTemp,StdDevBuffer);
         break;
      case  MODE_SMMA:
         SmoothedMAOnBuffer(rates_total,prev_calculated,0,3,StdDevBufferTemp,StdDevBuffer);
         break;
      default:
         LinearWeightedMAOnBuffer(rates_total,prev_calculated,0,9,StdDevBufferTemp,StdDevBuffer,m_weightsum);
         break;
     }
//--- memorize the number of values in the Standard Deviation indicator 
   bars_calculated=calculated;
//--- return the prev_calculated value for the next call 
   return(rates_total);
  }
//+------------------------------------------------------------------+ 
//| Filling indicator buffers from the iStdDev indicator             | 
//+------------------------------------------------------------------+ 
bool FillArrayFromBuffer(double &std_buffer[],  // indicator buffer of the Standard Deviation line 
                         int std_shift,         // shift of the Standard Deviation line 
                         int ind_handle,        // handle_iStdDev of the iStdDev indicator 
                         int amount             // number of copied values 
                         )
  {
//--- reset error code 
   ResetLastError();
//--- fill a part of the iStdDevBuffer array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(ind_handle,0,-std_shift,amount,std_buffer)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iStdDev indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
//--- everything is fine 
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Indicator deinitialization function                              | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason)
  {
//--- clear the chart after deleting the indicator 
   Comment("");
  }
//+------------------------------------------------------------------+

Vladimir Karputov:

仔细阅读:你指出的地方没有指标。

使用按钮插入您的MQL5代码,并从Windows Explorer中粘贴一张截图--以证明指标的存在。
附加的文件:
tvkzq3.PNG  145 kb
xfwzp8.PNG2.PNG  148 kb