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

 
Nikolai Semko:
もちろん、コードもありがとうございました。ただ、EAはTFを変えても変数を再初期化しないのに対して、インジケータは再初期 化するので、いずれにしても問題ないです。本当にアドバイスに役立ちたい のであれば、あまり急がずにもう一度「実行」してください。

ニコラスさん、最初の書き込みの時も、この話題に出くわしました。そして、タイムフレームが変わったときにEAがどのように動作するかについての議論は見つかりませんでした。 はい - このトピックは、著者が彼の投稿で「インジケータ またはExpert Advisorが書かれて いる」間に、ほとんどインジケータについてです。

私は、Expert Advisorの枠組みの中で動作することを確認した例を示しました。 しかし、あなたは - その後、あなたは思いやりのない私を非難し、次にトピックを再読するために私を送って、次に議論 - 何が妥当か妥当でないです。さらに、最初のページを読むこともできます。

Expert AdvisorなのかIndicatorなのか、はっきりしませんね。 あなたの投稿では、Indicatorについて話していることもはっきり書かれていません。

は、あなたの投稿の例を参照してください。

ニコライ・セムコ
では、これでおしまい?
この理由コード(REASON_CHARTCHANGE)を実験的にフルに使っています。しかし、すべての変数が初期状態に設定され、新しいTFのOnInitの後にOnDeinitが実行されるとしたら、どんな良いことがあるでしょうか?

今言った内容から、インジケータで変数が初期化されることは明らかでしょうか?

あなたの投稿を読んだ人は、Expert Advisorでも同じことが起きると思うかもしれません。

----

この質問に対する答え!「TFを変更すると変数の再初期化は発生しないが、インジケータでは発生 する」。

Andrey Dik:
変数の値をどこかに保存することができます。例えばグローバルに...。

OnInitメソッドを使用する場合は、同じように値の読み込みと復元を行う必要があります。

------------

もし、あなたがインジケータのTFを変更する問題だけに興味があるのなら、私を含む他の人がEAのTFを変更するオプションに興味がないとは限りません。

インジケーターについては、実践でのやり方が分からないのでアドバイス できませんが、提案された解決策を興味深く観察していきたいと思います。

開発者がこのトピックを読んでいて、ビルド1580でいくつかの点を修正したと聞いています。 おそらく、解決策を提示してくれるでしょう。

 
Slawa:

私が書いたものを何度も読み返したのではありませんか?

インジケータに方法はない。最初から5つで できるわけがない。なぜなら、インジケーターのすべての結果を含む全く新しいコピーをダウンロードしなければならないからです。


正直にお答えいただき、ありがとうございました。

5ではずっとそうでした。もしかして、そろそろ修理の時期?

正しい順序で行うことは、そんなに難しいことなのでしょうか?スタート時の時間短縮は、毎回の チェックに終わりがないことを意味します。

私はすでにMT5のOOPパラダイムに慣れ、どこにレーキがあるか、そしてもちろん新しいものがなければ、これらのレーキを迂回する松葉杖をどう固定するか知っています。オブジェクトを削除して新しいオブジェクトを作成する方が、いくつかのパラメータを変更するよりも簡単であることが判明しました。

同じように、車でもオイルを交換して乗り続けるより、車を捨てて新しい車を作ったほうがいい。

アニメを思い出す。


ビデオのダウンロード
 

教えてください。

というプログラムを書く ことにしました。

1.On Inite出力 8ライン

2.OnDeIniteはさらに8行出力します。

テスターで走らせた(2日間走らせて手に入れた)。

なぜか、一部の文字列を選択的にログに残さない。

これもスピードアップの ため?


------------------------------------------------------------------------------------------

という疑問はクリアに なりました。

------------------------------------------------------------------------------------------

ドキュメントに

1.ログにプログラマーが期待する情報がすべて表示されない

--------完全なログを見ることが不可欠です !!!!

ファイル:
Log2.txt  2 kb
ERROR_2.mq5  2 kb
 

以上、要約してまとめたいと思います。では、MT5の1580ビルド(現在のビルド1571)のリリースを前に、何があるのでしょうか?

インジケータでは、Expert Advisorと異なり、TFが変わると「前のコピーのことを何も知らない新しいコピーが作成される」 ため、すべての変数が再初期化されるほか、古いTFのOnDeinitと新しいTFのOnInitの実行順序がTFが「上昇」「下落」にかかわらず予測不可能になります(スラバ さんの話と逆の実践です)この関連で、プログラマーは多くの問題や不確実性を抱えている。例えば、
- OnInitで何かのインジケータを作成するときにこのトピックを読んでいないプログラマは、この名前でオブジェクトの作成前に論理的にチェックする、オブジェクトを作成します。また、OnDeinitでこのオブジェクトの削除を規定するのが論理的である。TFを変更した場合、最初に新しいTFのOnInitを実行し、オブジェクトの存在を確認すると、既に存在していることが判明し、作成されない。その後、古いTFのOnDeinitが実行され、オブジェクトが削除される。プログラマーはショックを受けている。私のモノはどこにあるのか、なぜなくなったのか。次にTFが変更されたとき、OnInitとOnDeinitの順序が異なるときに、オブジェクトが削除されないと、彼はさらに混乱することになる。削除されたり、削除されなかったり...。長い研究の後、サービスデスク、古いものについてのフォーラムで新しいスレッドに対処するために開始されます。
これは最も単純な状況に過ぎない。この機能はドキュメントに記載されておらず、フォーラムで読むしかないため、他の人もいるでしょう。
何か特別なものを作り、TFを変更したときに、インジケータの古いコピーから新しいコピーにいくつかのパラメータを渡したい場合、初期化および非初期化操作の順序が予測できないため、OnDeinitを使用することはできません。私
の意見では、この場合の最善の解決策は、次のツールを使用することです: ピクセル配列とResourceReadImageに基づいてResourceCreateが、それは非常に面倒で、あなたが1つのウィンドウでいくつかの同一の指標を使用する場合、リソースの競合の世話をする必要があり、別のコピーに送信したいデータが非初期化リソースにそれを保存する必要が毎回、TFの変更の可能性が時間は、アプリケーションに知られていないためです。ずいぶん前に(この製品などで)実装したことがあるので、よくわかるんです。ファイルや端末のグローバル変数を使ったデータ転送の実装は、あまり成功したとは言えない(IMHO)。

もし新しいビルド1580がSlavaの言うような ものになるなら、インジケーターの古いコピーの非初期化が新しいものの初期化の後に行われるため、この作業は容易ではないでしょう。しかし、不安はないでしょう。

せっかく修正しようとしているのだから、開発者がこの問題に目を向けてくれればと思います。
新しいビルドを待ちます。

 

すべてのグラフオブジェクトは、現在のTFを基準にして命名されます。初期化時に作成し、非初期化時に削除する。インジケータ動作中は、必要に応じて修正してください。

何か問題があるのでしょうか?問題ありません。インジケーターの始動から降ろす瞬間まで、すべてが正常です。

TFを切り替えます。上でも下でもどっちでもいいんです。インジケーターのコピーが起動します。これは、このTFで初めて指標が発売されたことに相当します。

何か問題があるのでしょうか?問題ありません。古いコピーはそのオブジェクトの削除を行い、新しいコピーは現在のタイムフレームに従って新しいオブジェクトを作成します。

私は何を間違えているのだろう?なぜ問題視しないのか?

 
Andrey Dik:

すべてのグラフオブジェクトは、現在のTFを基準にして命名されます。初期化時に作成し、非初期化時に削除する。インジケータ動作中は、必要に応じて修正してください。

何か問題があるのでしょうか?問題ありません。インジケーターの始動から降ろす瞬間まで、すべてが正常です。

TFを切り替えます。上でも下でもどっちでもいいんです。インジケーターのコピーが起動します。これは、このTFで初めて指標が発売されたことに相当します。

何か問題があるのでしょうか?問題ありません。古いコピーはそのオブジェクトの削除を行い、新しいコピーは現在のタイムフレームに従って新しいオブジェクトを作成します。

私は何を間違えているのだろう?なぜ問題視しないのか?

この文書化されていない機能を知っていて、最も単純なケースであるグラフのみを扱うのであれば問題ありません。オブジェクトを作成します。この機能を知らない人のことですが、このトピックはこのフォーラムのごく一部のプログラマーが読んでいると思うので、すべてのニュアンスを把握するのに時間がかかるのが残念です。本質を理解する前に、このような事態に陥ってしまったのです。
 
Nikolai Semko:
この文書化されていない機能を認識した上で、最も単純なケースであるグラフのみを扱うのであれば問題ないでしょう。オブジェクトを作成します。この機能を知らない人のことですが、このトピックはこの掲示板のごく一部のプログラマーが読んでいると思うので、すべてのニュアンスを把握するのに時間がかかるのが残念です。本質を理解する前に、このような事態に陥ってしまったのです。

このスレッドに書かれているようなニュアンスは聞いたことがありませんが、ここに書かれているような問題には遭遇したことがありません。

例えば、ターミナルのメイン変数に転送したデータを保存しておけば、インジケーターのアンロードの 理由(TFの変更、ママが「みんなが寝ているときに音が鳴らないように」プラグを抜いた、地震、地球の磁極の変更など)に関係なく、インジケーターを最新に保つことができます。次のインジケーターの実行(TFが変更されたときのコピーも含む)は、この魔法のデータソースから必要なすべての情報を取得します(世界規模の不運なケースには、データをクラウドドライブに保存することができます)。

みんな、全然問題ないよ。

 
Andrey Dik:

すべてのグラフオブジェクトは、現在のTFを基準にして命名されます。初期化時に作成し、非初期化時に削除する。インジケータ動作中は、必要に応じて修正してください。

何か問題があるのでしょうか?問題ありません。インジケーターの始動から降ろす瞬間まで、すべてが正常です。

TFを切り替えます。上でも下でもどっちでもいいんです。インジケーターのコピーが起動します。これは、このTFで初めて指標が発売されたことに相当します。

何か問題があるのでしょうか?問題ありません。

異なる指標のオブジェクトが同時に存在する、という問題があります。"申し訳ありません、一時的に技術的な問題が発生しました"(ただし、古いインジケータのDeInitが発生する数秒後に解決されます。)

古いコピーはそのオブジェクトを削除し、新しいコピーは新しいオブジェクトを作成し、現在のTFに応じた名前を付けます。

私は何を間違えているのだろう?なぜ問題が起きないのか?

視野が狭いんです。だから、見えないんです。少し視野を広げてみてください。最初の問題は、ファイルを操作しているときに、前のインジケータがファイルにデータを保存する時間があったかどうか、まだ保存していないかどうかがはっきりしないことである。端末のグローバル 変数にいくつかのフラグを作成する必要があります。新しいインジケーターのコピーは、古いコピーが蓄積されたデータをリセットするのを待つ必要があります。ところで、このような同期が可能なのはOnCalculate()の中だけであることが問題である。また、週末にスイッチが入った場合はどうすればいいのでしょうか?新しいコピーが始まるのは月曜から?そうだ、タイマーにすればいいんだ!大砲でスズメを撃つと聞いたことがあります、パチンコもいいかもしれませんね。

これらはまだ単純な問題です。マルチスレッドのDLLを扱う場合は、このロジックを考慮するようにしてください。さて、ここからが楽しいところです。まあ、強くなるんだけどね )))

 
Andrey Dik:

このスレッドに書かれているようなニュアンスは聞いたことがありませんが、ここに書かれているような問題には遭遇したことがありません。

例えば、ターミナルのメイン変数に転送したデータを保存しておけば、インジケーターのアンロードの 理由(TFの変更、ママが「みんなが寝ているときに音が鳴らないように」プラグを抜いた、地震、地球の磁極の変更など)に関係なく、インジケーターを最新に保つことができます。この魔法のデータソースから、次のインジケーターの起動(TF変更時のコピーも含む)に必要なすべての情報を取得します(世界規模の不運なケースでは、クラウドディスクにデータを保存することが可能です)。

みんな、全然問題ないよ。

明日、回答します。いい?運転は簡単です。
 
Ihor Herasko:

異なる指標のオブジェクトが同時に存在する、という問題があります。"申し訳ありません、一時的に技術的な問題が発生しました" (ただし、数秒後に古いインジケータのDeInitが発生し、修正される予定です)

視野が狭いこと。だから、見えないんです。少し視野を広げてみてください。ファイルを扱う場合、前のインジケータがファイルにデータを保存できたかどうかがまだ明確でないため、最初の問題が既に発生しています。端末のグローバル 変数にいくつかのフラグを作成する必要があります。新しいインジケーターのコピーは、古いコピーが蓄積されたデータをリセットするのを待つ必要があります。ところで、このような同期が可能なのはOnCalculate()の中だけであることが問題である。また、週末にスイッチが入った場合はどうすればいいのでしょうか?新しいコピーが始まるのは月曜から?そうだ、タイマーにすればいいんだ!大砲でスズメを撃つと聞いたことがあります、パチンコもいいかもしれませんね。

これらはまだ単純な問題です。マルチスレッドのDLLを扱う場合は、このロジックを考慮するようにしてください。さて、ここからが楽しいところです。まあ、強くなるんですけどね)))

コピーに必要なデータは常に最新のものにしておくことです。 初期化時だけでなく、常に最新の状態にしておく必要があります。

それ以外のケースはすべて、気難しさによる作為的なものです。

同じインジケータを同時に実行することに問題がある場合、TFへのリンクで毎回ユニークなオブジェクトを作成し、すでにオブジェクトがある場合は名前に1を追加してください。

現在の端末のインジケーターの動作方法によって、問題が解決されないケースは一つも挙げられていない。問題は、インジケーターを使った誤った作業によって引き起こされます。

一般に、プログラムが3種類あるのには理由がある(4種類目は近日公開予定)ことを理解していない人が多いようです。