来自一个 "傻瓜 "的问题 - 页 234

 
forward666: 是的,我需要一个视觉化

用于测试: https://www.metatrader5.com/ru/terminal/help/algotrading/visualization

目前还没有发现对真实交易的帮助--只需在模拟账户中尝试开仓和平仓。

 
Boris.45: 下午好,尊敬的交易员们!请帮助一个新手程序员。 我已经写了一部分程序,使用分形图搜索几个时间段的Borispolz的移动通道(SK),并开始写算法来决定开仓。 我遇到了一个情况,快速移动趋势的时间段只有一到两个柱子。这种情况表明:在搜索和计算SK参数时,你需要在选定的时间段内工作,而下单或开仓的决定应在非常小的时间段内做出。请告知如何安排程序,使计算SK参数的块只在选定的时间段工作,例如H1和H4,而决定下单的块在M1时间段工作。 我在文章中没有找到这个问题的解决方案。

谢谢你的关注。

我离分形很远,但这里有一些一般的考虑。我们可以用最简单的方法尝试:创建一个指标,在H4上计算 "SK参数"。然后让我们的专家顾问在每一个刻度上检查这个指标,并做出下单的决定。
 
Yedelkin:

用于测试: https://www.metatrader5.com/ru/terminal/help/algotrading/visualization

对于真实交易,我还没有找到任何帮助--只需尝试在模拟账户中开仓和平仓。

谢谢你!我将尝试一下。

但我只是需要它在模拟账户上进行可视化操作)

 
forward666: 但我只是需要它在模拟账户上进行可视化操作)
如果在模拟账户上不能工作,请写信给我。
 
Yedelkin:
如果它在模拟账户上不起作用,请让我知道。
好的!我今晚会试一试,并向你汇报。
 
forward666:

但我只是需要它在模拟账户上进行可视化操作)


从历史上看,你可以把鼠标拉到图表上(用移位器--所有的)。

!!!用控制器将重置图表设置。
 

代码有什么问题?

图形很好,在测试器中出现了 "阵列超出范围 "的错误。

#property indicator_label1  "LINE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGold
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

input int    period   = 10;       //Период усредения
input bool   USE_LIMIT= false;    //вкл/выкл лимитирование
                                  //Заключается в ограничении максимального изменения значения индикатора
input double use_limit= 0.00005;  //Величина
                                  //на которую максимально может измениться индикатор

double         Buffer[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);
   //PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- вычисления значений индикатора
//--- calculate the indicator values
   int start=0;
//--- если расчет уже производился на предыдущем запуске OnCalculate
//--- if the calculation is made on a previous run of OnCalculate
   if(prev_calculated>0) start=prev_calculated-1; // установим начало расчетов с предпослденего бара -- Set the start of the penultimate bar calculations
//--- заполняем индикаторный буфер значениями
//--- fill indicator buffer values
   for(int i=start;i<rates_total;i++)
     {
      Buffer[0]=price[0];
      double delta=(price[i]-Buffer[i])/period;
      if(USE_LIMIT && delta>use_limit)
        {
         delta=use_limit;
        }
      if(USE_LIMIT && delta<-use_limit)
        {
         delta=-use_limit;
        }
      Buffer[i+1]=Buffer[i]+delta;
     }
//--- вернем значение prev_calculated для следующего вызова функции
//--- return the value for the next call of prev_calculated function
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
lazarev-d-m:

代码有什么问题?

图形很好,在测试器中出现了 "阵列超出范围 "的错误。


循环直到i<rates_total.然后有Buffer[ i+1] .

缓冲区[rate_total] .没有这样的东西。最后的索引是rate_total-1。

 
lazarev-d-m:

代码有什么问题?

图形很好,在测试器中出现了 "阵列超出范围 "的错误。


Buffer[i+1] === +1 не делается проверка на выход за массив
 
Karlson:


循环进行,直到i<rates_total.然后有Buffer[ i+1] .

缓冲区[rate_total] .没有这样的东西。最后的索引是rate_total-1。

改成了这样

i<rates_total-1
似乎是有效的