初始化过程中的ChartNavigate - 页 6

 
Alexey Viktorov:

我在这个帖子中:https://www.mql5.com/ru/forum/260815/page4#comment_7890492,详细说明了在什么条件下可以再现这个问题。根据你的断言,这能够重现。我在这里 所写的内容

也就是说,对条件稍加修改就会导致问题的稳定再现。

你不知为何没有注意到这一点

 
Alexey Viktorov:

P./S.: 在你的代码中用Print代替Comment,不仅是一个更温和的程序。在OnInit()中的打印结果 更容易比较,复制并附在这里

 
Alexey Viktorov:

我建议更新,并不是希望一切都能归位,而是为了使构建的内容相同。

伊戈尔,你是在完整版的指标上做实验还是在实验版的指标上做实验?

那里和那里都有。但我仍然不能确定问题是什么:它是否是一个错误。我需要找到足够的可重复的条件。

 
Alexey Viktorov:

如何做到这一点?

根据该主题第一帖的描述,它是一个指标,它挂在一个开放的图表上--这意味着历史记录已经被加载。对吗?挂上指标,关闭终端,启动终端,------历史能去哪里?如果它已经在那里...

第二,我打开了EURMXN符号。不看终端,你能知道它是什么吗?)))

这很容易。

  1. 带有该指标的模板被保存为default.tpl。
  2. 图表符号被打开,这在以前从未被打开过。
因此,指标先启动,然后再加载数据。我已经在一个包里得到了全部的活动。

 
Ihor Herasko:

那里和那里都有。但我仍然不能肯定地说,这是否是一个错误。我们需要找到足够的可重复性条件。

你的措辞有点令人遗憾。我所引用 的是可重复的条件。

另一件事是,是的,可能我在第一和 第二块 描述的不是 一个错误,而是终端重新启动时 数据加载的特殊性。

而在1870年的建设中,与我在1861年得到的重播有区别。

信息的组合(成功和错误4111)有了些许变化。例如,如果早些时候有这样一个稳定的繁殖。

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

现在,用同样的代码,错误信息似乎更明显了。

test 2018 06 26 (EURNZD,M5)     Alert: Ошибка №4111
test 2018 06 26 (EURNZD,H1)     Alert: Ошибка №4111

test 2018 06 26 (EURNZD,M5)     Alert: Ошибка №4111
test 2018 06 26 (EURNZD,H1)     Alert: Ошибка №4111

test 2018 06 26 (EURNZD,M5)     Alert: Ошибка №4111
test 2018 06 26 (EURNZD,H1)     Alert: Ошибка №4111

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


我那个帖子中的 第三块,在1870年已经无法重现了。

也不能在19世纪70年代重现这里所描述的情况:https://www.mql5.com/ru/forum/260815/page5#comment_7901728 最后--也许这在某种程度上取决于操作系统(作为一种猜测)。例如,Vladimir的这段代码对我来说很好用,没有任何问题

 
Ihor Herasko:

我遇到了一个关于ChartNavigate函数 的问题。做错了什么,还是功能真的有问题。如果你经常使用它,请回信。

所以,问题的关键是:ChartNavigate并没有转移图表的位置 当启动终端时 如果你在OnInit()中调用这个函数。特别是我读过几次文件。没有任何地方说该函数在初始化时不能被调用。

编码 指标 用于播放。

玩的步骤。

  1. 关掉图表自动播放。
  2. 将指标附在图表上。ChartNavigate将通过移动图表到所需位置来触发。
  3. 卸载终端。
  4. 加载终端。显示没有偏移量的图表,ChartNavigate将无法工作。
好的,如果该函数会出现错误。但它并没有。所有的调用都是成功的,但就是在终端重新加载时,图表没有移位。

试试指标的三种变体,看看每种变体的结果

1.ChartNavigate在其他图形命令的末尾

//+------------------------------------------------------------------+
//|                              TryToSetChartSettings_Indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {


//--- отключим автопрокрутку
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графика
   ChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечей
   ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемов
   ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK); 
//--- Прокрутим от правого края графика на 1000 баров влево
   ChartNavigate(0,CHART_END,-1000);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

2.ChartNavigate one - 对图表没有其他命令

//+------------------------------------------------------------------+
//|                              TryToSetChartSettings_Indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
/*
//--- отключим автопрокрутку
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графика
   ChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечей
   ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемов
   ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK); 
*/
//--- Прокрутим от правого края графика на 1000 баров влево
   ChartNavigate(0,CHART_END,-1000);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


3.ChartNavigate在其他图表命令之前

//+------------------------------------------------------------------+
//|                              TryToSetChartSettings_Indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

//--- Прокрутим от правого края графика на 1000 баров влево
   ChartNavigate(0,CHART_END,-1000);
//--- отключим автопрокрутку
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- установим отступ правого края графика
   ChartSetInteger(0,CHART_SHIFT,true);
//--- отобразим в виде свечей
   ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//--- установить режим отображения тиковых объемов
   ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK); 

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Rashid Umarov:

并尝试指标的三种变体,看看每种变体的结果

1.ChartNavigate在其他图表命令的末尾

  1. 附在启用自动滚动的M1图表上。自动滚动关闭,图表向左移动了1000条。
  2. 在没有断开指标与图表的连接的情况下,重新装入终端。图中显示的是当前的蜡烛,没有向左移动1000条。自动滚动功能仍然不可用。
  3. 我连续重复了第2步7次。其中3次向1000根蜡烛的左边过渡是完整的,4次--过渡不完整。
当我还没有完善的时候,出现了 "等待刷新 "的命令。因此,可以得出结论,终端在加载历史记录时强行将图表滚动到最新的报价。由于它发生在OnInit()之后,我们得到了一个意外的结果。

2.单独的ChartNavigate--对图表没有其他命令

  1. 由于自动滚动功能在这个版本中没有自动关闭,我手动关闭了它,并连接了指标。图表已经向左移动了1000条。
  2. 重新启动终端,但没有将指标从图表上断开。
  3. 在7个案例中,有2个案例进行了滚动操作。其中一个发生在三个阶段:显示预期历史、显示当前蜡烛和显示预期历史。看起来好像OnInit()被执行了两次:一次是在历史记录被加载之前,第二次是在加载之后。

3.ChartNavigate在其他图表命令之前。

  1. 我已经启用了自动滚动功能,并附上了指标。图表抽搐了一下,回到了当前的蜡烛上。可以预见的是,在1000条移动命令之后,自动滚动功能被禁用。
  2. 重新启动终端,但没有断开指标与图表的连接(图表显示当前的蜡烛)。
  3. 在所有7种情况下,图表都显示了当前的蜡烛,滚动甚至没有闪动。
如果我们在图表上 没有任何指标 的情况下重启终端,关闭自动滚动并显示在历史深处的某个地方,那么在每次重启时,我们得到的显示是终端被关闭的地方。事实证明,在执行导航命令的某个地方,有一个移动到当前的蜡烛。
 
Ihor Herasko:

  1. 附在M1图表上,自动滚动开启。自动滚动功能被关闭,图表向左移动了1000条。
  2. 在没有断开指标与图表的连接的情况下,重新装入终端。图中显示的是当前的蜡烛,没有向左移动1000条。自动滚动功能仍然不可用。
  3. 我连续重复了第2步7次。其中3次向1000根蜡烛的左边过渡是完整的,4次--过渡不完整。
当我还没有完善的时候,出现了 "等待刷新 "的命令。因此,可以得出结论,终端在加载历史数据时,强行将图表滚动到最新的报价。由于它发生在OnInit()之后,我们得到了一个意外的结果。

我总是忘记你的信息/建议是倒过来读的。这就像一个古老的笑话。

1917年,10月。一位女士,
Decembrist的孙女,正坐在自己在涅夫斯基的房子里。听到街道上的噪音,她要求看门人查明
,这到底是怎么回事。
- 年轻的女士,革命就在那里!- 看门人回来了。
-哦,多好啊!- 我的祖父梦想着一场革命!
去看看革命者想要什么吧,我亲爱的朋友!"。
- 他们不想要有钱人,女士。"看门人回来时说。
- 奇怪,"女士若有所思地说,"但我祖父希望没有穷人!"。

我以为你要在重启终端之前改变时间表的属性
 
Rashid Umarov:

我总是忘记,你的信息/建议会被倒过来读。

你是什么意思?你写道,你需要测试三个指标的操作。由于该主题是关于重新加载终端,然后使用ChartNavigate,这些是所做的测试。

我以为你要在重启终端之前改变图表属性

如果问题是ChartNavigate在终端启动时并不总是工作,为什么?这正是问题所在。

 
Ihor Herasko:

问题是,ChartNavigate并不总是在终端启动时 触发?这正是问题所在。

还有,当我改变我的个人资料时。此外,如果ChartNavigate( chart_id, CHART_BEGIN, shift )得到例如CHART_FIRST_VISIBLE_BAR,那么结果将如同ChartNavigate已经工作。如果专家顾问被删除,那么下次启动专家顾问时(相同或不同),在这个图表中获得CHART_FIRST_VISIBLE_BAR的结果将看起来像CHARTNavigate失败。

结果是:在与CHART_FIRST_VISIBLE_BAR 结合时,ChartNavigate的操作已经极其不一致了。