If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
Prival:
まれにですが、1つの商品の相場が長時間フリーズする状況があります(私は円でそのような状況を見ました)。このペアでExpert Advisorがハングした場合、すべてのコードをOnTime()に翻訳していないと大変なことになります。
Lizar:
そのようなイベントはTimeCuurent()を使って受け取ることができますが、それをさらにどうするか、どう同期させるかが問題です。
TimeCuurent()はこれと何の関係があるのですか?
ヘルプによると
OnTick() ハンドラでは、この関数は処理されたティックの時刻を返します。その他の場合(例えば、OnInit()、OnDeinit()、OnTimer()ハンドラなどでの 呼び出し)、これは、"Market Watch "ウィンドウで利用可能な任意のシンボルの 最後の気配値の到着 時刻であり、このウィンドウのタイトルに表示されているのと同じ時刻です。
あらすじはこうだ:
OnTick() ハンドラでは、この関数は処理中のティックの到着時刻を返します。その他の場合(例えば、OnInit()、OnDeinit()、OnTimer()などのハンドラで 呼び出された場合)、この関数は、「Market Watch」ウィンドウで利用可能なあらゆるシンボルの 最後のクォートの到着 時刻であり、このウィンドウのヘッダーに表示されているのと同じ時刻です。
OnTime()内に置くと、1分に1回しか時間を更新できず、現在のOnTick()内に置くと、いくつかのペアのティックを見逃す危険性があります(マルチの場合)。
新しい値を取得し、既存の値と比較し、新しいティックがあったかどうかの結論を出します。
しかし、なぜExpert Advisorでそれを行うのでしょうか?
あらすじはこうだ:
以下はヘルプの内容です。https://www.mql5.com/ja/docs/basis/function/events
NewTickイベントは、Expert Advisorがアタッチされているチャートのシンボルで新しいティックが受信されたときにExpert Advisorに対してのみ生成されます。
もう一度言います。私たちが話しているのは、あるシンボルにぶら下がっているExpert Advisorについてです。イベント
void OnTick(){} この関数の中にいるとき、このイベントが発生します。
この関数の中にいて、1時間以上このペアのティックがない場合、1時間以内は何もできません。今のところ、唯一の方法はタイマーの中でそれを行うことです、それは楽器のティックの到着に関係なく開始します。
しかし、これをOnTimeに置くと、時刻の更新は1分に1回までとなり、現在のOnTick()に置くと、いくつかのペアのティックを見逃す危険性がある(multsで)。
https://www.mql5.com/ja/docs/basis/function/events。
もう一度言います。あるシンボルにハングアップするExpert Advisorについて話しています。イベント
イベントによって起動されます。
この関数の中にいて、1時間以上このペアのティックがない場合、1時間以内は何もできません。今のところ、唯一の解決策は、タイマーの中でそれを行うことです、それは楽器のティックの到着に関係なく開始されます。
はい、このhttps://www.mql5.com/ja/docs/basis/function/events の枠内で行動するならば、今のところ、OnTimeが最良の選択肢であることに同意します。しかし、それはティックの到着に依存することから私たちを救うだけです。また、シングルスレッド化からも解放されません。1つの計器のシグナルを処理している間に、他の計器の処理を見逃したり、遅らせたりするリスクがあります。これは、「取引注文の処理時間が2秒から7秒」+「リクオート」の場合に特に当てはまります。
TimeCuurent()のことを思い出したのは、マーケットレビューでInterestingが すべてのペアのリアルタイムティックについて話し始めたからです。
とても興味深い記事だ。すべてを共有してくれてありがとう。
しかし、いくつか気になることがある:
この 機能について、あなたはこう言っている:
If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
静的なローカル変数をグローバル変数に置き換えただけで、問題は解決していません。
とはいえ、あなたの 記事は 思考を押し進め、 興味深いアイデアを 提供 するメリットがある 。
良い記事をありがとう!とても役に立ちました!
とにかく、あなたのisNewBar関数を使用したところ、コンパイル時に以下のメッセージが表示されました:「型変換によりデータが失われる可能性が あります。
そこで、この方法でvarの型をdatetimeからlongに変更しました:
これで、何の通知もなくコンパイルでき、問題なく動作しているようです。ありがとうございました!