Init()およびDeInit()実行シーケンス - ページ 13

 
Andrey Dik:

...

すでに何人かの方から、MT5のインジケータ実行パラダイムの中で問題となる作業の具体例を教えてほしいという要望がありました。無から吸い上げるのではなく、明確な事例があるのか、ないのか。

ある指標では、最初にイニシャル、次にデイニットとなっています。しかし、タイムフレームが切り替わると、2つ目のインジケータ・インスタンスが作成され、そのinitは前の(未チャートの)インスタンスのdeinitより早く実行されることがあります。

最も分かりやすい例として、タイムフレームを切り替えたときにユーザーパラメータを保存する場合、deinitでパラメータを保存し、initで読み込むことになります。新しいインスタンスのinitが前のインスタンスのdeinitの前にトリガーされた場合、パラメータは保存されません。

実用的には、削除されたインスタンスのdeinitは、新しいインスタンスのinitの前に発動することがほとんどですが、時間軸が非常に早く切り替わったり、データが読み込まれたりすると、失敗が発生するのだそうです。

 
Slawa:

そして今度は、イベントキューが1つではなく、シンボル周期ごとにキューがあると想像してください。キューと同じ数のシンボル・ペリオドが存在します。

では、キューを処理する順番を提案してください。

私の意見としては、キューはチャートと連動させるべきだと思っています。ユーザーがシンボル、TFを変更するか、単にそれを閉じて、すべての指標は完全に終了する必要があり、その後EA、定義内のすべてのコマンドの処理(彼らが行うものは何でも、グローバル変数、ファイルへの書き込み、オブジェクトの削除、DLLとの対話、インターネットに何かを送信)と完了し、メモリからアンロードした後 - 新しいTFまたはシンボルで新しいインスタンスを実行し、前の1について何も知らないが、正しく以前の1を救った情報を読み取ることができること。

少し遅くなるかもしれませんが、それが正しいことだと思います。

私は、速く、間違っているのではなく、正しく動作するプログラムに賛成です。

もし、新しいインスタンスの開始が早ければ、deinitは全く必要ないことがわかり、プログラマが何かを保存して、それを数えることを希望するため、誤解を招くので有害でさえあります。このままでは、この関数の結果が次の世代に伝わらないということを、ヘルプに追加してください。 この関数の結果は次のインスタンスには知られない、つまりこの関数の中では誰も何もしない。そしてさらに良いのは、自然の摂理が非常に難しく、何百時間もの作業を必要とする場合は、それを削除することです。

 
Slawa:

タイムフレームの切り替えが下降した場合、まず 下(新) タイムフレームでOnInitし、 次に 上(旧)タイムフレームで OnDeinitします。

スイッチが上がれば、その逆もしかり。まず、低い(古い)タイムフレームでOnDeinitを開始し、次に高い(新しい)タイムフレームでOnInitを開始します。

ここで注意しなければならないのは、キャッシュは最も低いタイムフレームから最も高いタイムフレームまで処理されるということです

とても不思議な論理だ! どうしたらいいのだろう?DeInitでディスクに書き込まれたパラメータがある場合、それが下位のタイムフレームで開始されたとしても、次の指標開始時にOnInitで読み込まれて拾われる必要があります。

短いテストを書いて確認する必要がありそうですね。実際、機能が下位の時間枠に切り替われば、ロジックはもっとうまくいくでしょう。

一般に、静的変数が インジケータに保存されないのは残念ですが、同時にExpert Advisorは静的変数との相性が抜群に良いです。
 
Ihor Herasko:

1.デスクトップアプリケーションといえば?MT5はデスクトップアプリケーションではないような気がするのですが・・・。

2) 作り話ではありません。現在のスレッドのトピックです。ポイントは、MT5がまだDeInitしていないインジケータに対してInitを実行できることです。はい、そうです。トピックを読んでいないのでしょうか?

3.同じファイルを1秒間に数回更新してみて、感じたことを共有する。

4.名前に1をつけることと、何か関係があるのでしょうか?同じインジケーターのグラフィックオブジェクトが、異なるコピーで同時に画面上に存在することです。技術的には何の矛盾もありません。古いコピーが削除されるまで、画面に表示される悔しさを見るユーザーには、コンフリクトが発生します。

5.重大な秘密を教えましょう:DLLは端末のコピー1つにつき1つです。複数枚使用することはできません。

1.MT5の話ではなく、インジケーター(スクリプトやエキスパートなど)はOS上で動作するのではなく、特別にセキュアな環境で動作するという話です。

2.矛盾していますね。もし再計算が非常に速く(1秒間に数回)行われるのであれば、インジケーターの新しいコピーで新たに再計算を行うことは問題ないでしょう。この場合、設定した時間後に定期的に実行データをリセットするのが理にかなっています(このためにontimerやカスタムカウンターを使用することができます)。また、計算が長くなればなるほど、不可抗力による消失を避けるために、計算後のデータを保存しておく必要がある(母親は「音波を避けるため」にコンセントからプラグを抜いた)。

3.古いコピーは1秒もかからずに削除され、そのグラフオブジェクトも一緒に削除されます。フリッカーが観測されるような頻度でTFを切り替えるなんて、どんなマヌケがいるんだ?- だからなんだ、dllは1秒以内にコピーから削除できないんだよ。

4.だから?DLLはビジーかもしれません、それは正常です。気にする必要はなく、例えば、1秒後にリクエストを繰り返すだけでいいのです。

このように、MT端末のプログラムはデスクトップアプリケーションではないこと、特別に保護された環境で動作することを忘れずに、正しく扱えば問題ありません。

 
Dmitry Fedoseev:

ある指標では、最初にイニシャル、次にデイニットとなっています。しかし、タイムフレームが切り替わると、2つ目のインジケータ・インスタンスが作成され、そのinitは前の(未チャートの)インスタンスのdeinitより早く実行されることがあります。

最も分かりやすい例として、タイムフレームを切り替えたときにユーザーパラメータを保存する場合、deinitでパラメータを保存し、initで読み込むことになります。新しいインスタンスのinitが前のインスタンスのdeinitの前にトリガーされた場合、パラメータは保存されません。

実質的には、削除されたインスタンスのdeinitは新しいインスタンスのinitの前に起動されるが、時間軸が非常に早く切り替わったり、データが読み込まれたりすると、失敗が発生する。

またか...。なぜ「時間軸の切り替えが早い」のか!?本当に「ボタンを押して素早く」パソコンの電源を入れる(切る)パワーがある人はいるのだろうか?
 
Andrey Dik:
またか...。なぜ「時間軸の切り替えが早い」のか!?パソコンの電源を「ボタンを押して素早く入れる(切る)」Powerをお持ちの方はいらっしゃいますか?

なぜ?刑法が禁止しているのか、憲法が禁止しているのか?
 
Dmitry Fedoseev:

なぜ?刑法が禁止しているのか、憲法が禁止しているのか?

ACが禁止していないことはたくさんあるんだ、ソケットに指を突っ込んだりね。

オブジェクトがちらつき始めるほど頻繁にTFの切り替えを行う必要がある例を挙げてください。- 催眠効果については、より効率的な方法で達成できるため、例を挙げないこと。

 
Andrey Dik:

ソケットに指を突っ込むなど、レギュレーターが禁止していないことはたくさんある。

TFを頻繁に切り替える必要があるため、オブジェクトがちらつき始める例を挙げてください。- 催眠効果については、より効率的な方法で達成できるため、例を挙げないこと。

ソケットとプラグはバカではなく、まともな設計者が設計した ものだからです。電圧側はプラグではなく、ソケットです。さらに、ソケットの穴は指を入れられないほど大きい。しかし、自分の家では自分流に、プラグを壁から突き出させ、ソケットを配線にぶら下げることができるのです。結局のところ、あなたは理解していて、壁から突き出ているプラグを手で触ることはないでしょう。
 
Dmitry Fedoseev:
ソケットとプラグは、バカではなく、良識ある設計者が設計したからです。電圧側はプラグではなく、ソケットです。さらに、ソケットの穴は指を入れられないほど大きい。しかし、自分の家では自分流に、プラグを壁から突き出させ、ソケットを配線にぶら下げることができるのです。壁から突き出ているプラグを理解し、手で触れない。

OKです。ソケットは残念な例です。

では、もう1つ。ベランダから飛び降りることです。ACはベランダから飛び降りることを禁止しているのですか?- ダメ?- それなら、アドレナリン目的で練習すればいいじゃないですか。

すべての目標は、賢明な手段によって達成されなければならない。そうでなければ、目標は賢明ではない。

 
Dmitry Fedoseev:

アンドレイ・ディク

TFを頻繁に切り替える必要があるため、オブジェクトがちらつき始めるような例を挙げてください。- 催眠効果については、より効率的な方法で実現できるため、例を挙げないこと。