错误、漏洞、问题 - 页 1005

 
ns_k:

下午好!

指标缓冲区 是否在指标运行之间保存数值,还是我的终端有什么故障?

我建立了一个指标,然后我注释了计数算法,并按下了编译键--所有的数值都保留在图表上。我想我可能需要再次把指标放在图表上以更新缓冲区的数值;我把它放在缺少计算周期的情况下,它仍然有相同的数值。不得不重新启动终端来摆脱它。

请对此进行评论。

谢谢你!

似乎仍有条件在缓冲区内留下已经计算好的值。我不明白这些条件到底是什么。重新启动终端后,问题就消失了。事实上,这就是为什么我不会向该服务机构写请求。

一般来说,也许这不是一个错误,而是一个特点?

谢谢你!

 
ns_k:

似乎确实有一些条件,在这些条件下,已经计算出的数值会留在缓冲区内。这些条件到底是什么,我不明白。重新启动终端后,问题消失了。事实上,这就是为什么我不会向该服务机构写请求。

一般来说,也许这不是一个错误,而是一个特点?

谢谢你!

只要在填充前或初始化时将数组的值重置为零即可。

ArrayInitialize(buffer_data,EMPTY_VALUE);
 
ns_k:

似乎确实有一些条件,在这些条件下,已经计算出的数值会留在缓冲区内。这些条件到底是什么,我不明白。重新启动终端后,问题消失了。事实上,这就是为什么我不会给该服务写一个应用程序。

一般来说,也许这不是一个错误,而是一个特点?

谢谢你!

需要重置这些值
 
tol64:

在填充之前或初始化过程中,只需将数组的值重置为零。

谢谢你!!!。
 

如果右键上下文菜单能有一个单独的项目,并有自定义指标,那就更好了

谢谢你!

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

请再问一个问题 :)

有什么方法可以在指标窗口而不是图表窗口中显示评论?

谢谢你!

 
ns_k:

如何将评论显示在指标窗口而不是图表窗口?

对这种行为没有规定。如果你真的需要,就使用物体。
 

下午好!

如果可能的话,最好使指标属性窗口 非模式化

谢谢你!

 
ns_k:

下午好!

如果可能的话,最好使指标属性窗口 非模式化

谢谢你!

并添加 "应用"按钮。换句话说,我们已经改变了数值,按下"应用"按钮,我们就可以看到变化,而不必关闭窗口。这将是更方便的。

还有第一百次--可以改变属性窗口的大小。

P.S. 在服务台写更多。

 

我不知道我在哪里变笨了,可以这么说。

int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
                 )

  {
   
   
   
   doDrawIndicator(gSymbols[0],rates_total,g1ThermB);


//Comment(rates_total);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int doDrawIndicator(string xSymbol, int xRatesTotal, double &xBuffer[])//,double &xPrice[],double &xBuffer[])
  {
   double l1Close[]; // , l2Close[];
   datetime lTime[];
   datetime lEnd,lStart;
   int copied;
   ArrayInitialize(xBuffer,0);
   lEnd=TimeCurrent();
   lStart=(TimeCurrent()/86400)*86400+3600;

   copied=CopyTime(xSymbol,Period(),lStart,lEnd,lTime);
   if(copied==-1){Print("Can't copy time",__FUNCSIG__);return(0);}
   copied=CopyClose(xSymbol,Period(),lStart,lEnd,l1Close);
   if(copied==-1){Print("Ждите...1");return(0);}

   sThermometer lT;
  // Print("rates_total=",rates_total);
   //Comment(xSymbol);
   Comment(copied);
   g1RM=new CRangeManager(1,0.2,20,xSymbol);
 
   for(int i=0;i<copied;i++)
     {
      lT=g1RM.getStateByValue(l1Close[copied-i-1]);
      if(gThermRange==Up && lT.cTemperature.State<7 || gThermRange==Down && lT.cTemperature.State>6 )
        {
         xBuffer[xRatesTotal-i-1]=lT.cTemperature.Temperature;
        }
      else
        {
         xBuffer[xRatesTotal-i-1]=0;
        }
     }

     
   delete g1RM;
   return(1);

  }

指标不更新,也就是说,我一直看到739说在左角(扔在细枝末节上,你明白的)。而只要我按下编译键,指标就会被更新。代码 中的错误 在哪里?

谢谢!