其实问题出在画线 的指标上,当它改变TF的地方还没有加载历史数据,那么条形图就会被添加到图表中,它再次计算数据时,分别也会把前面的留出来+跳过。
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:
是时候学习如何编写指标了
是时候学习如何编写指标了
想玩一玩吗?猜猜看,"警报 "是什么回来了?
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:
想玩一玩吗?猜猜看,"警报 "是什么回来了?
我不在指标中使用警报。如果有史料下载,则规定要全面重新计算。这很容易控制。