MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 848 1...841842843844845846847848849850851852853854855...1953 新しいコメント Sergey Voytsekhovsky 2019.05.20 13:56 #8471 Artyom Trishkin:どんな計算を?Last_Arrow_Buy_volume = Buf_Arrow_Buy[n]; Last_Arrow_Buy_index = n; 了解しました、質問を削除します。あなたから聞いて、OnTick()領域で変数を宣言する のは悪いことで、計算はループ内でもできることに気がつきました。 完了、すべてうまくいきました、ありがとうございます、あとは値段を決めるだけです。ありがとうございました。 void OnTick() { if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find) { Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError()); return; } for(int n=0; n<(int)period_find; n++) { if(Buf_Arrow_Buy[n]!=EMPTY_VALUE) { Last_Arrow_Buy_volume = Buf_Arrow_Buy[n]; Last_Arrow_Buy_index = n; Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index); break; } } if (CopyBuffer(CrossAD, 2, 0, period_find, Buf_Arrow_Sell) != period_find) { Print("НЕ удалось правильно скопировать данные из 2-го буфера индикатора iCrossAD, error code %d",GetLastError()); return; } for(int n=0; n<(int)period_find; n++) { if(Buf_Arrow_Sell[n]!=EMPTY_VALUE) { Last_Arrow_Sell_volume = Buf_Arrow_Sell[n]; Last_Arrow_Sell_index = n; Print("Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume,", Last_Arrow_Sell_index = ",Last_Arrow_Sell_index); break; } } Comment("-------------------------", "\n Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume, "\n Last_Arrow_Buy_index = ",Last_Arrow_Buy_index, "\n ---------------------- ", "\n Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume, "\n Last_Arrow_Sell_index = ",Last_Arrow_Sell_index ); } Artyom Trishkin 2019.05.20 14:02 #8472 Sergey Voytsekhovsky: 了解しました、質問を削除します。あなたから聞いて、OnTick()領域で変数を宣言する のは悪いことで、計算はループ内でもできることに気がつきました。 完了、すべてうまくいきました、ありがとうございます、あとは値段を決めるだけです。ありがとうございました。 ループの中で計算をしているのではなく、必要なデータを取得している、それがこのループの設計です。 しかし、ループ内の計算は避けるべきです。 むしろ、すぐにでも考え直した方がいい。ループでデータを取得していますね。最初のデータに遭遇した後にループを中断する。これらはすべて、要求された結果を返すという、関数のコンセプトの範囲内にある。 ループ全体を関数にして、バーが見つかればその番号を、見つからなければ WRONG_VALUE - を返すようにします。 then:n=Func(); を計算し、WRONG_VALUEと等しくなければnを 本来の用途に使用する。関数に "しゃべる "名前をつける。そして、OnTick()のコードは短くなり、ロジックも明確になります。不要なものをオーバーロードすることはありません。 Sergey Voytsekhovsky 2019.05.20 14:08 #8473 Artyom Trishkin:ループ全体を関数化し、見つかれば小節番号を、見つからなければ WRONG_VALUE を返します。 次に:n=Func() です。 を計算し、WRONG_VALUEと等しくなければ、意図したとおりにnを 使用します。関数の名前を「伝える」名前にする。そして、OnTick()のコードは短くなり、ロジックはより明確になります。不要なものでオーバーロードされることはありません。生きて、学ぶのです。とても興味深いです、夜にでも試してみます。一応、報告として、そして感謝の気持ちを込めて、価格を......から出してもらいました。良い一日でした :-)) void OnTick() { if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find) { Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError()); return; } for(int n=0; n<(int)period_find; n++) { if(Buf_Arrow_Buy[n]!=EMPTY_VALUE) { Last_Arrow_Buy_volume = iOpen(_Symbol,_Period,n); Last_Arrow_Buy_index = n; Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index); break; } } if (CopyBuffer(CrossAD, 2, 0, period_find, Buf_Arrow_Sell) != period_find) { Print("НЕ удалось правильно скопировать данные из 2-го буфера индикатора iCrossAD, error code %d",GetLastError()); return; } for(int n=0; n<(int)period_find; n++) { if(Buf_Arrow_Sell[n]!=EMPTY_VALUE) { Last_Arrow_Sell_volume = iOpen(_Symbol,_Period,n); Last_Arrow_Sell_index = n; Print("Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume,", Last_Arrow_Sell_index = ",Last_Arrow_Sell_index); break; } } Comment("-------------------------", "\n Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume, "\n Last_Arrow_Buy_index = ",Last_Arrow_Buy_index, "\n ---------------------- ", "\n Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume, "\n Last_Arrow_Sell_index = ",Last_Arrow_Sell_index ); } Seric29 2019.05.20 17:32 #8474 この質問に協力できるみんなhttps://www.mql5.com/ru/forum/160683/page845#comment_11741857- コメントはすでに遠くに行ってしまったのでしょうか?また、インクリメンタルを実行する必要がある場合、デクリメンタルを実行する必要がある場合、どちらの方向でも動作するループをどのように作成するのかという疑問もあります。ここでは、その仕組みの一例をご紹介します。 もし(何かが起こった){変数への値の割り当て}なら、ループが呼び出され、ループの値に依存した計算を行うボディを含むことになる for( 上の変数によって増減) 本体 条件を重複して指定する方法はなく、ループ内で一度だけ指定する必要があります。可能なのでしょうか。 Sergey Voytsekhovsky 2019.05.20 18:04 #8475 またまたこんばんは。まだ関数にはしていませんが、新しい質問があります。添付の画像では、新しいシグナル(矢印)があることがわかりますが、コメントでは、EAがそれを受け入れず、11キャンドル前のものを究極の上矢印としてまだ考えていることがわかります。 https://www.mql5.com/ru/charts/10181812/eurusd-h1-alpari-international График EURUSD, H1, 2019.05.20 18:00 UTC, Alpari International, MetaTrader 5, Real www.mql5.com Символ: EURUSD. Период графика: H1. Брокер: Alpari International. Торговая платформа: MetaTrader 5. Режим торговли: Real. Дата: 2019.05.20 18:00 UTC. Sergey Voytsekhovsky 2019.05.20 18:10 #8476 Sergey Voytsekhovsky:11ろうそく前。インジケータはすでに新しいシグナルを出しており(チャート上ではEAと並行して動いている)、EAにはOnTick以外のイベントはなく、EAにはシグナルが見えていないことが判明しました。 Artyom Trishkin 2019.05.20 18:21 #8477 Sergey Voytsekhovsky:またまたこんばんは。まだ関数にはしていませんが、新しい質問があります。添付の画像では、新しいシグナル(矢印)があることがわかりますが、コメントでは、EAがそれを受け入れず、11キャンドル前のものを究極の上矢印としてまだ考えていることがわかります。 https://www.mql5.com/ru/charts/10181812/eurusd-h1-alpari-international空でないバッファ値を見つけた場合、バーnに対応する時間をログに出力する。どのバーを見つけるかがわかります。バッファを逆から読んでいる可能性もあります。 Sergey Voytsekhovsky 2019.05.20 18:24 #8478 EAがなぜ矢印を見ないのか、それはすでにインジケータバッファにあり、データウィンドウから判断すると、EAはOnTickを照会し、他に何が必要ですか?上記のフルコード。 Sergey Voytsekhovsky 2019.05.20 18:41 #8479 Artyom Trishkin:空でないバッファ値を見つけた場合、バーnに対応する時間をログに出力する。どのバーを見つけたかが表示されます。バッファを逆から読んでいる可能性もあります。OK、完了です。時刻は、矢印が設定されているローソクの始点時刻が正しく表示されます。コード添付、画像添付 void OnTick() { if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find) { Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError()); return; } for(int n=0; n<(int)period_find; n++) { if(Buf_Arrow_Buy[n]!=EMPTY_VALUE) { Last_Arrow_Buy_volume = iOpen(_Symbol,_Period,n); Last_Arrow_Buy_time = iTime(_Symbol,0,n); Last_Arrow_Buy_index = n; Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index,", Last_Arrow_Buy_time = ",Last_Arrow_Buy_time); break; } } if (CopyBuffer(CrossAD, 2, 0, period_find, Buf_Arrow_Sell) != period_find) { Print("НЕ удалось правильно скопировать данные из 2-го буфера индикатора iCrossAD, error code %d",GetLastError()); return; } for(int n=0; n<(int)period_find; n++) { if(Buf_Arrow_Sell[n]!=EMPTY_VALUE) { Last_Arrow_Sell_volume = iOpen(_Symbol,_Period,n); Last_Arrow_Sell_time = iTime(_Symbol,0,n); Last_Arrow_Sell_index = n; Print("Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume,", Last_Arrow_Sell_index = ",Last_Arrow_Sell_index,", Last_Arrow_Buy_time = ",Last_Arrow_Buy_time); break; } } Comment("-------------------------", "\n Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume, "\n Last_Arrow_Buy_index = ",Last_Arrow_Buy_index, "\n ---------------------- ", "\n Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume, "\n Last_Arrow_Sell_index = ",Last_Arrow_Sell_index ); } Sergey Voytsekhovsky 2019.05.20 18:44 #8480 写真でログが見えない場合は、極端なエントリーをご紹介します。 2019.05.20 21:42:52.601 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:42:53.824 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544、Last_Arrow_Buy_index = 11.0、Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:42:53.824 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:00.819 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544,Last_Arrow_Buy_index = 11.0,Last_Arrow_Buy_time=2019.05.20十時00分:00秒2019.05.20 21:43:00.819 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:03.021 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544, Last_Arrow_Buy_index = 11.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:03.021 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:03.621 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544、Last_Arrow_Buy_index = 11.0、Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:03.622 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:10.696 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544、Last_Arrow_Buy_index = 11.0, Last_Arrow_Buy_time = 2019.05.20 10:00:002019.05.20 21:43:10.696 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00 Any questions from newcomers Better NN EA development A quick and free 1...841842843844845846847848849850851852853854855...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
どんな計算を?
了解しました、質問を削除します。あなたから聞いて、OnTick()領域で変数を宣言する のは悪いことで、計算はループ内でもできることに気がつきました。
完了、すべてうまくいきました、ありがとうございます、あとは値段を決めるだけです。ありがとうございました。
了解しました、質問を削除します。あなたから聞いて、OnTick()領域で変数を宣言する のは悪いことで、計算はループ内でもできることに気がつきました。
完了、すべてうまくいきました、ありがとうございます、あとは値段を決めるだけです。ありがとうございました。
ループの中で計算をしているのではなく、必要なデータを取得している、それがこのループの設計です。
しかし、ループ内の計算は避けるべきです。
むしろ、すぐにでも考え直した方がいい。ループでデータを取得していますね。最初のデータに遭遇した後にループを中断する。これらはすべて、要求された結果を返すという、関数のコンセプトの範囲内にある。
ループ全体を関数にして、バーが見つかればその番号を、見つからなければ WRONG_VALUE - を返すようにします。
then:n=Func();
を計算し、WRONG_VALUEと等しくなければnを 本来の用途に使用する。関数に "しゃべる "名前をつける。そして、OnTick()のコードは短くなり、ロジックも明確になります。不要なものをオーバーロードすることはありません。
ループ全体を関数化し、見つかれば小節番号を、見つからなければ WRONG_VALUE を返します。
次に:n=Func() です。
を計算し、WRONG_VALUEと等しくなければ、意図したとおりにnを 使用します。関数の名前を「伝える」名前にする。そして、OnTick()のコードは短くなり、ロジックはより明確になります。不要なものでオーバーロードされることはありません。
生きて、学ぶのです。とても興味深いです、夜にでも試してみます。一応、報告として、そして感謝の気持ちを込めて、価格を......から出してもらいました。良い一日でした :-))
この質問に協力できるみんなhttps://www.mql5.com/ru/forum/160683/page845#comment_11741857- コメントはすでに遠くに行ってしまったのでしょうか?また、インクリメンタルを実行する必要がある場合、デクリメンタルを実行する必要がある場合、どちらの方向でも動作するループをどのように作成するのかという疑問もあります。ここでは、その仕組みの一例をご紹介します。
もし(何かが起こった){変数への値の割り当て}なら、ループが呼び出され、ループの値に依存した計算を行うボディを含むことになる
for( 上の変数によって増減)
本体
条件を重複して指定する方法はなく、ループ内で一度だけ指定する必要があります。可能なのでしょうか。
またまたこんばんは。まだ関数にはしていませんが、新しい質問があります。添付の画像では、新しいシグナル(矢印)があることがわかりますが、コメントでは、EAがそれを受け入れず、11キャンドル前のものを究極の上矢印としてまだ考えていることがわかります。
https://www.mql5.com/ru/charts/10181812/eurusd-h1-alpari-international
11ろうそく前。
インジケータはすでに新しいシグナルを出しており(チャート上ではEAと並行して動いている)、EAにはOnTick以外のイベントはなく、EAにはシグナルが見えていないことが判明しました。
またまたこんばんは。まだ関数にはしていませんが、新しい質問があります。添付の画像では、新しいシグナル(矢印)があることがわかりますが、コメントでは、EAがそれを受け入れず、11キャンドル前のものを究極の上矢印としてまだ考えていることがわかります。
https://www.mql5.com/ru/charts/10181812/eurusd-h1-alpari-international
空でないバッファ値を見つけた場合、バーnに対応する時間をログに出力する。どのバーを見つけるかがわかります。バッファを逆から読んでいる可能性もあります。
EAがなぜ矢印を見ないのか、それはすでにインジケータバッファにあり、データウィンドウから判断すると、EAはOnTickを照会し、他に何が必要ですか?上記のフルコード。
空でないバッファ値を見つけた場合、バーnに対応する時間をログに出力する。どのバーを見つけたかが表示されます。バッファを逆から読んでいる可能性もあります。
OK、完了です。時刻は、矢印が設定されているローソクの始点時刻が正しく表示されます。コード添付、画像添付
写真でログが見えない場合は、極端なエントリーをご紹介します。
2019.05.20 21:42:52.601 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:42:53.824 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544、Last_Arrow_Buy_index = 11.0、Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:42:53.824 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:00.819 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544,Last_Arrow_Buy_index = 11.0,Last_Arrow_Buy_time=2019.05.20十時00分:00秒
2019.05.20 21:43:00.819 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:03.021 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544, Last_Arrow_Buy_index = 11.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:03.021 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:03.621 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544、Last_Arrow_Buy_index = 11.0、Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:03.622 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:10.696 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = 1.11544、Last_Arrow_Buy_index = 11.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00
2019.05.20 21:43:10.696 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = 1.12112, Last_Arrow_Sell_index = 56.0, Last_Arrow_Buy_time = 2019.05.20 10:00:00