Eaが複数の同じ保留/制限注文を作成している [Help pls] 。 - ページ 2 1234 新しいコメント 削除済み 2015.11.11 12:34 #11 GumRai: まず第一に、関数を他の関数の内部で宣言しようとしないでください。私は、あなたが投稿したコードを見ただけでは、あなたが何をしようとしているのか理解することができません。だから、私はあなたを助けることができない。GumRaiさん、早速のご回答ありがとうございます。 私のプログラムには、以下のような条件がたくさんあります。P12まで確認しました。これはピボットのようなものです。P1、P2、...と12個あるので、条件を満たせば、そのレベルで指値売買をします。いちいち売り買いのコードを書くのは面倒なのでそのため、buycallとsellcallの関数を 別々に作りました。以下は、私の古い売りコードである。 if( P1 == 1 || P1 ==5 || P1 ==7) { if ( BuyTicket == 0) BuyCall(S0); } if( P2 == 1 || P2 ==5 || P2 ==7) { if ( BuyTicket == 0) BuyCall(S1); } .......................many more int SellCall(double SC) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { if( SellTicket == 0) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,expiration,Red); BuyTicket = 0; // counter tradee // if ( Ask > SellStopLoss && BuyTicket == 0) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { BuyStopLoss = Ask - (StopLoss * CalcPoint1); BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); SellTicket = 0; } } } } return(SellTicket); } 削除済み 2015.11.11 12:43 #12 これがその例です。同じトレードを各ティックに配置する。これを各時間に配置する必要があります。1時間ごとのピボットなので Keith Watford 2015.11.11 13:20 #13 int SellCall(double SC) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { if( SellTicket == 0) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,expiration,Red); BuyTicket = 0; // counter tradee // if ( Ask > SellStopLoss && BuyTicket == 0) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { BuyStopLoss = Ask - (StopLoss * CalcPoint1); BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); SellTicket = 0; } } } } return(SellTicket); }売り 指値をするとき、BuyTicketを0に設定します。次にBuyTicket=0かどうかをチェックします。もちろん、今設定したのですから0です。次にSellTicketを0に設定します。次のティックでは、Sellticket=0なので、売り指値を開き、BuyTicketを再び0に設定します。といった具合に..........................。 削除済み 2015.11.11 13:54 #14 GumRai: 売り指値をするとき、BuyTicketを0に設定します。次にBuyTicket=0かどうかをチェックします。もちろん、今設定したのですから0です。次にSellTicketを0に設定します。次のティックでは、Sellticket=0なので、売り指値を開き、BuyTicketを再び0に設定します。といった具合に..........................。では、ハイライトした2行を削除すればいいのでしょうか。そうしました。2ヶ月のデータのバックテストで、1時間だけの結果を表示しています。もう一つ気づいたのは、私のセルコールでは、買いの逆張りをしていることだ。もし売りがストップアウトしたら、買いのトレードを開始します。今、sellcall関数の ためにそれは(Selltickets)を返すので、それは大丈夫ですか?ありがとうございます。 削除済み 2015.11.12 05:25 #15 int SellCall(double SC) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { if( SellTicket == 0) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,0,Red); // reverse tradee // if ( Ask > SellStopLoss && BuyTicket == 0) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { BuyStopLoss = Ask - (StopLoss * CalcPoint1); BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); } } } } return(SellTicket);このコードで理解したのは、最初にsellticket == 0 をチェックし、yes obviousで売り注文を出し、次にbuyticket == 0 yesで買い注文を出す・・・しかし、戻ると・・・再びsellticket == 0 をチェックし、no its not now・・・だからEaは1セット取って止まったということです。しかし、この問題を取り除くにはどうしたらいいのだろう。私のEAでは、開始時間から59分ごとに非稼働中の注文が削除されます。そのように設定しています。 削除済み 2015.11.14 04:42 #16 現在、以下のようにコードを変更し、すべてのサポートとレジスタンスを読み取るようにしました。私は1時間に最大6つのサポートとレジスタンスを持っています。この6つのうち条件を満たしたものに指値注文を出し、1つでも条件を満たせばそのものに指値注文を出す。これがアルゴだ。ということで、以下のように関数 呼び出しのコードを設定した。int BuyCall( double BC) { if ( BuyTicket >= 0 && BuyTicket <= 5) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,TimeCurrent()+3540,Green); } return(0); } int SellCall(double SC) { if( SellTicket >= 0 && SellTicket <= 5) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,TimeCurrent()+3540,Red); } return(0); }これで1時間実行され、6段階の売買がチェックされる。しかし、実行時間はたったの1時間。完全なデータセットで実行するにはどうしたらいいでしょうか。 Keith Watford 2015.11.14 05:02 #17 if ( BuyTicket >= 0 && BuyTicket <= 5)これはストラテジーテスターでのみ 機能し、最初の6つの注文がオープンされるとそれ以上何もしません。この方法では、テストにチケット番号を使用することはできません。 削除済み 2015.11.14 10:35 #18 GumRai:これはストラテジーテスターでのみ機能し、最初の6つの注文がオープンされるとそれ以上何もしません。この方法では、テスト用のチケット番号を使用することはできません。ご返答ありがとうございます。では、どうすればよいのでしょうか。BuyTicket =>0やBuyTicketの条件を外すと。EAがティック 毎に同じ取引を繰り返しています・・・148のordersendエラーが出ます。 William Roeder 2015.11.16 15:54 #19 cashcube: では、どうすればいいのでしょうか。 前回までの回答 Keith Watford 2015.11.16 22:22 #20 cashcube:ご返信ありがとうございます。では、どうすればいいのでしょうか。BuyTicket =>0やBuyTicketの条件を外すと。148のオーダーエンドエラーが出てしまいます。あなたが何をしようとしているのかわかりません。一度に 1 つのオープントレードしか行わない場合、新しい注文を出す前にオープンオーダーがないことを確認 します。1 つのバーに 1 つの取引しか行わない場合、1 つのバーに 1 回だけテストします。条件の組み合わせが必要な場合は、その組み合わせをテストしてください。 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
まず第一に、関数を他の関数の内部で宣言しようとしないでください。
私は、あなたが投稿したコードを見ただけでは、あなたが何をしようとしているのか理解することができません。だから、私はあなたを助けることができない。
GumRaiさん、早速のご回答ありがとうございます。 私のプログラムには、以下のような条件がたくさんあります。P12まで確認しました。これはピボットのようなものです。P1、P2、...と12個あるので、条件を満たせば、そのレベルで指値売買をします。いちいち売り買いのコードを書くのは面倒なのでそのため、buycallとsellcallの関数を 別々に作りました。以下は、私の古い売りコードである。
これがその例です。同じトレードを各ティックに配置する。これを各時間に配置する必要があります。1時間ごとのピボットなので
売り 指値をするとき、BuyTicketを0に設定します。
次にBuyTicket=0かどうかをチェックします。もちろん、今設定したのですから0です。
次にSellTicketを0に設定します。
次のティックでは、Sellticket=0なので、売り指値を開き、BuyTicketを再び0に設定します。
といった具合に..........................。
売り指値をするとき、BuyTicketを0に設定します。
次にBuyTicket=0かどうかをチェックします。もちろん、今設定したのですから0です。
次にSellTicketを0に設定します。
次のティックでは、Sellticket=0なので、売り指値を開き、BuyTicketを再び0に設定します。
といった具合に..........................。
では、ハイライトした2行を削除すればいいのでしょうか。そうしました。2ヶ月のデータのバックテストで、1時間だけの結果を表示しています。
もう一つ気づいたのは、私のセルコールでは、買いの逆張りをしていることだ。もし売りがストップアウトしたら、買いのトレードを開始します。今、sellcall関数の ためにそれは(Selltickets)を返すので、それは大丈夫ですか?
ありがとうございます。
このコードで理解したのは、最初にsellticket == 0 をチェックし、yes obviousで売り注文を出し、次にbuyticket == 0 yesで買い注文を出す・・・しかし、戻ると・・・再びsellticket == 0 をチェックし、no its not now・・・だからEaは1セット取って止まったということです。しかし、この問題を取り除くにはどうしたらいいのだろう。私のEAでは、開始時間から59分ごとに非稼働中の注文が削除されます。そのように設定しています。
現在、以下のようにコードを変更し、すべてのサポートとレジスタンスを読み取るようにしました。
私は1時間に最大6つのサポートとレジスタンスを持っています。この6つのうち条件を満たしたものに指値注文を出し、1つでも条件を満たせばそのものに指値注文を出す。これがアルゴだ。
ということで、以下のように関数 呼び出しのコードを設定した。
これで1時間実行され、6段階の売買がチェックされる。しかし、実行時間はたったの1時間。完全なデータセットで実行するにはどうしたらいいでしょうか。
これはストラテジーテスターでのみ 機能し、最初の6つの注文がオープンされるとそれ以上何もしません。
この方法では、テストにチケット番号を使用することはできません。
これはストラテジーテスターでのみ機能し、最初の6つの注文がオープンされるとそれ以上何もしません。
この方法では、テスト用のチケット番号を使用することはできません。
ご返答ありがとうございます。
では、どうすればよいのでしょうか。BuyTicket =>0やBuyTicketの条件を外すと。EAがティック 毎に同じ取引を繰り返しています・・・148のordersendエラーが出ます。
ご返信ありがとうございます。
では、どうすればいいのでしょうか。BuyTicket =>0やBuyTicketの条件を外すと。148のオーダーエンドエラーが出てしまいます。
あなたが何をしようとしているのかわかりません。
一度に 1 つのオープントレードしか行わない場合、新しい注文を出す前にオープンオーダーがないことを確認 します。
1 つのバーに 1 つの取引しか行わない場合、1 つのバーに 1 回だけテストします。
条件の組み合わせが必要な場合は、その組み合わせをテストしてください。