エラー、バグ、質問 - ページ 541

 
220Volt:

そこで、杞憂に終わらないように、上に書いたような状況をシミュレーションしてみました(引用から抜け出せないので、引用できません :))。

M15で以下のコードを実行しました。

スクリプトの実行中に、インターネットに接続したり切断したりしました。写真はその結果です

なるほど。訂正させていただきます。
 

servicedeskにあるのか、コードのバグなのか?

この指標は、終値から下に向かって赤色で5つのポイントレベルを構築する必要があります。

しかし、バッファは2つしか表示されず(全部カウントされますが)、赤ではなく緑(黒をコンパイルした後)です。

私だけなのか、それとも全体的にそうなのか、ご確認ください...?


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
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[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

servicedeskにあるのか、コードのバグなのか?

この指標は、終値から下に向かって赤色で5つのポイントレベルを構築する必要があります。

しかし、バッファは2つしか表示されず(全部カウントされますが)、赤ではなく緑(黒をコンパイルした後)です。

私だけなのか、それとも全体的にそうなのか、ご確認ください...?

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...私は、標準ライブラリは、他の人の手本となるべき理想的なコードだと考えています。

そのような考えは、一刻も早く捨て去ることが望ましいとしか言いようがない。

標準ライブラリに反対はしませんが、「プログラムを書きやすくするために」他人のコードを検証もせずに信用するのはいかがなものでしょうか?- ただし、Expert Advisorの最初の起草段階は除く。いわば、ルーティンワークのスピードアップのために。

 

ログブックに「異常終了」のメッセージが頻繁に表示されるのですが。このような衝突が起こる可能性がある場合、どなたかお気づきになられたことはありますか?

まだ、原因がわからないんです。ただ一つ言えることは、ターミナルをしばらくアイドル状態にしておいたり、その時だけ別のプログラム(例えば、Excel)を使用すると、ターミナルに戻った後に、テストしているExpert Advisorが正しく動作し始めるということです。つまり、取引操作は 問題なく行えるのです。唯一の問題は、トレーディングパネルやインフォメーションパネルとのやり取りです。OnChartEvent()が不具合を起こしているようです。パネルの切り替えが、何か他の処理に追われているような感じで、かなり遅くなるようになりました。エターナルループは使いません。また、この瞬間のCPU負荷は、何かが活発に使われていることを示すものではありません。Expert Advisorのリコンパイルが有効です。再コンパイル時、EAが初期化される前に、ジャーナルにAbnormal termination messageが表示されます。すると、プログラムが正常に初期化され、すべてが時計のように動き出すのです。

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
tol64:

ログブックに「異常終了」のメッセージが頻繁に表示されるのですが。このような衝突が起こる可能性がある場合、どなたかお気づきになられたことはありますか?

まだ、原因がわからないんです。ただ一つ言えることは、ターミナルをしばらくアイドル状態にしておいたり、その時だけ別のプログラム(例えば、Excel)を使用すると、ターミナルに戻った後に、テストしているExpert Advisorが正しく動作し始めるということです。つまり、取引操作は 問題なく行えるのです。唯一の問題は、トレーディングパネルやインフォメーションパネルとのやり取りです。OnChartEvent()が不具合を起こしているようです。パネルの切り替えが、何か他の処理に追われているような感じで、かなり遅くなるようになりました。エターナルループは使いません。また、この瞬間のCPU負荷は、何かが活発に使われていることを示すものではありません。Expert Advisorのリコンパイルが有効です。再コンパイル時、EAが初期化される前に、ジャーナルにAbnormal termination messageが表示されます。すると、プログラムが正常に初期化され、すべてが時計のように動き出すのです。

ループの中でIsStopped()を使うか?

このような問題については、こちらや こちらこちらで 紹介しています。また、コードのどこに「ボトルネック」があるのかを考える必要があります...。

私の理解では、このエラーはプログラムが「早期」に終了 した場合(チャート/ターミナルが閉じられたとき、またはEAが再コンパイルされたとき)に発生し、このプロセスの間にEAによって何らかの作業が行われます。

 
Interesting:

ループの中でIsStopped()を使うか?

同様の問題についてはこちらこちらこちらを ご覧ください。コードのボトルネックについても考えてみてください...。

私の理解では、Expert Advisor が何らかの作業を行っている間に、プログラムが「早期」に終了 した場合(チャート/ターミナルを閉じた場合、または Expert Advisor を再コンパイルした場合)に、このエラーが発生します。

ありがとうございます。リンク先は同じ状況です。 私はループの中で IsStopped()を使うことはなく、breakcontinuereturnだけを使って います。

今のところ、IsStopped()とプログラムが遅くなることとの関連は見られません。やはり、フリーズしてしまうと、他の操作ができなくなりますから。それとも私の勘違いでしょうか?

もうひとつ。IsStopped()は、ターミナルを閉じたり、Expert Advisorをチャートから削除するなど、プログラムの実行を強制的に停止する必要があるときに便利です。そして、Expert Advisorを使い続ける必要があります。

 
tol64:

ありがとうございます。リンク先は同じ状況です。 ループの中で IsStopped()はどこにも使わず、breakcontinuereturnだけにして います。

今のところ、IsStopped()とプログラムのスローダウンとの関連は見られません。フリーズしてしまうと、他の操作ができなくなります。それとも私の勘違いでしょうか?

もうひとつ。IsStopped()は、ターミナルを閉じたり、Expert Advisorをチャートから削除するなど、プログラムの実行を 強制的に停止する必要がある場合に便利です。そして、Expert Advisorを使い続ける必要があるのです。

IsStopped()で、エラーになる件です。なぜ端末やExpertが遅くなるのかは推測すらできない(実行時の条件も不明、Expert Advisorについても不明)。
 
tol64:

ログブックに「異常終了」というメッセージが頻繁に表示されるのですが。このような衝突が起こる可能性がある場合、どなたかお気づきになられたことはありますか?

まだ、原因がわからないんです。ただ一つ言えることは、ターミナルをしばらくアイドル状態にしておいたり、その時だけ別のプログラム(例えば、Excel)を使用すると、ターミナルに戻った後に、テストしているExpert Advisorが正しく動作し始めるということです。つまり、取引操作は 問題なく行えるのです。唯一の問題は、トレーディングパネルやインフォメーションパネルとのやり取りです。OnChartEvent()が不具合を起こしているようです。パネルの切り替えが、何か他の処理に追われているような感じで、かなり遅くなるようになりました。エターナルループは使いません。また、この瞬間のCPU負荷は、何かが活発に使われていることを示すものではありません。Expert Advisorのリコンパイルが有効です。再コンパイル時、EAが初期化される前に、ジャーナルにAbnormal termination messageが表示されます。すると、プログラムが正常に初期化され、すべてが時計のように動き出すのです。

異常終了とは、プログラムに不自然な介入をしたこと、つまり実行時に再コンパイルしたことで、プログラムの中断と再初期化が発生することです。

実行中にゼロ除算をしたり、プログラムを中断した場合も同様ですが、プログラムが再チューニングされれば、そのようなエントリーは出てきません。このため、IsStoppedを チェックすることで、プログラムが強制的に終了するのではなく、自分自身の戻り値で終了できるようにすることが推奨されます。

 

以下の項目を追加する予定はありますか?

チャート 上のポジションをダブルクリックすると、ポジション管理メニューが表示されます。

複数のポジションをハイライトして一度にクローズ

????

ありがとうございます。