初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 742 1...735736737738739740741742743744745746747748749...1503 新しいコメント fxsaber 2017.04.10 18:09 #7411 Klimenko_a_e:実際のコードでは、この関数はオブジェクトを返します。この場合、コピーコンストラクタは一時的なコピーを作成する必要があると思います。このコードはMQL5 build 1545で正しく動作します。新しいビルドでは、コピーコンストラクタが1次元配列のサイズさえも変更できません:エラー4007。正しくないのではと思います。この場合、はっきりとしたことは申し上げにくいのですが。あなたの質問に対しては、非常に優れた専門家がいるので、この質問はhttps://www.mql5.com/ru/forum/1111 にすることをお勧めします。私の編集により、コードは正常に動作するようになりました。それがないと、ダメなんです。しかし、あなたのコードが動作するはずかどうかは、上記のリンク先のブランチまでが良いでしょう。 Ошибки, баги, вопросы www.mql5.com Форум алго-трейдеров MQL5 Klimenko_a_e 2017.04.10 18:44 #7412 Klimenko_a_e:実際のコードでは、この関数はオブジェクトを返します。コピーコンストラクタは、この場合、一時的なコピーを作成するべきだと私は考えています。このコードはMQL5 build 1545で正しく動作します。新しいビルドでは、コピーコンストラクタが1次元配列のサイズさえも変更できません:エラー4007。これは正しくないと私は思います。 このエラーはビルド1580で修正されました、ありがとうございます、すべて正常に動作します)。 Klimenko_a_e 2017.04.10 19:26 #7413 fxsaber:この件に関して、私は断定的なことを言うのは難しいです。ご質問の件に関しては、非常に優秀な専門家がいらっしゃいますので、https://www.mql5.com/ru/forum/1111 の支店に持ち込むことをお勧めします。私の編集により、コードは正常に動作するようになりました。それがないと、ダメなんです。しかし、あなたのコードが動作するはずかどうかは、上記のリンク先のブランチに指示されたほうがよいでしょう。 リンクありがとうございます。 Marat Sultanov 2017.04.12 07:04 #7414 誰かヒントをくれるかもしれませんね。入力設定を手動で変更した後、EAの実行を中断する方法がわかりません。1) チャート上でこのようなEAコードを実行します。#property version "1.00" input int Setting_ = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { Print ("OnInit:",Setting_); return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print ("OnDeinit(",reason,"):",Setting_); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { while (!_StopFlag) { Sleep(1000); } }2) 設定画面を開き、"Setting_"パラメータを1に変更します。3) そして、変更を適用します。そのため、変更の適用を開始するためには、OnInitを実行する必要がありますが、OnTick(またはその他)の計算が停止するまで、OnInitは実行されません。私の知る限り、_StopFlag - mql5-programを停止するフラグによってプログラムを停止 するチェックはありますが、それは完全終了の場合のみです。しかし、入力設定が変わって計算が止まったというのは、どう理解したらいいのかわかりません。もしかしたら、そんな状況に直面した人がいるのでは?もしかしたら、何か秘密のハックがあるのでは? Artyom Trishkin 2017.04.12 07:15 #7415 Marat Sultanov:誰かヒントをくれるかもしれませんね。入力設定を手動で変更した後、EAの実行を中断する方法がわかりません。1) チャート上でこのようなEAコードを実行します。2) 設定画面を開き、"Setting_"パラメータを1に変更します。3) そして、変更を適用します。そのため、変更の適用を開始するためには、OnInitを実行する必要がありますが、OnTick(またはその他)の計算が停止するまで、OnInitは実行されません。私の知る限り、_StopFlag - mql5-programを停止するフラグによってプログラムを停止 するチェックはありますが、それは完全終了の場合のみです。しかし、入力設定が変わって計算が止まったというのは、どう理解したらいいのかわかりません。もしかしたら、そんな状況に直面した人がいるのでは?もしかしたら、何か秘密のハックがあるのでは?OnInit()内の非初期化コードのチェック非初期化の理由UninitializeReason()によって返されるExpert Advisorの非初期化理由コードです。以下のいずれかの値を持つことができる。定数.価値商品説明REASON_PROGRAM0ExpertRemove()の呼び出しにより、Expertの動作が停止しました。REASON_REMOVE1チャートから削除されたプログラム理由_リコンパイル2プログラムの再コンパイルreason_chartchange3チャートシンボルまたはピリオドが変更されましたreason_chartclose4チャートは閉じていますreason_parameters5入力パラメーターがユーザーによって変更されたREASON_ACCOUNT6アカウント設定の変更により、別のアカウントがアクティブになった、またはトレードサーバーに再接続されたreason_template7別のチャートテンプレートが適用されたreason_initfailed8OnInit()ハンドラがゼロ以外の値を返したことを示すサインREASON_CLOSE9ターミナルを閉鎖 MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 [ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. Questions from Beginners MQL5 Marat Sultanov 2017.04.12 08:01 #7416 Artyom Trishkin:OnInit()内の初期化コードをチェックする。...あの...あなたは私を理解していない :)ユーザが入力パラメータを変更したことを関数内部で知る必要があります(例えばOnTick で)。 Artyom Trishkin 2017.04.12 09:33 #7417 Marat Sultanov:あの...あなたは私を誤解している :)ユーザが入力パラメータを変更したことを関数内部(例えばOnTick)で知る必要があります。つまり、そろそろ終了してOnDeinitでプログラムを終了させる時期であることを知る必要があります。 ユーザーがEA設定ウィンドウを呼び出し(F7)、そこでOKボタンをクリックすると、すぐにOnDeinit()が呼び出され、これによって、初期化解除コードにREASON_PARAMETERS 値が書き込まれます。次に OnInit() が呼ばれ、そこで UninitializeReason() を使って 初期化解除コードをチェックし、その値が REASON_PARAMETERSと等しければ 、次に 何をすべきかを決定することができるのです。 Marat Sultanov 2017.04.12 09:49 #7418 Artyom Trishkin: ユーザーがEA設定ウィンドウを呼び出し(F7)、そこでOKボタンをクリックすると、直ちにOnDeinit()が呼び出され、これによって、初期化解除コードにREASON_PARAMETERSの値が書き込まれるのである。次に OnInit() が呼ばれ、そこで UninitializeReason() を使って 初期化解除コードをチェックし、その値が REASON_PARAMETERSと等しければ 、次に 何をすべきかを決定することができるのです。わかりました。 お願いします。 1)まず、最初の投稿にある私のコードを実行 します。美しさのために置いたわけではないのですが...。どのチャートでも実行可能です。2)EA設定ウィンドウを呼び出す。3) パラメータを変更し、OKを押す。OnDeinit() は呼び出されないのです。 Marat Sultanov 2017.04.12 10:01 #7419 それだけでなく、エキスパートがdeinitに到達していないことを確認できるように、deinitで理由とパラメータの両方を印刷するようにしました。コードの中で最も重要な部分にご注目ください。void OnTick() { while (!_StopFlag) { Sleep(1000); } }入力パラメータが変わっても中断されない、長い計算を明確にエミュレートしているのです。そして、それを中断する必要があるのですが、問題はどのようにするかということです。:)MQL5で見逃しているものがないかを確認したいだけで、言語には本当に_StopFlag 以外何もありませんが、残念ながらこの状況を解決することはできません。大雑把に言うと、重い計算中に入力パラメータが変化する瞬間をとらえる必要があるんです。 Artyom Trishkin 2017.04.12 10:41 #7420 Marat Sultanov:それだけでなく、エキスパートがdeinitに到達していないことを確認できるように、deinitで理由とパラメータの両方を印刷するようにしました。コードの中で最も重要な部分にご注目ください。入力パラメータが変わっても中断されない、長い計算を明確にエミュレートしているのです。そして、それを中断する必要があるのですが、問題はどのようにするかということです。:)MQL5で見逃しているものがないかを確認したいだけで、言語には本当に_StopFlag 以外何もありませんが、残念ながらこの状況を解決することはできません。大雑把に言うと、重い計算中に入力パラメータが変化する瞬間をとらえる必要があるんです。大雑把に言うと、私があなたに書いたことをよく読み直し、あなたのコードから無限ループを削除してください。Expert Advisor を無限ループに追い込むことは、本当に正しい解決策なのでしょうか? 1...735736737738739740741742743744745746747748749...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
実際のコードでは、この関数はオブジェクトを返します。
この場合、コピーコンストラクタは一時的なコピーを作成する必要があると思います。
このコードはMQL5 build 1545で正しく動作します。
新しいビルドでは、コピーコンストラクタが1次元配列のサイズさえも変更できません:エラー4007。
正しくないのではと思います。
この場合、はっきりとしたことは申し上げにくいのですが。あなたの質問に対しては、非常に優れた専門家がいるので、この質問はhttps://www.mql5.com/ru/forum/1111 にすることをお勧めします。
私の編集により、コードは正常に動作するようになりました。それがないと、ダメなんです。しかし、あなたのコードが動作するはずかどうかは、上記のリンク先のブランチまでが良いでしょう。
実際のコードでは、この関数はオブジェクトを返します。
コピーコンストラクタは、この場合、一時的なコピーを作成するべきだと私は考えています。
このコードはMQL5 build 1545で正しく動作します。
新しいビルドでは、コピーコンストラクタが1次元配列のサイズさえも変更できません:エラー4007。
これは正しくないと私は思います。
このエラーはビルド1580で修正されました、ありがとうございます、すべて正常に動作します)。
この件に関して、私は断定的なことを言うのは難しいです。ご質問の件に関しては、非常に優秀な専門家がいらっしゃいますので、https://www.mql5.com/ru/forum/1111 の支店に持ち込むことをお勧めします。
私の編集により、コードは正常に動作するようになりました。それがないと、ダメなんです。しかし、あなたのコードが動作するはずかどうかは、上記のリンク先のブランチに指示されたほうがよいでしょう。
リンクありがとうございます。
誰かヒントをくれるかもしれませんね。
入力設定を手動で変更した後、EAの実行を中断する方法がわかりません。
1) チャート上でこのようなEAコードを実行します。
2) 設定画面を開き、"Setting_"パラメータを1に変更します。
3) そして、変更を適用します。
そのため、変更の適用を開始するためには、OnInitを実行する必要がありますが、OnTick(またはその他)の計算が停止するまで、OnInitは実行されません。
私の知る限り、_StopFlag - mql5-programを停止するフラグによってプログラムを停止 するチェックはありますが、それは完全終了の場合のみです。しかし、入力設定が変わって計算が止まったというのは、どう理解したらいいのかわかりません。
もしかしたら、そんな状況に直面した人がいるのでは?もしかしたら、何か秘密のハックがあるのでは?
誰かヒントをくれるかもしれませんね。
入力設定を手動で変更した後、EAの実行を中断する方法がわかりません。
1) チャート上でこのようなEAコードを実行します。
2) 設定画面を開き、"Setting_"パラメータを1に変更します。
3) そして、変更を適用します。
そのため、変更の適用を開始するためには、OnInitを実行する必要がありますが、OnTick(またはその他)の計算が停止するまで、OnInitは実行されません。
私の知る限り、_StopFlag - mql5-programを停止するフラグによってプログラムを停止 するチェックはありますが、それは完全終了の場合のみです。しかし、入力設定が変わって計算が止まったというのは、どう理解したらいいのかわかりません。
もしかしたら、そんな状況に直面した人がいるのでは?もしかしたら、何か秘密のハックがあるのでは?
OnInit()内の非初期化コードのチェック
非初期化の理由
UninitializeReason()によって返されるExpert Advisorの非初期化理由コードです。以下のいずれかの値を持つことができる。
定数.
価値
商品説明
REASON_PROGRAM
0
ExpertRemove()の呼び出しにより、Expertの動作が停止しました。
REASON_REMOVE
1
チャートから削除されたプログラム
理由_リコンパイル
2
プログラムの再コンパイル
reason_chartchange
3
チャートシンボルまたはピリオドが変更されました
reason_chartclose
4
チャートは閉じています
reason_parameters
5
入力パラメーターがユーザーによって変更された
REASON_ACCOUNT
6
アカウント設定の変更により、別のアカウントがアクティブになった、またはトレードサーバーに再接続された
reason_template
7
別のチャートテンプレートが適用された
reason_initfailed
8
OnInit()ハンドラがゼロ以外の値を返したことを示すサイン
REASON_CLOSE
9
ターミナルを閉鎖
OnInit()内の初期化コードをチェックする。
...
あの...あなたは私を理解していない :)
ユーザが入力パラメータを変更したことを関数内部で知る必要があります(例えばOnTick で)。
あの...あなたは私を誤解している :)
ユーザが入力パラメータを変更したことを関数内部(例えばOnTick)で知る必要があります。つまり、そろそろ終了してOnDeinitでプログラムを終了させる時期であることを知る必要があります。
ユーザーがEA設定ウィンドウを呼び出し(F7)、そこでOKボタンをクリックすると、直ちにOnDeinit()が呼び出され、これによって、初期化解除コードにREASON_PARAMETERSの値が書き込まれるのである。次に OnInit() が呼ばれ、そこで UninitializeReason() を使って 初期化解除コードをチェックし、その値が REASON_PARAMETERSと等しければ 、次に 何をすべきかを決定することができるのです。
わかりました。
お願いします。
1)まず、最初の投稿にある私のコードを実行 します。美しさのために置いたわけではないのですが...。どのチャートでも実行可能です。
2)EA設定ウィンドウを呼び出す。
3) パラメータを変更し、OKを押す。
OnDeinit() は呼び出されないのです。
それだけでなく、エキスパートがdeinitに到達していないことを確認できるように、deinitで理由とパラメータの両方を印刷するようにしました。
コードの中で最も重要な部分にご注目ください。
入力パラメータが変わっても中断されない、長い計算を明確にエミュレートしているのです。そして、それを中断する必要があるのですが、問題はどのようにするかということです。:)
MQL5で見逃しているものがないかを確認したいだけで、言語には本当に_StopFlag 以外何もありませんが、残念ながらこの状況を解決することはできません。
大雑把に言うと、重い計算中に入力パラメータが変化する瞬間をとらえる必要があるんです。
それだけでなく、エキスパートがdeinitに到達していないことを確認できるように、deinitで理由とパラメータの両方を印刷するようにしました。
コードの中で最も重要な部分にご注目ください。
入力パラメータが変わっても中断されない、長い計算を明確にエミュレートしているのです。そして、それを中断する必要があるのですが、問題はどのようにするかということです。:)
MQL5で見逃しているものがないかを確認したいだけで、言語には本当に_StopFlag 以外何もありませんが、残念ながらこの状況を解決することはできません。
大雑把に言うと、重い計算中に入力パラメータが変化する瞬間をとらえる必要があるんです。
大雑把に言うと、私があなたに書いたことをよく読み直し、あなたのコードから無限ループを削除してください。
Expert Advisor を無限ループに追い込むことは、本当に正しい解決策なのでしょうか?