if (rates_total == prev_calculated) return rates_total;
int startInd = rates_total - prev_calculated;
for (int i = startInd; i >= 0; i--)
{
//тут считаем индикатор, который обращается к другому индикатору на старшем ТФ
}
//проверка готовности данных и индикатора на другом TFif (SeriesInfoInteger (Symbol (), tf, SERIES_SYNCHRONIZED))
{
if (iBars (Symbol (), tf) != BarsCalculated (handleFr)) return0;
}
elsereturn0;
//проверка на наличие нового бараif (rates_total == prev_calculated) return rates_total;
//проверка готовности данных и индикатора на другом TFif (SeriesInfoInteger (Symbol (), tf, SERIES_SYNCHRONIZED))
{
if (iBars (Symbol (), tf) != BarsCalculated (handleFr)) return0;
}
elsereturn0;
指标是我最薄弱的地方 ))))
但是!
要么我根本不懂,要么你有点错。
据我所知,prev_calculated是一个未计算数据的计数器。而一旦传入的数据被计数,该计数器就会被重置......。就像,就这样,伙计,没有更多的新数据可以计算....。)))
而在这种情况下,指标应该完全 重新计算的原因是什么--我不知道!
---------------
说了一个小谎 ))))
不是指标被重新计算,而是 "指数 "被重新计算,以使它们在历史上 "看起来不错";)
计数器因程序员无法控制的原因而被重置,就像指示灯第一次运行一样!
每一个新酒吧都是这样的吗?他们被安抚了,不是吗?
如果不是每一个柱子,有不同的原因来重设pre_calc。
关于交易、自动交易系统和交易策略测试的论坛
虫子、虫子、问题
Andrey Dik, 2021.05.27 13:53
也就是说,一旦新的 时间框架条 出现,预先计算的计数器就会被清零。这意味着指标会被重新计算,就像它第一次启动时一样。
这样的结构你熟悉吗?
问题不在于EA的逻辑(重画、不重画、少画或其他什么),而在于prev_calculated被重置,而没有人要求它这样做!这就是问题所在。
我认为问题在于。
你不要让另一个TF上的被调用的指标计算每一个tick,然后你调用它,历史是同步的,从该指标的零开始计算。
我创建了一个测试,被调用的指标计算了所有内容,但没有重置为prev_calculated == 0。
我在指标中画了收盘,并以一个新的条形图和prev_calculated == 0来解开事件。
调用这个指标(获得缓冲区的最后两个值),同时在你的TF上画出收盘价。
运行M1的最后一个指标,对数。
2021.05.27 21:48:34.196 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:48:00
2021.05.27 21:48:34.197 tst_tf (EURUSD,M1) tst_tf prev_calculated == 0
2021.05.27 21:48:34.197 tst_tf (EURUSD,M1) Error CopyBuffer # 4806
2021.05.27 21:48:34.197 tst (EURUSD,M5) tst 新栏 2021.05.27 21:45:00
2021.05.27 21:48:34.197 tst (EURUSD,M5) tst prev_calculated == 0
2021.05.27 21:49:01.636 tst_tf (EURUSD,M1) tst_tf new bar 2021.05.27 21:49:00
2021.05.27 21:50:00.149 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:50:00
2021.05.27 21:50:00.149 tst_tf (EURUSD,M5) tst 新栏 2021.05.27 21:50:00
2021.05.27 21:51:01.789 tst_tf (EURUSD,M1) tst_tf 新条 2021.05.27 21:51:00
2021.05.27 21:52:02.832 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:52:00
2021.05.27 21:53:00.920 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:53:00
2021.05.27 21:54:02.778 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:54:00
2021.05.27 21:55:00.308 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:55:00
2021.05.27 21:55:00.308 tst_tf (EURUSD,M5) tst 新栏 2021.05.27 21:55:00
2021.05.27 21:56:00.118 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:56:00
2021.05.27 21:57:00.419 tst_tf (EURUSD,M1) tst_tf 新栏 2021.05.27 21:57:00
每家新酒吧都是这样的吗?他们是过度保险还是什么......。
如果不是在每个柱子上,有不同的原因来重置pre_calc。
确切地说,是在每一个主要TF的新条上。
例如,如果指标在M1上工作,在M5上访问指标,那么每5分钟,指标将被完全重新计算。
我认为问题在于。
你不能让另一个TF上的被调用指标每隔一段时间就计算一次,然后你调用它,历史记录就会同步,并从该指标的零开始计算。
我创建了一个测试,被调用的指标计算了所有内容,但没有重置为prev_calculated == 0。
我在指标中画了收盘,然后用一个新的条形图解开事件,并且prev_calculated == 0 。
调用该指标(获得缓冲区的最后两个值),同时在你的TF上画出收盘价。
我检查所要求的更高的TF(M5)上的数据同步 和指标的准备情况,如果它没有准备好,则退出。
因此,该指标只在M1栏开盘时工作一次,而不是在每个tick上工作。
我希望开发商能听从我的请求。
我检查所要求的更高的TF(M5)上的数据同步 和其上指标的准备情况,如果没有准备好,则退出。
因此,该指标只在M1栏开盘时工作一次,而不是在每个tick上工作。
我希望开发商能听从我的请求。
这不应该在指标中正确工作。
如果我没有弄错的话,在帮助中,有一个关于所有TFs的分页数据的脚本明细,应该有一个警告,即不能从指标中请求历史数据,因为该指标是异步工作的。
建议在你绑定句柄后使用BarsCalculated()一次。
UPD: 历史分页的脚本和解释为什么它在指标中不起作用:https://www.mql5.com/ru/docs/series/timeseries_access
我检查所要求的更高的TF(M5)上的数据同步 和其上指标的准备情况,如果它没有准备好,则退出。
因此,该指标只在M1栏开盘时工作一次,而不是在每个tick上工作。
我真的必须使用我的自定义预计算吗? 我希望开发者能听从我的请求。
这样的检查是为了什么?
如果写成return 0;没有条件,那就简单多了。
在每个新的条形图上,条件将被满足,所有条形图将被重新计算,而不考虑同步性。你写了一个考虑不周的代码,并假装它是一个终端错误...
这样的检查有什么意义?
如果不加条件,写成return 0;就更容易了,就是这样。
该条件将在每一个新的条形图上得到满足,所有条形图将被重新计算,而不考虑同步性。你写了一个草率的代码,并把它当作一个终端错误来处理...
再想想吧。