EAに必要な簡単なコード(2つのオープンオーダーの修正) - ページ 4

 

これは、数回前の私の返信から ... ... 最も簡単な方法です ... ....

"私は特定の時間、具体的には23:00 GMT+2だと思いますが、2つの 保留 中の注文を 設定しました。どちらの注文も23:00のローソク足のオープンから同じ距離、この場合は14ピップス離れています。両方ともTakeProfitが28ピップ(この場合)、StopLossが55ピップ です。

23:00のローソク足を参照することで、元のTPがどこにあったかを計算 することができます。

 

これを試してみてください ... ... コンパイルはできますが、Strategy Testerでは まだ試していません ... ....

ファイル:
madmax.mq4  10 kb
 
RaptorUK:

これを試してみてください ... ... コンパイルはできますが、Strategy Testerではまだ試していません ... ....

SLとTPは正しいようだし、OrderSendも前のコードと同じようにレイアウトされているのに、なぜか'OrderSenderror 130'と表示されます。なぜこのようなことが起こるのでしょうか?

私はコードのこの部分を取りました

   int CountOpenOrders = 0;
   double Candle23Open; 
   int Spread = MarketInfo(Symbol(), MODE_SPREAD);
   
   Candle23Open = Open[ iBarShift(NULL, 0, StrToTime("23:00") ) ]; // price value of the Open of the 23:00 hour candle
   
   for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
      {
      if(OrderSelect(iPos,SELECT_BY_POS) && 
         OrderMagicNumber() == MagicNumber &&
         OrderSymbol() == Symbol() &&
         OrderType() < 2               //  less than 2 is either OP_BUY (0) or OP_SELL (1) 
         )
      CountOpenOrders++;
      } // end of for(int iPos  

   if(CountOpenOrders == 2)  //  we have 2 open orders,  should we modify or have the already been modified ?
      {
      for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
         {
         if(OrderSelect(iPos,SELECT_BY_POS) && 
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol() 
            )
            {
            if(OrderType() == 1)               //  OP_SELL (1)  
               {
               if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
               }
            
            if(OrderType() == 0)               //  OP_BUY (0)
               {
               if(OrderTakeProfit() < Candle23Open + ((TakeProfitModified - 1) * Point) )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + (TakeProfitModified * Point), 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

この部分を取ってきて、前のEA(オリジナルのもの)に入れたところ、注文は開くのですが、変更されません。しかし、あなたが提供したEAでOrderSendのエラーが修正されれば、うまくいくかもしれないと思います。

それと、この部分に

if(!OrderModify

は何のためにあるのでしょうか?

ありがとうございました。

madmax3

 
madmax3:


ああ、この部分にも。

は何のためにあるのでしょうか?

ありがとうございました。

マッドマックス3

OrderModify()のドキュメントを確認 しましたか? 何を返すのでしょうか?
 
madmax3:

SLやTPは正しいようだし、「OrderSend」も前のコードと多少同じようにレイアウトされているのに、なぜか「OrderSend error 130」が出てしまいます。なぜこのようなことが起こるのでしょうか?

5桁のブローカーを考慮し、TPとSLを調整しましたか? あなたのブローカーは5桁のブローカーですか?
 

変数(askとbidの距離)を記入し損ねただけで、動くようになりました。OrderModifyのドキュメントには、!は説明されていないと思います。
コードはうまく動作しているように見えますが、1つの問題は、2つの取引が開いているときに買い取引のみを変更し、買い取引と売り取引の両方を変更しないことです。任意のアイデアはなぜですか?

ありがとうございます。

madmax3

 
madmax3:

私はそれを動作させることができましたが、変数(アスクとビッドの距離)を記入するのを失念していました。OrderModifyのドキュメントには、この!私は信じています。
コードはうまく動作しているように見えますが、1つの問題は、2つの取引が開いているときに買い取引だけを修正し、買い取引と売り取引の両方を修正しないことです。

ありがとうございます。

madmax3

OrderModifyはboolを返します ... ... boolとの関係では、! はNOTです ... ... だから、!OrderModify()は、... ... を意味します。もし、OrderModifyがfalseを返したら、つまり失敗したらという意味です。

私はあなたのコードをもう一度見てみます。あるいは、私のコードに変更を加えてみてください。

 
madmax3:

変数(askとbidの距離)の記入をミスっただけで、動くようになった。OrderModifyのドキュメントには、この「!」の説明はありません。と思っています。
コードはうまく動作しているように見えますが、1つの問題は、2つの取引が開いているときに買い取引のみを修正し、買い取引と売り取引の両方を修正しないことです。任意のアイデアはなぜですか?

ありがとうございます。

マッドマックス3


買いと売りの両方の取引で同じpipでStopLossを変更させたいのでしょうか?

もし、そのようにしたいのであれば、もう一度考えてみてください。

また、正しい方向への新しいポイントごとにトレードを修正しないでください。修正できるようにtrailingstepを選択してください(xxポイントでは、tradecontext too busyエラーの多くを避けるために10以上を選択できます)。

"!"はコーディングにないようなもの

 
madmax3:

コードはうまく動作しているように見えますが、1つの問題は、2つの取引が開いているときに買い取引のみを変更し、買い取引と売り取引の両方を変更しないことです。何かアイデアはありますか?

ログにエラーがないか確認してください ... もしストラテジーテスターで 実行しているならばジャーナルタブを、ライブまたはデモで実行しているならばエキスパートタブを確認してください。 何か見つけたら教えてください ... ...
 
RaptorUK:
ログにエラーがないか確認してください ... Strategy Tester で実行している場合は journal タブを、Live または Demo で実行している場合は experts タブを確認してください。 何か見つけたら教えてください ... ...
2012.04.09 21:21:27 2012.01.17 00:59 Tester: 注文 #1, sell 0.01 EURUSD is opened at 1.26498
2012.04.09 21:21:27 2012.01.17 02:21 Tester: order #2, buy 0.01 EURUSD is opened at 1.26795

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27480 ok

なぜか買いの取引が2回修正されます(2回目の修正は必要なTPに行きますが、いくつかの取引では9時や10時など特定の全体時刻に修正し続けるようです)。