MQL5でiClose/iOpenの時系列アクセスなどを操作した場合の不具合。 - ページ 7

 
Renat Fatkhullin:

1) OnTick/OnCalculate計算1回あたりの実行時間をマイクロ秒単位で計測し、ログに出力する。

そうすることで、1ティックの計算にかかる時間を確認することができます。そして、この速度で1秒間に何回刻むことができるかを試算してください。おそらく十数回の刻みにはならないだろうし、1秒間にもっと多くの刻みがあることは分かっている。


2) データを抽出するチャート/タイムフレームに添付されているインジケータの各 OnCalculate の時間を測定します。

そこにも似たような状況があるのでしょう。計算が遅いため、端末は計算されたシンボル:タイムフレームのロックが解除されるまで待ちます。特に歴史の深い指標で遅いのは、他のEAのペイオフを凍結させることに繋がります。


指標を設計する際には、パフォーマンスの問題や経済的な再計算を優先させる必要があります。そうでなければ、周りのものをすべて殺してしまうことになる。

レナート 本当に悲しいことです。tikiは今、私が問題を解決するのを待っているのでしょうか?今までは、チックは自己流で、時間があるかないかのどちらかだと思い込んでいました。これで、システムをサスペンドできることがわかりました。

 
Алексей Тарабанов:

レナーテさん、かなり悲しいことがありましたね。チックは今、私が問題を整理するのを待っているのだろうか。今までは、チックが自分で発生していると思い込んでいて、時間があるかないかのどちらかでした。これで、システムをハングアップさせることができることがわかりました。

インジケータは、スキップすることなく、すべてのティックで 実行されます。OnCalculateの持続時間とティックの入ってくる頻度を常に監視する必要があるのです。そうでないと、ジャムってしまいます。

最も簡単な再現方法は、カスタムシンボルでインジケータを実行し、一定の頻度でティッキングを開始することです。周波数が高くなると、ブレーキがかかるのがわかる。すべて論理的です。

 

どのような場合にインジケータが値を描画できないのですか? バッファは有効な値で満たされているのに、インジケータのチャートが空っぽなのですが・・・。少なくとも、その逆はない。

1944年同じ。そうなんでしょうね。

 
fxsaber:

インジケータは、スキップすることなく、毎ティック 実行されます。OnCalculateの持続時間とtickの到着率を常に監視する必要があります。そうでないと、ジャムってしまいます。

最も簡単な再現方法は、カスタムシンボルでインジケータを実行し、その中で一定の頻度でティッキングを開始することです。周波数が高くなると、ブレーキがかかるのがわかる。すべてに意味がある。

はい、まさにその通りです。

 
Алексей Тарабанов:

レナーテさん、かなり悲しいことがありましたね。チックは今、私が問題を整理するのを待っているのだろうか。今までは、チックが自分で発生していると思い込んでいて、時間があるかないかのどちらかでした。これで、システムをハングアップさせることができることがわかりました。

ダニはいつも待って いる。すべてのtickでOnCalculateを呼び出す ことを保証します。

4ではGUIがフリーズする原因となっていましたが、5では特定のキャラクターを処理する個々のスレッドに遅れが出るだけです。そして、5では常にそんな感じでした。今しか 見れないということで

 
Renat Fatkhullin:

再接続後のエイリアン不可視時間枠のフリーズ更新を解決し修正しました。原因は、再接続後のキャッシュの状態が間違っていたことにあります。

ベータ版 1946年版は、ヘルプ→デスクトップアップデートの確認→最新ベータ版から入手可能です。

更新しました、テストしてみましょう。

今回の問題は、他のツール(見えないタイムフレーム)、つまり多通貨のインジケーターや EAを読み込むケースにも関連していたのか、それともこれらは相互に関連しない問題なのか、ということです。

 
Slava:

ダニはいつも待って いる。すべてのtickでOnCalculateを呼び出す ことを保証します。

4thであればGUIがフリーズしてしまうが、5thでは特定の文字を処理する別スレッドの遅延に過ぎない。そして、5位はいつもそんな感じでした。今しか 見れないというだけです。

ターミナルログに「インジケータが遅すぎる」というようなメッセージが表示されるのでは?

?

 
Igor Makanu:

というようなメッセージが表示されるのでしょうか?

?

エキスパート・ログで
 
Slava:
エキスパート・ログで

ありがとうございます、それは何か、しかし、私はそれが関係ないティックを計算し、インジケータが端末のスレッドをハングアップすることをプログラム的に判断することはできません理解しています?

 
Igor Makanu:

ありがとうございます、それはそれでいいのですが、プログラム上では関係ないティックを計算していると判断できず、インジケータがターミナルのスレッドを停止しているという理解でいいのでしょうか。

判断しようとすることが可能です。

分であれば、TimeCurrent()で最後のバーの時刻を比較できます。M1でなければ、iTime(_Symbol,PERIOD_M1,0)を聞いて、TimeCurrent()と比較すればよいでしょう。

BidまたはLast価格(シンボルによって異なる)を最後のバーのClose価格と比較することができます。現在のシンボルを直接SymbolInfoTickに問い合わせることができます。ビッドとラストに加え、ティックタイムもあります