MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1688 1...168116821683168416851686168716881689169016911692169316941695...1953 新しいコメント Nerd Trader 2021.10.19 21:29 #16871 では、科学者諸君、なぜマジックは2で止まり、ユニークは止まらないのか、説明してください。ソースコードでは、10個のオーダーを開き、それぞれにユニークなマジックをインクリメントし、そのユニークさをネストしたループで比較(!=)することでチェックします。 ややこしいかもしれませんが、コードを見ていただくとわかりやすいと思います。 ファイル: endless_cycle.mq4 2 kb Nerd Trader 2021.10.19 21:35 #16872 pribludilsa #: つまり、フォームの便利なところは、項目をいくつも与えることで、ある配列を埋めることができることです。ArrayResizeはポジションの数に関連しているため、0が供給されるとすべてがクラッシュします。そのため、ポジション数が0以上の場合は、このループに入るという条件を追加しています。私もいつもそれで失敗しているので、今、改めて確認しました。そうしないと、フォルテは配列の0番目の要素を埋めることができないので、このアドバイスは正しいです。 そうなんです、これが原因でトラブルが絶えないんです。この明確化によって、バグフィックスに費やす時間が何倍にもなることを期待しています。 Nikolay Ivanov 2021.10.19 21:43 #16873 Nerd Trader #: では、科学者の皆さん、なぜマジックは2で止まり、ユニークは止まらないのか、説明してください。ソースコードでは、10個のオーダーを開き、それぞれにユニークなマジックをインクリメントして割り当てます。そのユニークさは、入れ子ループで比較(!=)することでチェックします。複雑すぎてよくわかりませんが、コードを見ればわかりやすいと思います。 異なる魔導師で10個のオーダーを作るループが必要なら、それはそれでいいんじゃないでしょうか。 for(int i = 0; i < 10; i ++) { int order_send = OrderSend(Symbol(), OP_BUY, 0.01, Bid, 10, 0, 0, "", i, 0, CLR_NONE); if(order_send == -1) ResetLastError(); } この場合、私はループをコントロールするだけでなく、オーダーのマジシャンという役割も担っています。 しかし、あなたの例では、多くのエラーがあり、一種のパズルのようなものが出来上がってしまっています。その理由は何なのか、徹底的に調べる人は少ないだろうが...。 まあ、少なくともオーダーループはおかしいんだけど...。しかも魔法の変数はローカルで常にリセットされるし...。(蓄積されない) Nerd Trader 2021.10.19 21:50 #16874 Nikolay Ivanov #:異なる魔導師で10個のオーダーを作るループが必要なら、それはそれでいいんじゃないでしょうか。この場合、私はループをコントロールするだけでなく、オーダーのマジシャンという役割も担っています。しかし、あなたの例では、多くのエラーがあり、一種のパズルのようなものが出来上がってしまっています。その理由は何なのか、徹底的に調べる人は少ないだろうが...。まあ、少なくともオーダーループはおかしいんだけど...。しかも魔法の変数はローカルで常にリセットされるし...。(蓄積されない) このコードはテスト用で、EAがこのようなループで注文を作成することはありません。テストに含めるべきではないロジックがあります。魔法はクリアすべきものであり、蓄積される理由はない。そして、ここには理解すべきことは何もありません。2つのネストされたループがあり、その中には数行のコードがあるだけです。 pribludilsa 2021.10.19 21:55 #16875 Nerd Trader #:そうなんです、これが原因でトラブルが絶えないんです。この明確化によって、バグフィックスに費やす時間が何倍にもなることを期待しています。 私も理解するのに時間がかかりました。皮肉なことに、他のユーザーがここに同じことを投稿しているのと同時に、私もそれを理解し始めたのです。正しいコピペをしてから整理して、ループの入力だけ確認して出力を忘れたので、間違って書いてしまったのです。チェック値を強制して、プリンターでコードを確認する。 Nikolay Ivanov 2021.10.19 21:58 #16876 Nerd Trader #:このコードはテスト用で、EAがこのようなループで注文を作成することはなく、このためのロジックがありますが、テスト用に追加するべきではありません。なぜオーダーループがおかしいのか、魔法はリセットされるべきで、たまる理由がない。 1はありません。 for(int i = OrdersTotal()-1; i >= 0 ; i --) もし魔法がそのように設計されているとしたら、論理(全体の設計)に誤りがあることがわかり、それを見つけるためにパズルを解かなければならない......。 Nerd Trader 2021.10.19 22:09 #16877 Nikolay Ivanov #:ノー・ワンもし魔法がそのように設計されているのなら、論理(全体の設計)に誤りがあるのだから、パズルを解いてそれを見つけるしかない......。 これでなければね。しかし、そこでも-1では何も解決しない。なぜエラーになるのですか?magicがオーダー数と同じかそれ以上の場合に与えられる。マジックはゼロにする必要があります、そうでなければ我々はマジック5と6でいくつかの注文を閉じると、新しいものは、最後の注文のマジック、すなわち11から12などよりも高くなります。そして、このようにオーダーがゼロになると、ゼロから比較・反復され、その結果、閉じたもののマジックを持つ新しいオーダー、つまり5と6が生まれる......というわけです。 Nerd Trader 2021.10.19 22:17 #16878 pribludilsa #: 私も理解するのに時間がかかりました。皮肉なことに、ここで他のユーザーが同じことを書き込んでいるのと同時に、私もそれを理解し始めたのです。正しいコピペをしてから整理して、ループの入力だけ確認して出力を忘れたので、間違って書いてしまったのです。チェック値を強制して、プリンターでコードを確認する。 mql4にはまともなデバッガがないのがとても困る。上記ソースの実データでも、デバッガがループに入らない。プリントでやりくりしていますが、深刻ではありません。 Nikolay Ivanov 2021.10.19 22:18 #16879 基本的にはシンプルで、あなたのユニークは、異なるマジシャン間のミスマッチな注文をすべてまとめる...というものです。 例えば、3つの注文がある場合 最初の反復でmagic=1unique=0、反復の終わりでunique=2に なる。 2回目の反復でmagik=2unique=2、反復終了時にuniqueは=3に なる 3>=全注文の数なので、whileループは壊れますが...。そして魔法=3は確認されなかった...。だから、魔法はまた2であり、すべてにおいてそうである。 Artyom Trishkin 2021.10.19 22:26 #16880 pribludilsa #: そうなんですか、ありがとうございます。しかし、それは松葉づえ であることがわかった。mqlの 件と同じですね。 より多くの、すべてのプログラミング 言語を目指します。 単純なことです。プログラミング言語では、カウントはゼロから始まります。配列の最初のセルのインデックスは0になります。したがって、それを含むゼロの前に逆ループを行う必要があります。すなわち >=0 OrdersTotal()は、例えば10と出力します。そして、配列の最後のインデックスが9であるのに対して、10からループを開始します(ゼロから開始することをお忘れですか)。また、存在しない配列セルにアクセスした場合はどうなるのでしょうか?その通りです。配列の限界を超えて、メモリの未割り当て領域に入って しまったため、プログラムはクリティカルエラーでクラッシュします。 これは確かにしっかりした松葉杖 です。読めば、学べば、すべてが見えてくる。 1...168116821683168416851686168716881689169016911692169316941695...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ややこしいかもしれませんが、コードを見ていただくとわかりやすいと思います。
つまり、フォームの便利なところは、項目をいくつも与えることで、ある配列を埋めることができることです。ArrayResizeはポジションの数に関連しているため、0が供給されるとすべてがクラッシュします。そのため、ポジション数が0以上の場合は、このループに入るという条件を追加しています。私もいつもそれで失敗しているので、今、改めて確認しました。そうしないと、フォルテは配列の0番目の要素を埋めることができないので、このアドバイスは正しいです。
そうなんです、これが原因でトラブルが絶えないんです。この明確化によって、バグフィックスに費やす時間が何倍にもなることを期待しています。
では、科学者の皆さん、なぜマジックは2で止まり、ユニークは止まらないのか、説明してください。ソースコードでは、10個のオーダーを開き、それぞれにユニークなマジックをインクリメントして割り当てます。そのユニークさは、入れ子ループで比較(!=)することでチェックします。複雑すぎてよくわかりませんが、コードを見ればわかりやすいと思います。
異なる魔導師で10個のオーダーを作るループが必要なら、それはそれでいいんじゃないでしょうか。
この場合、私はループをコントロールするだけでなく、オーダーのマジシャンという役割も担っています。
しかし、あなたの例では、多くのエラーがあり、一種のパズルのようなものが出来上がってしまっています。その理由は何なのか、徹底的に調べる人は少ないだろうが...。
まあ、少なくともオーダーループはおかしいんだけど...。しかも魔法の変数はローカルで常にリセットされるし...。(蓄積されない)
異なる魔導師で10個のオーダーを作るループが必要なら、それはそれでいいんじゃないでしょうか。
この場合、私はループをコントロールするだけでなく、オーダーのマジシャンという役割も担っています。
しかし、あなたの例では、多くのエラーがあり、一種のパズルのようなものが出来上がってしまっています。その理由は何なのか、徹底的に調べる人は少ないだろうが...。
まあ、少なくともオーダーループはおかしいんだけど...。しかも魔法の変数はローカルで常にリセットされるし...。(蓄積されない)
このコードはテスト用で、EAがこのようなループで注文を作成することはありません。テストに含めるべきではないロジックがあります。魔法はクリアすべきものであり、蓄積される理由はない。そして、ここには理解すべきことは何もありません。2つのネストされたループがあり、その中には数行のコードがあるだけです。
そうなんです、これが原因でトラブルが絶えないんです。この明確化によって、バグフィックスに費やす時間が何倍にもなることを期待しています。
このコードはテスト用で、EAがこのようなループで注文を作成することはなく、このためのロジックがありますが、テスト用に追加するべきではありません。なぜオーダーループがおかしいのか、魔法はリセットされるべきで、たまる理由がない。
1はありません。
もし魔法がそのように設計されているとしたら、論理(全体の設計)に誤りがあることがわかり、それを見つけるためにパズルを解かなければならない......。
ノー・ワン
もし魔法がそのように設計されているのなら、論理(全体の設計)に誤りがあるのだから、パズルを解いてそれを見つけるしかない......。
これでなければね。しかし、そこでも-1では何も解決しない。なぜエラーになるのですか?magicがオーダー数と同じかそれ以上の場合に与えられる。マジックはゼロにする必要があります、そうでなければ我々はマジック5と6でいくつかの注文を閉じると、新しいものは、最後の注文のマジック、すなわち11から12などよりも高くなります。そして、このようにオーダーがゼロになると、ゼロから比較・反復され、その結果、閉じたもののマジックを持つ新しいオーダー、つまり5と6が生まれる......というわけです。
私も理解するのに時間がかかりました。皮肉なことに、ここで他のユーザーが同じことを書き込んでいるのと同時に、私もそれを理解し始めたのです。正しいコピペをしてから整理して、ループの入力だけ確認して出力を忘れたので、間違って書いてしまったのです。チェック値を強制して、プリンターでコードを確認する。
基本的にはシンプルで、あなたのユニークは、異なるマジシャン間のミスマッチな注文をすべてまとめる...というものです。
例えば、3つの注文がある場合
最初の反復でmagic=1unique=0、反復の終わりでunique=2に なる。
2回目の反復でmagik=2unique=2、反復終了時にuniqueは=3に なる
3>=全注文の数なので、whileループは壊れますが...。そして魔法=3は確認されなかった...。だから、魔法はまた2であり、すべてにおいてそうである。
そうなんですか、ありがとうございます。しかし、それは松葉づえ であることがわかった。mqlの 件と同じですね。
より多くの、すべてのプログラミング 言語を目指します。
単純なことです。プログラミング言語では、カウントはゼロから始まります。配列の最初のセルのインデックスは0になります。したがって、それを含むゼロの前に逆ループを行う必要があります。すなわち >=0
OrdersTotal()は、例えば10と出力します。そして、配列の最後のインデックスが9であるのに対して、10からループを開始します(ゼロから開始することをお忘れですか)。また、存在しない配列セルにアクセスした場合はどうなるのでしょうか?その通りです。配列の限界を超えて、メモリの未割り当て領域に入って しまったため、プログラムはクリティカルエラーでクラッシュします。
これは確かにしっかりした松葉杖 です。読めば、学べば、すべてが見えてくる。