初始化过程中的ChartNavigate - 页 5

 
Ihor Herasko:

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

一个有趣的观察。我自己检查了一下--唉,没有什么变化。不过,在重装上,我还是得到了最新的价格。

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

也许你应该在前面加上这样几句话

   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);

然后再转移它?

或者干脆不把它转移到任何地方。它的工作也没有问题。

ChartNavigate(0, CHART_CURRENT_POS, 0)

在哪个栏位我关闭了终端,在哪个栏位又打开了。

然而,这个变体也会在非活动窗口上保留图表。唉。即使没有这段代码,图表也能保持原位。

 
Alexey Viktorov:

也许在前面加上这样几行

然后再转移它?

是的,完整版拥有这一切。如果你在不重启终端的情况下工作,一切都很好。但重启会导致这样的问题。而即使是拐杖式的解决方案也不一定有用。我将进一步调查。

 
Ihor Herasko:

是的,完整版拥有这一切。如果你在不重启终端的情况下工作,一切都很好。但重启后就会出现这样的问题。而即使是拐杖式的解决方案也不一定有用。我将进一步调查。

但我也做过重启终端的实验。问题可能是什么?我得到了下载的更新,但我暂时取消了更新。也许你也应该更新一下?
 
Alexey Viktorov:
但我也试验过重新启动终端。可能是什么问题?我得到了下载的更新,但到目前为止,我已经取消了更新。也许你也应该更新一下?

升级为1865年建造。问题仍然存在。

此外,事实证明,即使在图表上完全加载数据并使用ChartNavigate() 后,图表也会在需要的地方显示一段时间,但随着新刻度线的出现,它仍然会回到最后一个条形图。自动滚动按钮被禁用,没有使用其他指标。

如果你手动移动图表,就不会发生类似的情况。我现在很茫然。我将在明天有新的眼光时进行调查,看看我是否在什么地方做错了。

 
MetaTrader 5 x64 build 1870 started (MetaQuotes Software Corp.)
Windows 10 (build 17134) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 4720 / 8077 Mb, Disk: 301 / 464 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

脚本。只有在CHART_CURRENT_POS 下才是稳定的。在CHART_BEGIN和正 "Shift "的情况下,以及在CHART_END和负 "Shift "的情况下,图表要么不移动,要么跳到(自行滚动)最新的价格:感觉自动滚动按钮被启用。

//+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property script_show_inputs
//--- input parameters
input ENUM_CHART_POSITION  InpPosition = CHART_CURRENT_POS;    // Chart Position  
input int                  InpShift    = -1;                   // Shift
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ResetLastError();
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   int chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   string comm="До: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
   if(ChartNavigate(ChartID(),InpPosition,InpShift))
      Print("ChartNavigate ",EnumToString(InpPosition),",",InpShift," успешно");
   else
      Print("Ошибка №",GetLastError(),", ",EnumToString(InpPosition));
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   comm="После: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
  }
//+------------------------------------------------------------------------------+ 
//| Gets the index of the first visible bar on chart.                            | 
//| Indexing is performed like in timeseries: latest bars have smallest indices. | 
//+------------------------------------------------------------------------------+ 
int ChartFirstVisibleBar(const long chart_ID=0)
  {
//--- prepare the variable to get the property value 
   long result=-1;
//--- reset the error value 
   ResetLastError();
//--- receive the property value 
   if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
     {
      //--- display the error message in Experts journal 
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property 
   return((int)result);
  }
//+------------------------------------------------------------------+

1

附加的文件:
 
Ihor Herasko:

升级为1865年建造。问题仍然存在。

此外,事实证明,即使在图表上完全加载数据并使用ChartNavigate() 后,图表也会在需要的地方显示一段时间,但随着新刻度线的出现,它仍然会回到最后一个条形图。自动滚动按钮被禁用,没有使用其他指标。

如果你手动移动图表,就不会发生类似的情况。我现在很茫然。明天我将以清醒的头脑再次调查,也许我在什么地方搞砸了。

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

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

我刚刚用build 1865重新加载了终端,一切正常。我在写这个消息的时候,定期看一下图表,切换图表窗口...但是,尽管有传入的点位和切换,移位的图表仍然没有动静。

以下是整个代码

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);
   if(ChartNavigate(0, CHART_END, -100))
      Comment("Успешно");
   else
      Comment("Ошибка №", GetLastError());   
  //ChartRedraw(ChartID());
//---
   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);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{
 Comment("");
}/********************************************************************/
出于某种原因,我不相信一个终端是这样工作的,另一个是那样工作的。
 
Alexey Viktorov:

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

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

我刚刚用build 1865重新加载了终端,一切正常。我在写这个消息的时候,定期看一下图表,切换图表窗口...但是,尽管有传入的点位和切换,移位的图表仍然没有动静。

以下是整个代码

不知为何,我不相信一个终端是这样工作的,而另一个则不是。

试着去看一个完全没有历史的符号

 
Artyom Trishkin:

尝试寻找一个完全没有历史的符号

如何做到这一点?

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

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

 
Alexey Viktorov:

如何做到这一点?

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

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

不,我不能...

我的意思是,可能加载历史数据会使图表向其末端移动。

试试这个:把指标放在一个分钟的时间框架上,关闭终端,一小时后再打开--终端开始加载缺失的分钟--图表会发生什么?它是否会转移?

 

多么令人振奋的消息啊!!!。

我把H1、H4时期的图表打开,用它们来测试。现在开始在M1、M5、M30上做实验......。

切换到H1或H4,即使有一个新的小时,也没有问题。这是在昨天或今天早些时候测试的,或在昨天和今天都测试了......这不是重点,但我被小时的变化所吸引。