// --- Переменная для хранения текущего ТФENUM_TIMEFRAMES currentTF;
//+---------------------------------------------------------------------------+voidOnInit()
{
currentTF = (ENUM_TIMEFRAMES)Period();
}
//+---------------------------------------------------------------------------+voidOnDeinit(constint reason)
{
// --- на момент выгрузки индикатора уже сменился ТФif(currentTF != Period())
{
// если нужно, удалим объекты имеющие префикс старого ТФ и выходим, не трогаем цвет основного графикаreturn;
}
// раз дошли сюда, ТФ не сменился, восстанавливаем цвет основного графика// удалим объекты имеющие префикс старого ТФ
}
这个问题的解决就像两个手指一样...你知道吗...
在OnDeinit中,在删除对象之前,有必要对去初始化的原因 设置条件...如果不是周期性变化,那么该对象将被删除。就这样了...
是的,我不能在TF变化时删除一些对象或资源,我甚至可以通过对象-资源保存一些小数组,并在资源中写入关于TF变化的信息,但重点是我的单元可能在新的时间范围内执行后开始执行,我应该如何通知单元,时间范围已经改变,应该读取旧的数据?这不是错的吗?
什么样的逻辑是被宠坏的?
当你改变时间框架时,就会创建一个新的指标副本,对前一个副本一无所知。在一定时间内(非常短),指标的两个副本都是平行存在的。然后卸下之前的副本。
阅读文件https://www.mql5.com/ru/docs/runtime/running
我已经阅读了链接的描述,但没有发现这样的信息,就像你给的那样。如果真的是这样,对指标开发者来说是一个很大的问题。当你改变时间框架时,采用这样的逻辑来重新加载指标,这是非常奇怪和非常糟糕的。为什么我们需要在内存中存在同一指标的两个副本?谁从中受益?它能带来什么?更合理的做法是,完成指标的一个副本的执行,卸载它,然后才加载下一个副本。
这就是全部!?
我一直在做实验,并尽可能地使用这个原因代码(REASON_CHARTCHANGE)。如果所有的变量都被重新设置为原始状态,OnDeinit可以在一个新的TF的OnInit之后执行,那还有什么用呢?
斯拉瓦已经回答了这个问题,新的指标,新的计算方法。而这是公平的。
而显然,这个问题永远不会得到解决。
我对开发团队有信心,他们是伟大的人,已经做了令人难以置信的大量工作,并将做得更多。我只是还没来得及做。诚然,你总是要从他们那里得到钟爱的反馈。:))
我的任务是说服他们需要这样做。虽然我不排除他们会说服我最好不要这样做,但也许我不了解一些情况。
我对开发团队有信心,他们是伟大的人,已经做了令人难以置信的大量工作,并将做得更多。我只是还没来得及做。但我总是要用手鼓从他们那里得到反馈。:))
我的任务是说服他们需要这样做。虽然我不排除他们会说服我最好不要这样做,但也许我不了解一些情况。
Slawa,文档中的"图书馆不处理任何事件 " 这句话是什么意思?
非常模糊 的
-当Inite 将主图的颜色设置为透明。
我自己画的图表(根据我的参数)。
我想让它在删除我的指标后恢复主图表的颜色
-在DeInit中,我恢复了主图表的颜色
当改变TF 时,我的意思是首先DeInit(恢复颜色),然后Init(回到透明状态)。
命令的执行不是连续的;定期地,当改变TF
定期将主图(恢复了颜色)叠加在我的指标上。
下面是一个 "逻辑分解 " 的例子。
也许可以尝试给图形对象分配TF期,作为其名称前缀的一个组成部分。
然后应用这样的东西。
-当Inite 将主图的颜色设置为透明。
我自己画的图表(根据我的参数)。
我想让它在删除我的指标后恢复主图表的颜色
-在DeInit中,我恢复了主图表的颜色
当改变TF 时,我的意思是首先DeInit(恢复颜色),然后Init(回到透明状态)。
命令的执行不是连续的;定期地,当改变TF
定期将主图(恢复了颜色)叠加在我的指标上。
例如,这里有一个 "逻辑分解"。
这就是全部!?
我一直在做实验,并尽可能地使用这个原因代码(REASON_CHARTCHANGE)。而如果所有的变量都被重新设置为原始状态,并且OnDeinit可以在新的TF的OnInit之后执行,那又有什么用?
尝试将终端更新到1065版本。在以前的版本中,在时间框架变化时,会出现重新初始化的错误。可能有帮助 :)
https://www.mql5.com/ru/forum/187690
尝试将终端更新到1065版本。以前的版本仅仅通过改变时间框架就会出现重新初始化的错误。可能会有帮助 :)
https://www.mql5.com/ru/forum/187690