改变TF是一个问题

 
其实问题出在画线 的指标上,当它改变TF的地方还没有加载历史数据,那么条形图就会被添加到图表中,它再次计算数据时,分别也会把前面的留出来+跳过。
 
Vasyl Nosal:
实际上,问题在于,这个指标 在改变TF时画线,在其上还没有加载历史数据,计算数据,然后条形图被添加到图表中,它再次计算数据,分别,以前的也被排除在外。

所以在指标的逻辑中存在一个错误。当加载历史记录时,指标的理想选择是:计算其在最后一个条形图时的状态,该条形图在历史上没有变化,在历史的更新部分重新计算数据。

在现实中,这个选项并不总是可能的,因为要返回某个条形图上的指标环境,意味着要从历史的开始进行计算。因此,在指标的复杂算法中,当加载哪怕是一个条形图(不要与新条形图的打开相混淆)时,将对历史进行完全的重新计算。

 
Vasyl Nosal:
其实问题在于,在TF变化时画线 的指标,在其上还没有加载历史数据,计算数据,然后将条形图添加到图表中,它再次计算数据,分别将之前的数据也留下+跳过。

在指标的OnCalculate()中应该进行检查。

if(prev_calculated==0)  // значит история изменилась или это первый проход
 
Karputov Vladimir:

OnCalculate()中的指标需要检查的是。

谢谢你。

我只是被提示的事实所迷惑,即故事是分块加载的。

是的,这就对了。

 
Ihor Herasko:

所以在指标的逻辑中存在一个错误。当加载历史记录时,指标的理想选择是:计算其在最后一个条形图时的状态,该条形图在历史上没有变化,并在历史的更新部分重新计算数据。

在现实中,这个选项并不总是可能的,因为要返回某个条形图上的指标环境,意味着要从历史的开始进行计算。因此,对于任何复杂的指标算法,在加载哪怕是一个条形图(不要与新条形图的开启相混淆)时,都会对历史进行完全的重新计算。

所以唯一可行的解决方案只有?

for(int i=rates_total-prev_calculated;i>=0;i--)

 
Vasyl Nosal:

所以唯一可行的解决方案是?

for(int i=rates_total-prev_calculated;i>=0;i--)

如果我不仅需要重新计算当前栏,那么(例如4)?

for(int i=rates_total-prev_calculated+4;i>=0;i--) 

{ 

if(i>Bars) i=Bars; 
 

是的,这很有效。

当条形图被分块加载时,它们被分块重新计算。

正确的块状物只是最后一个被加载到左边的部分,哈哈。

 
Vasyl Nosal:

是的,这很有效。

当条形图被分块加载时,它们被分块重新计算。

正确的块状物只是最后一个被加载到左边的部分,哈哈。

是时候学习如何写指标了。
 
Victor Nikolaev:
是时候学习如何编写指标了

教我。

而我说,开发商应该在指标的 第一次计算中进行调整。

 
Victor Nikolaev:
是时候学习如何编写指标了

想玩一玩吗?猜猜看,"警报 "是什么回来了?

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[])
  {
  if(prev_calculated!=0) Alert(prev_calculated," M:",Period());
return(rates_total);
  }

 
Vasyl Nosal:

想玩一玩吗?猜猜看,"警报 "是什么回来了?

我不在指标中使用警报。如果有史料下载,则规定要全面重新计算。这很容易控制。