//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart()
{
//--- количество окон на графике (всегда есть хотя бы одно главное окно) int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//--- про ходим по окнам for(int w=0;w<windows;w++)
{
//--- сколько индикаторов в данном окне/подокне int total=ChartIndicatorsTotal(0,w);
//--- переберем все индикаторы в окне
for(int i=0;i<total;i++)
{
//--- получим короткое имя индикатора string name=ChartIndicatorName(0,w,i);
//--- получим хэндл индикатора int handle=ChartIndicatorGet(0,w,name);
//--- выведем в журнал PrintFormat("Window=%d, index=%d, Name=%s, handle=%d",w,i,name,handle);
//--- обязательно освобождаем хендл индикатора, как только он становится ненужным IndicatorRelease(handle);
}
}
}
迪米特里,在我看来,你是一个受过教育的程序员。你没有被教导过编程中的礼节规则吗?
其余的你可以像在老的mql4中那样写,有可能出现数组 超限和其他假设。你得到一个错误的回应...好吧,把旗子插回去...让我们继续,我们没有时间...然后你遇到了一个在更严格的语言中不值一提的问题,并开始指责开发者......
基督已经复活了。
当你创建一个现有的对象时,没有什么可怕的事情发生,也没有什么可怕的事情发生,这个对象只是没有被创建,就是这样而已。
我想我以后也会添加一个解决方案,但不使用全局终端变量和文件,而且可以在一个窗口中应用几个相同的指标。
顺便说一下,写一个函数,为每一组不同的指标输入参数 产生不同的值,这是一个有趣的任务。
我想到的第一件事是ChartSaveTemplate。
放弃全球--显然是资源。
顺便说一下,写一个函数,为每一组不同的指标输入参数 产生不同的值,这是一个有趣的任务。
我首先想到的是通过ChartSaveTemplate。
要放弃全球的--显然是资源。
当然,资源--在我看来,它们是最好的解决方案,因为它们是不可见的,不像全局终端变量和文件,而且速度快。另外,你可以通过它们传递数组,就像通过文件一样,但速度更快,因为所有的事情都发生在RAM中。它们也属于窗口,而不是像全局那样属于终端。此外,你可以为一个窗口中的所有相同指标创建一个资源。
不,我认为ChartSaveTemplate太麻烦了。我将尝试为一个指标的所有实例创建一个公共资源,而不使用全局变化、模板和文件。
我的例子是为了说明新TF的单位和旧TF的单位顺序不明确的问题,而不是作为一种解决方案。
你只是绕过了这个问题,而不是解决了这个问题。
在我的例子中,只是在任何情况下都要删除旧TF单元中的对象,包括当TF被改变时,在新对象的单元中再次创建它。
如果该序列首先是旧TF的Deunit,然后是新TF的Unit,这在逻辑上应该是这样。然后,该对象被删除,然后再次创建。
如果序列首先是新TF的Unit,然后是旧TF的Deunit,那么当你试图在Unit中创建对象时,该对象只是被修改,因为它还没有被删除。然后它被旧TF的Deunit删除。这是个错误。
这就是这个例子的重点--展示任何没有读过这个分支、不知道这个 "特性 "的程序员可能遇到的情况。
这个例子并不意味着是一个解决方案。这里 和这里 介绍的是解决方案的变体。我想我以后也会添加一个解决方案,但不使用终端的全局变量和文件,而且即使在一个窗口中设置了几个相同的指标,这个解决方案也能发挥作用。你是否尝试过解决这个问题?或者你只能够在别人的代码中找到错误,特别是在他们不存在的时候。
今天说脏话是一种罪过,但我觉得是...
我甚至无法将你的废话读到最后。
我再次重申,不要在没有问题的地方制造问题。
你的代码中所有问题的答案都在这里
使用原始的双行道例子有什么意义?
你最好用一个几乎正确的 代码的例子。
我并不指望绝对性。
就这样......撒旦走吧,不要把我引向罪恶。
今天说脏话是一种罪过,但我觉得是...
我甚至无法将你的废话读到最后。
我再说一遍,不要把问题放在不存在的地方。
你代码中所有问题的答案都在这里。
我并没有指望绝对的东西。
就是这样......撒旦走吧,不要把我们引向罪恶。
哦,伙计,你需要到另一个论坛去。心理治疗师提供建议的地方。我明白,我明白。儿童时期爱的缺失,希望得到关注和爱。我很抱歉。如果你需要什么,我会帮助你。你可以亲自 给我写信。我不是在开玩笑。
而且你最好不要在这里做,因为我们已经把人们逗得很开心了。
确实是复活了!
关于交易、自动交易系统和交易策略测试的论坛
Init()和DeInit()的执行顺序
fxsaber, 2017.04.14 13:52
小编提示:,对开发商没有怨言。并调换TF。不会有任何一个Deinit!所有指标都会在不知不觉中运行,吞噬资源。而只是想
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
fxsaber, 2016.09.22 16:14
如何在一个指标中知道我在图表上的手柄?通过ChartIndicatorName是不合适的,因为它返回一个短名称。而同名的指标可能已经在运行,输入参数不同。
事实证明,如果你想知道它的手柄,你必须使用ChartIndicatorGet,但正如上面的例子所示,这将是一个真正的问题--指标将被卸载。
真是无奈。
我甚至无法做到这一点。
关于交易、自动交易系统和策略测试的论坛
虫子,虫子,问题
fxsaber, 2016.09.23 10:20
我如何知道我的INDICATOR_SHORTNAME?IndicatorGet*-函数不存在!没有办法从指标中知道它击中了哪个子窗口。这只是一群无赖。
你不能从指标中看出它是在哪个子窗口。这只是一群无赖。
一个很酷的小技巧!运转
并调换TF。不会有一个Deinit!所有指标都会隐蔽地运行,吞噬资源。而我只想
事实证明,如果你想知道它的句柄,你应该使用ChartIndicatorGet,但是,如上面的例子所示,这将是一个真正的遗憾--该指标将是不可删除的。
它将变得无法恢复。
我曾面临这样的事情。建议开发者更仔细地阅读帮助,因为其中有一个例子。
然而,他们随后补充说,这种行为将得到 "纠正"。但显然它仍在调整中。https://www.mql5.com/ru/docs/chart_operations/chartwindowfind
谢谢,但也有同样的限制--没有短名就没有办法(你怎么知道的?)
我遇到过这样的事情。开发人员建议我更仔细地阅读帮助,因为其中有一个例子。
然而,随后补充说,这种行为将被 "纠正"。但显然它仍在调整中。这真的很有帮助,谢谢你!
最主要的是不要在Deinit中做IndicatorRelease。