//+------------------------------------------------------------------+//| ChartNext.mq5 |//| Copyright 2014, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- переменные для идентификаторов графиковlong currChart,prevChart=ChartFirst();
int i=0,limit=100;
Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart);
while(i<limit)// у нас наверняка не больше 100 открытых графиков
{
currChart=ChartNext(prevChart); // на основании предыдущего получим новый графикif(currChart<0) break; // достигли конца списка графиковPrint(i,ChartSymbol(currChart)," ID =",currChart);
prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
i++;// не забудем увеличить счетчик
}
}
//+------------------------------------------------------------------+
なぜ?
論理を見るために
プリントアウトした結果、上記のようになりました。
プリントアウトはどこにあった?その結果はどこにあるのでしょうか?見えませんね。前後のプリントアウトを添付するのを忘れています。
フォーラムで画像を追加する際、ヘッダーが表示されない
Headerフィールドに入力しています。画像は表示されるが、ヘッダーが表示されない
プロファイル内のグラフの順序が異なる
プロファイル内の複数のグラフに新しいグラフを追加して、真ん中に移動させた場合、例えば
を使用したスクリプトで、その後のチャートのリストでは
にもかかわらず、最後の1枚に移動してしまいます。
そして、MTを再読み込みすると、図のように、新しい列挙の途中で
リロード前と後では異なる挙動が判明。論理はどこにあるのか?
EURAUD", "EURCAD", "EURUSD", "NZDUSD "を追加し、最初のチャートである "EURAUD "を起動しました。
"NZDUSD "は "EURAUD "の後に配置し、最初のチャート-"EURAUD "をアクティブにする。
再読み込み後(最初のチャートは有効のまま - "EURAUD)
すべてが理にかなっている。スクリプトが呼び出される前のみ。
アクティブなグラフを慎重に選択する必要があります。次のグラフは、アクティブなものからカウントされます。すべてが理にかなっている。
そして、その理屈はどうなっているのでしょうか。再起動前に2-3-4-5という1つのシーケンスがあり、再起動後に別の2-5-3-4があった場合?
再読み込みの前に、グラフは作成された順番 にプロファイルに書き込まれます(例:1-2-3-4)。リロードする前に、プロファイルを書き換えます(グラフの動きの最後のリビジョンが書き込まれます、つまり、1-4-2-3-3です)。再起動後、グラフの動きは1-4-2-3-3というように、最後のリビジョンに従って再描画(作成) されます。
で、再起動後は、1-4-2-3の順でチャートが作成されたので、ChartNext() はまさにその順で返ってくるということです。
再読み込みの前に、グラフは作成された順番 にプロファイルに書き込まれます(例:1-2-3-4)。リロードする前に、プロファイルを書き換えます(グラフの動きの最後のリビジョン、つまり1-4-2-3-3がプロファイルに書き込まれます)。再読み込み後は、グラフの動きの最終改訂版、すなわち1-4-2-3-3に従ってグラフが再描画(作成) されます。
問題は、現在どのように実装されているかではなく(別の実装も可能)、リロードの前と後(他の条件がすべて同じ)で結果が異なること、つまりロジックが破綻していることです。