2011.06.2720:10:56 Тест (EURUSD,H1) OnInit() begin!
2011.06.2720:10:56 Тест (EURUSD,H1) Static initialized!
2011.06.2720:10:56 Тест (EURUSD,H1) OnInit() end!
EAをチャートから外さずに、チャートの期間を変更します。
2011.06.2720:11:00 Тест (EURUSD,M30) OnInit() begin!
2011.06.2720:11:00 Тест (EURUSD,M30) OnInit() end!
コンポーザー
おっしゃるとおりです。間違えました。
ご返信ありがとうございました。
MQL5リファレンスマニュアル -標準ライブラリ- データを整理するためのクラス - CArrayObj(ウェブサイトとヘルプに記載)。
2.メモリ管理機構は無効です。
この場合、CArrayObj はメモリ解放の責任を 負いません。
ドキュメンテーション静的変数の セクション。
"...静的変数はプログラム実行の瞬間から存在し、専用関数OnInit()を呼び出す前に 一度 、 初期化 される...。"
Expert Advisor のコードを確認する。
チャート上にEAを "配置 "する。
EAをチャートから外さずに、チャートの期間を変更します。
このような仕組みになっているのでしょうか?
実は、ドキュメントからの情報では、リコンパイルやシンボルの変更などによるものであろうと、関数OnInit()の呼び出しがあれば、スタティック変数を強制的に初期化すると解釈していたのですが...。
それは、私の勘違いだったことがわかりました。ご教示ください:このルールの例外は何ですか?
入力パラメータが変わっても、同じように「ごちゃごちゃ」している。
しかし、アカウントが変更されると、静的変数が再初期化され、正しく処理される。
エキスパート(REASON_CHARTCHANGE)を削除せずにチャートシンボルを変更するにはどうしたらいいのでしょうか?
ドキュメンテーション静的変数の セクション。
"...静的変数はプログラム実行の瞬間から存在し、専用関数OnInit()を呼び出す前に 一度 、 初期化 される...。"
Expert Advisor のコードを確認する。
チャート上にEAを "配置 "する。
EAをチャートから外さずに、チャートの期間を変更します。
このような仕組みになっているのでしょうか?
はい、うまくいくはずです。
プログラム(そのコード)はすでに一度ロードされており、ホット再初期化(コードのアンロードを伴わないDeinit/Init)のみを実行します。この場合、開発者自身が環境を適切に初期化する必要があります。
はい、そのように動作するはずです。
プログラム(そのコード)はすでに一度ロードされており、ホット再初期化(コードのアンロードを伴わないDeinit/Init)を行うだけです。この場合、開発者は環境の適切な初期化に気を配らなければなりません。
まず、あなたのコメントは、ドキュメントにある「OnInit()を呼ぶ前に一度 初期化する」という定義と明らかに矛盾しています。その場合は、ドキュメントに「...OnInit()を呼ぶ前に一度 初期化する」と明確に定義しておく必要があります。 第一 call OnInit()」と呼びます。
次に、アカウント変更の場合、MTがExpert Advisorを強制終了し、再度復元することが明らかであるため、コメントと矛盾しています。
OnInit()の呼び出しのたびに(最初の呼び出しだけでなく)スタティック変数を 強制的に再初期化すべきかどうかという根本的な問題を検討/投票に持ち込むことは可能でしょうか?
一般的に、物事の仕組みは面白いものです。
一見、OnDenit関数はデストラクタの一種であり、OnInitはExpert Advisorのコンストラクタであるように思いました。
実は、OnInitは複数回(エキスパートの寿命内)のイベントであることが判明しました。では、EAが動作を終了しないことが分かっているのに、なぜOnDenitイベントを明示的に発生させる必要があるのかが不明です(例えば、チャートの期間を変更した場合など)。
そしてもう一つの質問。
REASON_CHARTCHANGEの非初期化の理由は、チャートのシンボルまたは期間が変更されたことです。
チャート上のEAを削除することなく、チャートシンボルを変更する方法を教えてください。
そしてもう一つの質問。
非初期化の理由 REASON_CHARTCHANGE - チャートシンボルまたは期間が変更されました。
チャート上のEAを削除することなく、チャートシンボルを変更する方法を教えてください。
実は、面白いんです。
直感的に、OnDenit 関数は一種のデストラクタで、OnInit 関数は Expert Advisor のコンストラクタだと思ったのです。
実際には、OnInitは複数回(Expert Advisorのライフタイム内)のイベントであるようです。では、EAが動作を終了しないことが分かっている場合(例えば、チャートの期間が変わった場合)、なぜOnDenitイベントを明示的に生成する必要があるのかが不明です。
そしてもう一つの質問。
REASON_CHARTCHANGEの非初期化の理由- チャートのシンボルまたは期間が変更されました。
.チャート上のEAを削除することなく、チャートシンボルを変更する方法を教えてください。
MT4ですべてが同じように呼び出されました。そして、エキスパートがその作業を終了したかどうかはわかりません(OnDeinitのパラメータはこの目的のために落ちていますが、OnInitのトリガーとなりうる理由も簡単に知ることができます)。
2.方法はとても簡単で、端末の設定でExpert Advisorがシンボルと期間が変更されたときに取引するように設定します。
次に、マーケット概観で別のシンボルを選択し、マウスでチャート上に「ドロップ」します。
いずれにせよ、シンボル/期間の変更後の正常な初期化でEAは「削除されない」(下記のRenatさんの言うように「ホットリスタート」する) のです。単純に考えれば、Expert Advisorは特定の端末設定のもとで取引できるようになる。
ChartSetSymbolPeriod()
まず、あなたのコメントは、ドキュメントにある定義と明らかに矛盾しています:それらはOnInit()を呼び出す前に一度 初期化されます。その場合は、ドキュメントに「...OnInit()を呼ぶ前に一度 初期化する」と明確に定義を明記する必要があります。 第一 OnInit()呼び出し」。
次に、アカウント変更の場合、MTがEAを強制終了し、再度復元することが明らかであるため、コメントが矛盾しています。
OnInit()の呼び出しのたびに(最初だけでなく)静的変数を 強制的に再初期化する必要性についての基本的な質問を紹介/投票することは可能でしょうか?