初期化中のChartNavigate - ページ 5

 
Ihor Herasko:

いいえ、そうではありません。それこそがポイントだからです。これがどういうことなのか、もう少し詳しくお話ししましょう。トレーダーは、まるでテスターのようにチャートを使う。このインジケータは、現在と思われる時刻の右側に実際のチャートの一部を隠しています(実際には、この時刻は履歴のどこかにあります)。F12を押すと、オンラインチャートに次のローソク足が表示されるなど。そのため、インジケータを 装着した状態で端末を再起動しても、チャートの位置はトレーダーが学習を終了した場所に戻りません。その結果、端末が最後の本物のローソク足にチャートをリセットするため、彼/彼女は空のチャートを受け取ることになります。しかも、まったく別の場所で端末が降ろされたにもかかわらず、である。

興味深い観察結果です。自分でも確認したのですが、残念ながら何も変わっていませんでした。今でもリローディングで一番新鮮な価格で購入できます。

時計を同期させる」ことを提案します。ビルド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()を使用しても、チャートは必要な場所にしばらく表示されますが、新しいティックでは、まだ一番最後のバーに戻ることが判明しています。オートスクロールボタンは無効で、他のインジケーターは使用しません。

手動でチャートを移動させても、このようなことは起こりません。今は途方に暮れています。明日、頭を冷やしてもう一度調査してみます。もしかしたら、どこかで失敗しているかもしれません。

すべてがうまくいくことを期待するのではなく、同じビルドを持つためにアップデートすることを提案しました。

Igorさんは、製品版のインジケーターで実験されているのでしょうか、それとも実験的なインジケーターで実験されているのでしょうか?

先ほど、ビルド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:

私は、すべてがうまくいくことを期待するのではなく、ビルドが同じになるように更新することを提案しました。

Igorさん、フルバージョンのインジケーターで実験されているのですか、それとも実験用のインジケーターで実験されているのですか?

先ほど、ビルド1865でターミナルを再読み込みしたところ、すべて正常に動作しました。このメッセージを書いている間、定期的にチャートを見たり、チャートのウィンドウを切り替えたり...。しかし、シフトしたチャートは、ティックやスイッチングが入ってきても動じない。

以下はコードの全体像です。

なんとなくですが、一方の端末がこうで、もう一方がそうでないとは思えません。

歴史がまったくないシンボルを見てみよう

 
Artyom Trishkin:

全く歴史のないシンボルを探してみる

どうすればいいのか?

スレッドの最初の投稿の説明によると、それはインジケータであり、それは開いているチャートにハングアップします - それは、すでに履歴が読み込まれていることを意味します。そうだろ?インジケータを掛ける、端末を閉じる、端末を起動 する、---履歴はどこへ行くのか?もし、すでにあったのなら...

次に、EURMXNのシンボルをオープンしました。端末を見ずに、それが何であるか分かりますか?)))

 
Alexey Viktorov:

どうすればいいのか?

スレッドの最初の投稿の説明によると、それはインジケータであり、それは開いているチャートにハングアップします - それは、すでに履歴がロードされていることを意味します。そうだろ?インジケータを掛ける、端末を閉じる、端末を起動 する、---履歴はどこへ行くのか?もし、すでにあったのなら...

2つ目は、EURMXNのシンボルを開いたことです。端末を見ずに、それが何であるか分かるのでしょうか?)))

いや、無理だ...。

私が言いたかったのは、おそらくヒストリカルデータを読み込むと、チャートが終わりに向かってずれるということです。

分単位のタイムフレームにインジケータを置き、ターミナルを閉じて1時間後に開くと、ターミナルが不足分の読み込みを開始します。ずれるのでしょうか?

 

それはニュースだ!!!

H1、H4の期間限定チャートを開いて、テストに使いました。現在、M1、M5、M30で実験を開始しました。動かない!!!

H1、H4への切り替えは、新しい時間があっても問題ありません。これは、昨日か今日の未明、あるいは昨日と今日の両方でテストされたものです...。ということではなく、時間の変化にとらわれてしまったのです。