初始化过程中的ChartNavigate - 页 4

 
Ihor Herasko:

P./S.:为了以防万一,我想澄清一下,我没有开始看如果终端在很长时间后被加载会发生什么(即在终端 卸载后应该会出现许多新的条形图)。

 
Alexey Viktorov:

迪娜,它对你有用吗?我已经挣扎了2-3个小时(就在今天,不算昨天的测试),试图得到一个不工作的OnInit版本,但没有结果。一切总是按部就班地进行。如果我把指标放在两个图表上并重新启动终端,它只在关闭和打开终端时处于活动状态的图表上工作。在第二种情况下,不活跃的图表不起作用。但在我看来,这也是可以理解的,尽管收到了数据,但没有图表渲染,也没有图表本身。

是的,阿列克谢,这很有效。我在这里 写过这个故事。显然,它在我对其他帖子的引用中被视觉化了。

 
Dina Paches:

请告诉我,在卸下终端之前,你是否将图表重置为最近的价格?

不,我没有。因为这就是问题所在。让我详细地告诉你为什么这一切是必要的。交易员使用图表就像使用测试器一样。该指标在所谓的当前时间右侧隐藏了真实图表的一部分(事实上,这个时间是在历史上的某个地方)。按F12显示在线图表中的下一个蜡烛,等等。因此,就是在重新启动附有指标的 终端时,它也不会将图表位置返回到交易者完成研究的地方。结果他/她收到一个空图表,因为终端将图表重置为最后一个真实的蜡烛。而且,尽管终端是在一个完全不同的地方卸货。

我为什么要问。

我使用了你的代码,看看它在我的情况下会如何工作。起初我以为我在复制你描述的问题。后来我明白了,它并没有。如果图表在被卸载前被恢复到最新的价格,那么当终端被加载时,它将按照代码工作。如果我不返回到卸载前的最新价格,图表将保持卸载前的状态。

有趣的观察。我自己检查了一下,唉,没有什么变化。我仍然能得到最新鲜的重装材料的价格。

我建议你 "同步你的手表"。我在Build 1861上测试这一切。你的构造是什么?

 
Alexey Viktorov:

迪娜,它对你有用吗?我已经挣扎了2-3个小时(就在今天,不算昨天的测试),试图得到一个不工作的OnInit版本,但都无济于事。一切总是按部就班地进行。如果我把指标放在两个图表上并重新启动终端,它只在关闭和打开终端时处于活动状态的图表上工作。在第二种情况下,不活跃的图表不起作用。但在我看来,这也是可以理解的,尽管收到了数据,但没有图表渲染,也没有图表本身。

把它放在两个图表上。不幸的是,两者的工作方式相同--重新加载时显示的是最新的价格。

你有什么构造?

 
事实证明,这比我想象的还要有趣。把代码移到了OnCalculate(做了一个单一的触发器,而不是在每个tick 上调用它),但图片没有变化。也就是说,即使在OnCalculate中启动终端时ChartNavigate也不工作......
 
Alexey Viktorov:

...只注意到一个特殊情况:如果我把指标放在两个图表上并重新启动终端,它将只在我关闭和打开终端时处于活动状态的那张图表上工作。在第二种情况下,不活跃的图表不起作用。但在我看来,这也是可以理解的,尽管收到了数据,但没有图表渲染,也没有图表本身。

我自己没有想到要这样试一试。现在做了这样的实验(也是在伊戈尔的代码的帮助下)。

在这样做的过程中,我设法最终......我再现了他描述的问题。

 
Ihor Herasko:

...

我建议我们 "手表同步"。我在Build 1861上测试这一切。你的是什么?

我也有1861年的。但感谢Alexey Viktorov,我成功地重现了你描述的通过OnInit()安装时的问题。/*在此之前,事实证明,我已经看到了你的帖子/。

行动的顺序。正如你在这里 描述的那样。

I. 但在卸下终端之前,我把图表转移到最新鲜的价格。

我在一个货币对的两个图表上设置了该指标,不同的时间段(GBPUSD M5和GBPUSD H1)。

我的结果是这些实验的结果。

1. 我首先在GBPUSD M5图表上设置指标,然后在GBPUSD H1上设置。之后,在将图表转移到新的条形图后,当GBPUSD H1图表处于活动状态(即较高的时间框架处于活动状态),我关闭了终端。在这样的条件下,如果我再次打开终端,当我打开时, 你的代码所指定的条形图上,图表是移位的。

然而 如果我们用英镑兑美元M5的活动图表关闭终端(即较低的时间框架是活动的),然后重新打开终端,那么在终端加载后,两个图表上都没有发生移动。图表在新的条形图上打开。同时,对于其中一个,我得到了成功,而对于另一个,则是一个错误。

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно
test 2018 06 26 (GBPUSD,H1)     Alert: Ошибка №4111

在进行第1 项和第2 项的实验时,在重启终端并看到结果后,我从图表中删除了这个指标,然后再次安装。


3. 当我做了同样的实验,但每次都没有重新安装指标,在重启终端后,重启终端后没有出现图表的转移。无论它是在较高或较低的时间框架内活动。图表在新的条形图上打开。信息与第2点 相同(成功和错误4111)。

II.此 外,我还试验了在相同的两个图表上同时安装该指标,但在卸载终端到新的条形图之前没有返回这些图表。

我的结果是:如果我在一个较高的时间框架上收盘/开盘,较高时间框架的图表就是收盘前的位置。下面的那个(不活跃)是在最新鲜的地方。

如果你在较低的时间框架上开盘/收盘,较低的时间框架就会在最新鲜的条上开盘。信息与2 中相同(成功和错误4111)。


III. 现在出现了以下问题。

  • 我忘了在安装指标前禁用图表的自动滚动功能。
  • 当我意识到这一点时,我删除了该指标并重新安装。

在这次重设指标后,转变没有发生,但警报成功了。

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно

但是,如果在重新安装 指示器之前,不只是现在,而是在一段时间后关闭自动滚动功能,就不会发现这个问题。


不知何故。

听起来你应该写信给服务台。

 
Dina Paches:

它对其中一个给出了成功,对另一个给出了错误。

这真是个惊喜!我还没有设法从ChartNavigate得到一个错误。但这是一件好事。

在问题的核心,显然,我开始明白发生了什么事。

ChartNavigate()在OnInit()或OnCalculate()中 首次调用 时,很可能所有的图表数据还没有来得及加载。然而,ChartNavigate()已经工作了,并且成功地工作了(在那一刻)。然后,数据被加载并显示在图表上,这导致图表完全重绘并转移到它的起点。结果是,我们看到的图表就像它根本没有被ChartNavigate()转移一样。

因此,为了成功转移图表,我们需要以某种方式确定图表数据将不再被显示(由于历史分页)。只有在确定这一事实后,才能调用ChartNavigate()。

 
Ihor Herasko:

...

因此,为了成功转移图表,必须以某种方式确定不再期望显示图表数据(由于历史分页)。只有在确定这一事实后,才能调用ChartNavigate()。

你是对的,可能。当重新启动终端时,它可能变得相关。另外,在实验过程中,我对结合(或不结合)重设指示器来启用/禁用自动滚动感兴趣。这是我在本帖末尾第三块 描述的后果。但我还没有更详细地研究这个问题。我必须解决我自己的紧迫问题。因此,我将暂时放弃。

 
Ihor Herasko:

把它放在两个图表上。不幸的是,两者的工作方式相同--重新加载时显示的是最新的价格。

你有什么构造?

关于交易、自动交易系统和策略测试的论坛

初始化时的ChartNavigate

Alexey Viktorov, 2018.06.25 15:10

我也有1861年的。只设法复制了一次。所有其他的尝试都运作良好。