フラクタルブレイクアウトスタック - ページ 3

 

OrderModifyとOrderSelectの両方の関数でパラメータを入れ替えたのですが、効果がありません。

流れは論理的で、すべてのパラメータを再確認しました。


これはバックテスト 中に起こっていることですが、問題ではないはずです。

 
//----------------------------------------------//
//-----------------EXITING ORDERS---------------//


for(int i=OrdersTotal()-1; i>=0;i--)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
    if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;
    double SL=OrderStopLoss();
    bool   result;
    int    error;
    //Different OrderTypes
    if(OrderType()==OP_BUY)
       {
        if(BreakEven > 0) 
          {
           if(Bid - OrderOpenPrice() >= Point * BreakEven * mypoint)  //make input for BreakEven    StopLoss)
              {                                                                   //and don't forget mypoint !!!
               if(OrderStopLoss() < OrderOpenPrice()) 
                 {
                  SL = OrderOpenPrice()+Point;
                 }
              }
          }
       }
    if(OrderType()==OP_SELL)              
       {
         //For you to do
          
              
               
                
               
                  
                   
             
             
       }
    if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);}       
   }

コーディングを読みやすくする

自分の文章との違いを見る この方が読みやすい カウント{{{{{{{{{{}}}}}}}}}}。

 
ZacharyRC:

まだ困っています。原因を探るため、エラーを実施しました。


ジャーナルに報告されました。

1)エラー4051=不正なパラメータ

2) 無効な注文変更用チケット

//----------------------------------------------//
//-----------------EXITING ORDERS---------------//


for(int i=OrdersTotal()-1; i>=0;i--)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


   if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) Print(GetLastError(),i);
   if(OrderType()==OP_BUY)
      {
      if(Move.BE && StopLoss > 0) 
         {
         if(Bid - OrderOpenPrice() >= Point * StopLoss)
            {
            if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) 
               {
               OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
               Print("Cant Modify Order"+GetLastError(),i);
               }
            } 
         }
      }
   else
      {
      if(Move.BE && StopLoss > 0) 
         {
         if(OrderOpenPrice() - Ask >= Point * StopLoss)
            {
            if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo)
               {
               OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
               Print("Cant Modify Order"+GetLastError(),i);
               }
            }
         }
      }
   }

買いの 場合、SLがOpen priceより 上にあるのはなぜですか? OrderOpenPrice() + Point * MoveStopTo

 
deVries:

BUYの場合、OrderOpenPrice()の上にOrderStopLoss()を持つことが可能です。
笑...おっと<赤い顔のスマイリー>。
 
RaptorUK:
笑 ....おっと<赤い顔のスマイリー>。


恥ずかしながら、私の投稿を削除してください
 
ZacharyRC:

まだ困っています。原因を探るため、エラーを実施しました。


ジャーナルは報告した。

1)エラー4051=不正なパラメータ

2) 無効なチケットで注文を変更する

OK、多分あなたのエラーメッセージはスプリアスです.

 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) Print(GetLastError(),i);


               OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
               Print("Cant Modify Order"+GetLastError(),i);

もし、OrderSelect()がうまくいくなら、なぜGetLastError()を呼んでいる のですか? もし、それがエラーを表示するなら、それはOrderSelect()が原因ではないでしょう。

OrderModify()の場合も同じで、もし変更がうまくいってもGetLastError()を呼び出すのですが、なぜですか? 関数が失敗したときだけ呼び出すのです ... ...

            if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo)
               {
               if(!OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red))
                  Print("Cant Modify Order, error# " + GetLastError()," index ", i);
 
deVries:

恥ずかしながら私の投稿を削除してください
いや、私も人間だから間違いはある、それを知られても気にしない:-)
 

あーーーー大好きです。あなたの指摘は両方とも非常に理にかなっています。


{{{{{}}}-同様にもっと簡単です!

エラーは関数が 失敗した場合にのみ呼び出されるべきです。


お二人ともありがとうございました!週末がうまくいくことを願っています。

 
RaptorUK:

買いの 場合、SLがOpen priceより上になるには? OrderOpenPrice() + Point * MoveStopTo


SLは注文の下にあります。



本当に売りのセクションを参照していないのでしょうか?

 else{
 
    if(Move.BE && StopLoss > 0) {
               if(OrderOpenPrice() - Ask >= Point * StopLoss)
                {
                  if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo)
                   {
                  OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
                  Print("Cant Modify Order"+GetLastError(),i);
}
 
RaptorUK:
笑 ....おっと<赤い顔のスマイリー>。

私のミスです。