EAが買い注文と売り注文を混在させる - ページ 3 123 新しいコメント Simon Gniadkowski 2011.07.05 21:46 #21 WHRoeder: int OrderType = OrderType() はOKではなく、一方が他方を隠している可能性があります(ローカル宣言はエラーなしでグローバルを隠します。) Try int orderType = OrderType() 元のコードは、... ... ... ... int orderType; for(cnt = total-1; cnt >= 0; cnt--) { while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);} orderType = OrderType(); .これは事実上、あなたが提案しているものと同じですね? 私はdvarrinが 彼の問題は彼のチケット番号にあると言って いると思います。 削除済み 2011.07.05 22:22 #22 ということはありません。 ループの外側で宣言したOrderTypeは、効果的に次のCycleに転送され、たとえエラーが発生しても、その値は次の条件に入ることになります。 ループ内で宣言し、OrderType()の値を即座に設定すれば、このようなエラーは発生しないでしょう。 (OPさんの問題ではないかもしれませんが、他の問題を防ぐことができるかもしれません) 試さずにどうするのでしょうか? また、スリープで0.5秒はちょっとやりすぎです。whileループは10ミリ秒のスリープタイマーで問題ないはずで、CPU負荷に何ら影響を与えません(まあ、ほとんど:P)。 dvarrin 2011.07.05 23:23 #23 forexCoder: ということはありません。 ループの外側で宣言したOrderTypeは、次のCycleに効率的に転送され、たとえエラーが発生しても、その値は次の条件に入ることになります。 ループ内で宣言し、OrderType()の値を即座に設定すれば、このようなエラーは発生しないでしょう。 (OPさんの問題ではないかもしれませんが、他の問題を防ぐことができるかもしれません) 試さずにどうするのでしょうか? また、スリープで0.5秒はちょっとやりすぎです。whileループは10ミリ秒のスリープタイマーで問題ないはずで、CPU負荷に何の影響もありません(まあ、ほとんど:P)。 EAのフォワードテスト時に「手動で確認する」を使っているのが問題なのではないかと思っているのですが、具体的にどうなっているのかがわかりません。 ただ、OrderTypeという変数が同名のメソッドに干渉することはありえないということと、宣言の位置は私の問題とは関係ない、ということだけは分かっています。 問題は、OrderSelect()を使用した 後、OrderTicket()、OrderStoploss()、・・・が同じ注文のデータを与えないことです。 ローカル変数を使用し、OrderSelect()を呼び出した後にそれらを設定すると動作しますが、OrderTicket()やOrderStoploss()を直接使用すると、間違った値を与えてしまうのです。 なぜ私のコードでは、OrderStopLoss() が "for" ループの同じ反復の中で他の注文のストップロスを返しているのですか? dvarrin 2011.07.05 23:49 #24 以下は、EAの完全なコードです。問題はupdateFbOrders()メソッドの最初の "for "ループにあります。テストするために、私はチャート上にアリゲーターとフラクタルインジケーターを追加し、最後の上昇フラクタルがアリゲーターラインの上にあり、最後の下降フラクタルがアリゲーターラインの下にあるチャートを探します。そうすると、保留中の買い注文と売り注文が作成されるはずです。もし、いずれかのフラクタルがブレイクアウトしたならば、即座に注文を出す。そして、フラクタルが変化するたびに各注文のストップロスを修正しますが、間違った注文のストップロスをセットしてしまいます。 アラートウィンドウを確認し、以下のようなメッセージを探してみてください。Count:1 買い注文のストップロス1.41008000。46454014 orderType:そして、46454014という注文を確認すると、それは実際には「売り」注文であることがわかります。そして、ストップロスが変化しなくても注文を修正し続けるのですが、これはストップロスのレベルを間違えて いるためです。 ファイル: dv_ordermgmt_chaos4_light.mq4 30 kb 削除済み 2011.07.05 23:55 #25 これはバカだ。コード全体を貼り付けているわけではないんですね。 あなたが持っているのは areBuyOrdersInProfitAt 関数が ありますが、これは内部には見えませんので、それを貼り付けてください。今までのところ、どこかでミスをしている可能性が高いです。OrderSelect関数を他の場所で使っていませんか? また、longSLとshortSLの変数はどこに設定されていますか?その部分のコードも貼り付けてください。 EDIT: 私がタイプしている間に貼り付けてくれたので、今新しい投稿を見ています。 dvarrin 2011.07.05 23:58 #26 forexCoder: これはバカだ。コード全体を貼り付けているわけではないんですね。 あなたが持っているのは areBuyOrdersInProfitAt 関数がありますが、これは内部には見えませんので、それを貼り付けてください。今までのところ、どこかでミスをしている可能性が高いです。OrderSelect関数を他の場所で使っていませんか? また、longSLとshortSLの変数はどこに設定されていますか?その部分のコードも貼り付けてください。 EDIT: 私がタイプしている間に貼り付けてくれたので、今新しい投稿を見ます。 こんにちは、forexCoderさん 前の投稿にEAを追加しました。 しかし、あなたが問題を指摘したと思います:私は "areBuyOrdersInProfitAt "メソッドでOrderSelect()を使って います :-)))))))))))))))))))))))))))))))))))))))))。 削除済み 2011.07.06 00:01 #27 はい、思ったとおりです。 areBuyOrdersInProfitAtには別のOrderSelect関数が入っていて、元のスニペットのものがやっていることを上書きしているのです。このareBuyOrdersInProfitAt関数が戻ってくると、OrderSelectが変更され、チケットも変更されます。この場合、常にリストの最後のオーダーをここで取得する必要があります。 削除済み 2011.07.06 00:03 #28 いったんOrderSelectを forループで使い 始めると、すべての注文を通過するため、その中に別のOrderSelect forループを作らない方がよいでしょう。 あなたはかなり長いコードを持っているので、私はそれを修正する気があまりありません(sry:P)しかし、あなたは今、正しい方向へのポインタを得ました。 Simon Gniadkowski 2011.07.06 00:15 #29 dvarrin: しかし、あなたが問題を指摘したと思います:私は "areBuyOrdersInProfitAt "メソッドでOrderSelect()を使っています :-))))))))))))))))))))))))))))))))))))))。 解決に近づいているようでよかったです :-) dvarrin 2011.07.06 07:48 #30 RaptorUK: 解決に向かっているようでなによりです :-) 皆さん、本当にありがとうございました。本当に私がしたことは愚かなミスでした :-( 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
int OrderType = OrderType() はOKではなく、一方が他方を隠している可能性があります(ローカル宣言はエラーなしでグローバルを隠します。) Try
int orderType = OrderType()
元のコードは、... ... ... ...
.これは事実上、あなたが提案しているものと同じですね?
私はdvarrinが 彼の問題は彼のチケット番号にあると言って いると思います。
ということはありません。
ループの外側で宣言したOrderTypeは、効果的に次のCycleに転送され、たとえエラーが発生しても、その値は次の条件に入ることになります。
ループ内で宣言し、OrderType()の値を即座に設定すれば、このようなエラーは発生しないでしょう。
(OPさんの問題ではないかもしれませんが、他の問題を防ぐことができるかもしれません) 試さずにどうするのでしょうか?
また、スリープで0.5秒はちょっとやりすぎです。whileループは10ミリ秒のスリープタイマーで問題ないはずで、CPU負荷に何ら影響を与えません(まあ、ほとんど:P)。
ということはありません。
ループの外側で宣言したOrderTypeは、次のCycleに効率的に転送され、たとえエラーが発生しても、その値は次の条件に入ることになります。
ループ内で宣言し、OrderType()の値を即座に設定すれば、このようなエラーは発生しないでしょう。
(OPさんの問題ではないかもしれませんが、他の問題を防ぐことができるかもしれません) 試さずにどうするのでしょうか?
また、スリープで0.5秒はちょっとやりすぎです。whileループは10ミリ秒のスリープタイマーで問題ないはずで、CPU負荷に何の影響もありません(まあ、ほとんど:P)。
EAのフォワードテスト時に「手動で確認する」を使っているのが問題なのではないかと思っているのですが、具体的にどうなっているのかがわかりません。
ただ、OrderTypeという変数が同名のメソッドに干渉することはありえないということと、宣言の位置は私の問題とは関係ない、ということだけは分かっています。
問題は、OrderSelect()を使用した 後、OrderTicket()、OrderStoploss()、・・・が同じ注文のデータを与えないことです。
ローカル変数を使用し、OrderSelect()を呼び出した後にそれらを設定すると動作しますが、OrderTicket()やOrderStoploss()を直接使用すると、間違った値を与えてしまうのです。
なぜ私のコードでは、OrderStopLoss() が "for" ループの同じ反復の中で他の注文のストップロスを返しているのですか?
以下は、EAの完全なコードです。
問題はupdateFbOrders()メソッドの最初の "for "ループにあります。
テストするために、私はチャート上にアリゲーターとフラクタルインジケーターを追加し、最後の上昇フラクタルがアリゲーターラインの上にあり、最後の下降フラクタルがアリゲーターラインの下にあるチャートを探します。
そうすると、保留中の買い注文と売り注文が作成されるはずです。もし、いずれかのフラクタルがブレイクアウトしたならば、即座に注文を出す。
そして、フラクタルが変化するたびに各注文のストップロスを修正しますが、間違った注文のストップロスをセットしてしまいます。
アラートウィンドウを確認し、以下のようなメッセージを探してみてください。Count:1 買い注文のストップロス1.41008000。46454014 orderType:そして、46454014という注文を確認すると、それは実際には「売り」注文であることがわかります。そして、ストップロスが変化しなくても注文を修正し続けるのですが、これはストップロスのレベルを間違えて いるためです。これはバカだ。コード全体を貼り付けているわけではないんですね。
あなたが持っているのは
areBuyOrdersInProfitAt
関数が ありますが、これは内部には見えませんので、それを貼り付けてください。今までのところ、どこかでミスをしている可能性が高いです。OrderSelect関数を他の場所で使っていませんか?
また、longSLとshortSLの変数はどこに設定されていますか?その部分のコードも貼り付けてください。
EDIT: 私がタイプしている間に貼り付けてくれたので、今新しい投稿を見ています。
これはバカだ。コード全体を貼り付けているわけではないんですね。
あなたが持っているのは
areBuyOrdersInProfitAt
関数がありますが、これは内部には見えませんので、それを貼り付けてください。今までのところ、どこかでミスをしている可能性が高いです。OrderSelect関数を他の場所で使っていませんか?
また、longSLとshortSLの変数はどこに設定されていますか?その部分のコードも貼り付けてください。
EDIT: 私がタイプしている間に貼り付けてくれたので、今新しい投稿を見ます。
こんにちは、forexCoderさん
前の投稿にEAを追加しました。
しかし、あなたが問題を指摘したと思います:私は "areBuyOrdersInProfitAt "メソッドでOrderSelect()を使って います :-)))))))))))))))))))))))))))))))))))))))))。
はい、思ったとおりです。
areBuyOrdersInProfitAtには別のOrderSelect関数が入っていて、元のスニペットのものがやっていることを上書きしているのです。このareBuyOrdersInProfitAt関数が戻ってくると、OrderSelectが変更され、チケットも変更されます。この場合、常にリストの最後のオーダーをここで取得する必要があります。
いったんOrderSelectを forループで使い 始めると、すべての注文を通過するため、その中に別のOrderSelect forループを作らない方がよいでしょう。
あなたはかなり長いコードを持っているので、私はそれを修正する気があまりありません(sry:P)しかし、あなたは今、正しい方向へのポインタを得ました。
しかし、あなたが問題を指摘したと思います:私は "areBuyOrdersInProfitAt "メソッドでOrderSelect()を使っています :-))))))))))))))))))))))))))))))))))))))。
解決に向かっているようでなによりです :-)