Pending Orders Loop

 

Hi,can you please explain to me how I can do the following:

When a pending order is hit(turned into a market order),how to place another pending order in a fixed pip range away from it?

for an example,if a buystop is hit,place a sellstop order 20 pips below it,when the sellstop is hit place a buystop 20 pips above it,and so on.

I've been struggling with it the whole day,if you can help,it would be of great help,thank you.

 
OrderSelect loop, find the open order, Get the OrderOpenPrice, open another.
 
OrderSelect loop, find the open order, Get the OrderOpenPrice, open another.

Thank you for your reply,WHRoeder.

Maybe you have a simpler version of this,because its very "messy"(no offense intended).

 

This is what I wrote,but it doesn't seem to open orders,please advise.

Only the first pending order is placed, but it doesnt repeat..

void Loop()
{
  for(int s=OrdersTotal()-1;s>=0;s--)
  {
    if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber()==9)
        if(OrderSymbol()==Symbol())
          if(OrderType()==OP_SELL && InitSwitch == true)
          {
            InitPrice = OrderOpenPrice();
            InitSwitch = false;
            sell_loop = true;
            OrderSend(Symbol(),OP_BUYSTOP,0.20,Ask+20*Poin,3,0,0,NULL,9,0,Green);
          }
  }
  
  for(int b=OrdersTotal()-1;b>=0;b--)
  {
    if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber()==9)
        if(OrderSymbol()==Symbol())
          if(OrderType()==OP_BUY && InitSwitch == true)
          {
            InitPrice = OrderOpenPrice();
            InitSwitch = false;
            buy_loop = true;
            OrderSend(Symbol(),OP_SELLSTOP,0.20,Bid-20*Poin,3,0,0,NULL,9,0,Red);
          }

  }
  
  for(int spo=OrdersTotal()-1;spo>=0;spo--)
  {
    if(OrderSelect(spo,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber()==9)
        if(OrderSymbol()==Symbol())
          if(OrderType()==OP_SELLSTOP)
          {
            SPOTarget = OrderOpenPrice();
            buy_loop_target = InitPrice-SPOTarget;
            double CurrentBIDe = MarketInfo(Symbol(),MODE_BID);
            if(CurrentBIDe<SPOTarget && buy_loop==true)
            {
              buy_loop = false;
              sell_loop = true;
              OrderSend(Symbol(),OP_BUYSTOP,0.20,Ask+buy_loop_target,3,0,0,NULL,9,0,Green);
            }
          }        
  }
  
  for(int bpo=OrdersTotal()-1;bpo>=0;bpo--)
  {
    if(OrderSelect(bpo,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber()==9)
        if(OrderSymbol()==Symbol())
          if(OrderType()==OP_BUYSTOP)
          {
            BPOTarget = OrderOpenPrice();
            sell_loop_target = BPOTarget-InitPrice;
            double CurrentASKe = MarketInfo(Symbol(),MODE_ASK);
            if(CurrentASKe>BPOTarget && sell_loop==true)
            {
              sell_loop = false;
              buy_loop = true;
              OrderSend(Symbol(),OP_SELLSTOP,0.20,Bid-sell_loop_target,3,0,0,NULL,9,0,Green);
            }
          }  
  }
}
 
Redael777:

This is what I wrote,but it doesn't seem to open orders,please advise.

Only the first pending order is placed, but it doesnt repeat..


why do you wanna open new trades before you have checked all your open trades ??

use one loop to check all open trades of your EA and you be able to know if you have to open new one

 

How do I stop this broken loop of opening buystops and sellstops without end,and only have 1 sellstop or 1 buystop until its hit and the oposite is placed..Please help.

void orderloop()
{
  for(int s=OrdersTotal()-1;s>=0;s--)
  {
    if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber()==9)
        if(OrderSymbol()==Symbol())
          if(OrderType()==OP_SELL && InitSwitch == true)
          {
            InitSwitch = false;
            sell_loop = true;
            OrderSend(Symbol(),OP_BUYSTOP,0.20,Ask+20*Poin,3,0,0,NULL,9,0,Green);
          }
          else if(OrderType()==OP_BUY && sell_loop == true)
          {
            sell_loop = false;
            buy_loop = true;
            OrderSend(Symbol(),OP_SELLSTOP,0.20,Bid-20*Poin,3,0,0,NULL,9,0,Red);
          }
  }
  
  for(int b=OrdersTotal()-1;b>=0;b--)
  {
    if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber()==9)
        if(OrderSymbol()==Symbol())
          if(OrderType()==OP_BUY && InitSwitch == true)
          {
            InitSwitch = false;
            buy_loop = true;
            OrderSend(Symbol(),OP_SELLSTOP,0.20,Bid-20*Poin,3,0,0,NULL,9,0,Red);
          }
          else if(OrderType()==OP_SELL && buy_loop == true)
          {
            buy_loop = false;
            sell_loop = true;
            OrderSend(Symbol(),OP_BUYSTOP,0.20,Ask+20*Poin,3,0,0,NULL,9,0,Green);
          }
  }
}
 
Redael777: How do I stop this broken loop of opening buystops and sellstops without end,and only have 1 sellstop or 1 buystop until its hit and the oposite is placed..Please help.
Why didn't do do what deVries suggested?
 
maybe you could give an example,it seems that i dont understand
 
Can someone help me or not? Give some examples maybe?
 
Redael777:
Can someone help me or not? Give some examples maybe?
There is example code here: Loops and Closing or Deleting Orders it doesn't do exactly what you want but the principles are the same, read it, understand it and learn.
Reason: