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

 
deVries:


同じpipの売りと買いの取引でStopLossを変更するようにしたいですか?

もしそれがあなたの望むことで、なぜそのように修正されないのかを理解できるのであれば、もう一度考えてみてください...。

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

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

現時点では、両方の取引でTakeProfitだけを変更し、StopLossは取引全体を通して同じにしたいのです(現在のテストでは、とにかく)。
 

OK、問題が見つかりました ... ... スプレッドはポイントの数として返されます ... ...

だから、これらの行を変更します ... ...

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))

をこれに変更します.

if(OrderTakeProfit() > Candle23Open + ((Spread - TakeProfitModified + 1 ) * Point)  )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + ((Spread - TakeProfitModified) * Point) , 0, Blue))
 
RaptorUK:

OK、問題が見つかりました ... ...スプレッドがポイント数として返される ... ...

だから、これらの行を変更する .. .

をこれに変更します.

それはそれが動作するようになります、ありがとうございます買い取引と売り取引の両方が修正されるようになりましたが、何らかの理由で取引中に数回修正され、テイクプロフィットが 入力が必要とするものよりも遠くに行くことがあるようです。これは2時や7時のような全体の時間に起こるようです。なぜこのようなことが起こるのかよく分かりませんが、ひょっとしてスプレッドが常に変化していることと関係があるのでしょうか?買いと売りの両方の取引で起こるので、スプレッドが原因ではないと思っています。唯一考えられるのは、23:00のローソク足が変化しているように見えることですが、それでは意味がありませんし、どのようにテストしたらよいのかもわかりません。

 
あちこちにPrint文を追加して、変数が何をしているかを表示させれば、何が間違っているのかがわかり、それを修正することができます。
 

これを使おうとしています。

Print(Open [iBarShift(NULL, 0, StrToTime("23:00") )]);

バーのオープン価格が 変更されるかどうかを確認するために、しかし、それは毎回ランダムな時間を印刷しているようです。

また、ある日の取引は、何が起こっているかに関係なく22:59に取引を終了するクローズオールルールに従わないことに気づきました、私はこれが動作しなくなったと思います。

私はこれを使っています

   if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); }

とこれ

void CloseAll()
   {
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderMagicNumber()!=MagicNumber) continue;
         
      //
      //
      //
      //
      //
         
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {
         for(int c=0; c<3; c++)
            {
            RefreshRates();
            if (OrderType()==OP_BUY)
                  { double cp = Bid;}  
            else  {        cp = Ask;}
               
            OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow);
            int err=GetLastError();
            if(err==4 || err==136 || err==137 || err==138 || err==146)
               {
               Sleep(5000); continue;
               }  
               break;                     
            }
            break;

指定した時刻に取引を終了させるため。

 

大文字で書かれた投稿が削除 されました。

大文字を多用した投稿は、怒鳴り声とみなされ、大変失礼にあたりますので、おやめください。