#property tester_everytick_calculate は問題を解決するかも?
MQL5:カスタムインジケータ用の新しいプロパティを追加しました #プロパティ tester_everytick_calculate.ストラテジーテスターで使用され、強制的に各ティックでの指標の計算を可能にすることができます。
25.テスター:非ビジュアルテスト/最適化時に、使用されるすべての指標(標準およびカスタム)は、データを要求することによってのみ計算されるようになりました。例外は、EventChartCustom関数の呼び出しを含み、OnTimerハンドラを使用 するインジケータ です。従来、ストラテジーテスターでは、任意のティックが来た場合(他のシンボルからでも)、すべての指標が無条件に計算されていました。この技術革新により、テストと最適化が大幅に加速されました。
指標を強制的に1ティックごとに計算させるには、#property tester_everytick_calculate をプログラムに追加してください。
旧バージョンのコンパイラーでコンパイルされた指標は、従来通り、1ティックごとに計算されます。
また、別のタイムフレームで作業する場合は、1分間に一度、このタイムフレームからOHLCを取得する必要があります(任意のCopyXXXXXX関数)ことを常に推奨しています。
つまり、他人のタイムフレームで作業する場合は、iXXXXXXアトビズムを使う必要はなく、CopyXXXXX関数を使えばいいということになります。
また、別のタイムフレームで作業する場合は、1分間に一度、このタイムフレームからOHLCを取得する必要があります(任意のCopyXXXXXX関数)ことを常に推奨しています。
したがって、別の時間枠で作業する場合、-iXXXXXXのアトラクティブを使用する必要は ありませんが、CopyXXXXの関数を使用する必要があります。
本気じゃないんです!
なぜかというと、iHigh(Symbol(),TF,i) だからです。
追伸:mt4では発売当初から全て問題なく動作していますが、mt5でも同じようにすればタンバリンはなくなるのではないでしょうか?mt4で動作するのであれば、mt5でも動作させることは可能です。本気じゃない!?
なぜかというと、iHigh(Symbol(),TF,i) だからです。
P.S. mt4では、その存在の最初の日からすべてが問題なく動作していますが、なぜmt5でも同じことをしないのですか、そうすればタンバリンはなくなるでしょう。mt4で動作するのであれば、mt5でも動作させることが可能です。また、他のタイムフレームで作業する場合は、このタイムフレームから1分ごとにOHLCを取得することが常に推奨されています(任意のCopyXXXX関数)。これは昔からそうでした。
double high_k = NormalizeDouble(iHigh(Symbol(),TimeFrames, k),DigitsM); double low_k = NormalizeDouble(iLow(Symbol(),TimeFrames, k),DigitsM); double open_k = NormalizeDouble(iOpen(Symbol(),TimeFrames, k),DigitsM); double close_k = NormalizeDouble(iClose(Symbol(),TimeFrames, k),DigitsM);
RefreshRatesで行う前に、見積もり更新を試してみてください。
事前にRefreshRatesで見積もりを更新してみてください。
"RefreshRates "は存在しない関数です。
"RefreshRates "は存在しない関数です。
このインジケーターのMQL4バージョンは2年以上動作しており、そのような問題/エラーは見つかっていません。
CopyXXXは役に立ちません。これはMT5のバグで、ビルド30から始まり、ビルド44以降も修正されていません。https://www.mql5.com/ru/forum/285631/page29 の最後の5-6ページを読めば、一人じゃないことがわかります。

- 2018.11.13
- www.mql5.com
ごきげんよう。
現在、以前書いたインジケーターを MQL4からMQL5へ移行しています。あまり踊っていないし、何も問題ないように思えるのですが......。
ある時点でインジケータのデータが更新されなくなり、どこでエラーになっているのか正確に把握できず、偶然にもiClose/iOpenなどが更新されなくなる、つまり同じ値を返すことに気付きました。
面白いのは、ソースコードを再コンパイルしてもインジケータが正しく更新されないことですが、関数は実行されているようですね。
インジケーターのプロパティを開いて「Ok」経由で閉じた場合のみ、データが更新されて正しく表示されますが、いつ発生するかわからないものまで(でも100%発生します)。今回は2018.11.14 00:00にインジケータがデータ更新を停止しましたが、一般的にはしばらくすると定期的に発生します。
以前、iBars(Symbol(),TimeFrames)/Bars(Symbol(),TimeFrames)関数がゼロ値を返すという別のバグが明らかにされたことがあります。幸いなことに、このバグは常時発生するものではありませんが、それでも発生してしまうので、コントロールしなければなりません。
MQがMQL4のサポートを停止することが判明しました。 これは素晴らしいことですが、MQL5ではそのようなバグが発生することになります。
では、上記の問題を解決するにはどうしたらよいのでしょうか。
1) OnTick/OnCalculateの1回の計算の実行時間をマイクロ秒単位で測定し、ログに出力する。
こうすることで、ダニ計算にどれだけの時間を費やしているかがわかります。そして、この速度で1秒間に何回カチカチと計算できるかを試算します。おそらく十数個のダニを見つけることはできないでしょうし、1秒間にもっと多くのダニを見つけることができるはずです。
2) データを抽出するチャート/タイムフレームに接続されているインジケータの各 OnCalculate の時間を測定します。
おそらく似たような状況があるのでしょう。計算が遅いため、端末は計算されたシンボル:タイムフレームのロックが解除されるまで待ちます。特に歴史の深い指標で遅いのは、他人のチャートのペイオフを凍結させることにつながるのです。
指標を開発する際には、パフォーマンスの問題や経済的な再計算を第一に考えるべきでしょう。そうでなければ、周りのものをすべて殺してしまうことになる。

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索