Ordermodify error - compare double?

 

can someone show me what needs to be changed to get the following code working? I'm having 2 pending orders, which need to be modified (with magicnumber 222 and 333). When a green line on the chart is moving, it needs to adjust the openprice, TP and SL on the pending orders. Here is what i have done, but is giving me many error 130, and sometimes error 1:

void CheckPending()
{
   int total = OrdersTotal();
   for (int cnt = 0 ; cnt < total ; cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==OP_SELLSTOP&& OrderMagicNumber()==111) {
      ready=0;
      if (OrderOpenPrice()!=HalfTopLine) OrderModify(OrderTicket(),HalfTopLine,TopLine,TopGoldLine,0,Red);}
      if(OrderType()==OP_BUYSTOP&& OrderMagicNumber()==111) {
      ready=0;
      if (OrderOpenPrice()!=HalfBottomLine) OrderModify(OrderTicket(),HalfBottomLine,BottomLine,BottomGoldLine,0,Blue);}
      
      if(OrderType()==OP_BUYSTOP&& OrderMagicNumber()==222) {
      readyp=0; 
      if (OrderOpenPrice()!=TopGreenLine) OrderModify(OrderTicket(),TopGreenLine,MiddleWhiteLine,TopGoldLine,0,Blue);}
      //other try? if (NormalizeDouble(OrderOpenPrice(),Digits)!=NormalizeDouble(TopGreenLine,Digits)) OrderModify(OrderTicket(),TopGreenLine,MiddleWhiteLine,TopGoldLine,0,Blue);}
      if(OrderType()==OP_SELLSTOP&& OrderMagicNumber()==333) {
      readyp=0;
      if (OrderOpenPrice()!=BottomGreenLine) OrderModify(OrderTicket(),BottomGreenLine,MiddleWhiteLine,TopGoldLine,0,Red);}
      //other try? if (NormalizeDouble(OrderOpenPrice(),Digits)!=NormalizeDouble(BottomGreenLine,Digits)) OrderModify(OrderTicket(),BottomGreenLine,MiddleWhiteLine,TopGoldLine,0,Red);}
   }
}
 

Can't move the open price closer to market than MarketInfo(Symbol(), MODE_STOPLEVEL)*Point

I couldn't get pending orders to work with TP/SL (Use zero and set TP/SL once order opens)

always test return codes, allow EA to run on multiple pairs.

for (int pos = OrdersTotal()-1; pos >= 0; pos--) if(
   OrderSelect(pos, SELECT_BY_POS)
&& OrderSymbol() == Symbol()){
 
WHRoeder:

Can't move the open price closer to market than MarketInfo(Symbol(), MODE_STOPLEVEL)*Point

I couldn't get pending orders to work with TP/SL (Use zero and set TP/SL once order opens)

always test return codes, allow EA to run on multiple pairs.


sorry, dont really understand what you're saying. i just found this for OrderModify: "Notes: Open price and expiration time can be changed only for pending orders." So i should only change Openprice for the pending order(s) and fill TP/SL with 0, then modify the 0 when trade opens, right?
 

OK i changed my code to this, it that right?:

void CheckOrders()
{
   int total = OrdersTotal();
   for (int cnt = 0 ; cnt < total ; cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      //ORDER ACTIONS
      if(OrderType()==OP_SELL&& OrderMagicNumber()==111) 
      {
         ready111=0;
         if (OrderStopLoss()!=TopLine) OrderModify(OrderTicket(),0,TopLine,TopGoldLine,0,Red);
      }
      if(OrderType()==OP_BUY&& OrderMagicNumber()==222) 
      {
         ready222=0;
         if (OrderStopLoss()!=BottomLine) OrderModify(OrderTicket(),0,BottomLine,BottomGoldLine,0,Blue);
      }
      if(OrderType()==OP_BUY&& OrderMagicNumber()==333) 
      {
         ready333=0;
         if (OrderStopLoss()!=MiddleWhiteLine) OrderModify(OrderTicket(),0,MiddleWhiteLine,TopGoldLine,0,Blue);
      }
      if(OrderType()==OP_SELL&& OrderMagicNumber()==444) 
      {
         ready444=0;
         if (OrderStopLoss()!=MiddleWhiteLine) OrderModify(OrderTicket(),0,MiddleWhiteLine,BottomGoldLine,0,Red);
      }
      
      //PENDING ORDER ACTIONS
      if(OrderType()==OP_BUYSTOP&& OrderMagicNumber()==333) 
      {
         ready333=0;
         if (OrderOpenPrice()!=TopGreenLine) OrderModify(OrderTicket(),TopGreenLine,0,0,0,Blue);
      }
      if(OrderType()==OP_SELLSTOP&& OrderMagicNumber()==444) 
      {
         ready444=0;
         if (OrderOpenPrice()!=BottomGreenLine) OrderModify(OrderTicket(),BottomGreenLine,0,0,0,Red);
      }
   }
}

but first few times, i does ordermodify correctly, but then suddenly it keeps opening pending buystops? what's wrong with this code?

//CENTERLINE ORDER

if (Ask>=MiddleWhiteLine && Bid<=MiddleWhiteLine&& ready333==1&& ready444==1) {

entryw1 = TopGreenLine;

TPw1 = TopGoldLine;

SLw1 = MiddleWhiteLine;

entryw2 = BottomGreenLine;

TPw2 = BottomGoldLine;

SLw2 = MiddleWhiteLine;

Print("Pending GSPE Orders placed");

OrderSend(Symbol(),OP_BUYSTOP,lots,entryw1,100,SLw1,TPw1,NULL,333,0,Blue);

OrderSend(Symbol(),OP_SELLSTOP,lots,entryw2,100,SLw2,TPw2,NULL,444,0,Red);

}

//END CENTERLINE ORDER

 
if(!OrdersTotal()){
   if (Ask>=MiddleWhiteLine && Bid<=MiddleWhiteLine&& ready333==1&& ready444==1) {
      entryw1 = TopGreenLine; 
      TPw1 = TopGoldLine;
      SLw1 = MiddleWhiteLine;
      entryw2 = BottomGreenLine;
      TPw2 = BottomGoldLine;
      SLw2 = MiddleWhiteLine;
      Print("Pending GSPE Orders placed");
      OrderSend(Symbol(),OP_BUYSTOP,lots,entryw1,100,SLw1,TPw1,NULL,333,0,Blue);
      OrderSend(Symbol(),OP_SELLSTOP,lots,entryw2,100,SLw2,TPw2,NULL,444,0,Red);
   }
}

You need to stop the EA from opening orders on each new tick. The above example is one way of doing it. It simply checks if orders are = 0 and if so then it is ok to open orders. If any orders exist, it will by-pass the order opening.

This is a crude way of doing it since it assumes yours is the only EA running. A better way would be to set up a function that counts your open orders taking magic number and symbols into account and returns that count. Anyway, I am sure you get the idea.......

 

it should not matter if it checks every tick for existing orders like i had, but just to test, i changed it with the orderstotal - but same stuff happens. 2 pendings are created, then a few times the pendings are modified, then many modifyerror 1 (but its no problem...), and then it continues to open new BUYSTOPS (no SELLSTOPS....), so somewhere the must be something wrong with the ready333 variable i suppose..

Reason: