Два отложенных ордера

 

Добрый день уважаемые форумчане снова к вам и снова с глупыми вопросами). Проблема в том что у меня не получается открыть два отложенных ордера ну с разным TP помогите пожалуйста

 

Пробуем сначала открыть ордер, а потом OrderModify() на нужный TP.

Если не помогает - код в студию... 

 
extern int Ords = 100;          // баев и сэллов (считаем отдельно) разрешаем по стока штук иметь
extern int TP = 60;           // тейк ордеров
extern int Cena = 30;         // расстояние от цены
extern double Lots = 0.1;     // лот
extern double PROSADKA = 0.5; // когда эквити равно или менее вот такой части от баланса

int mag, M;
double buy_OPEN, sell_OPEN;

int start()
  {
 int buy = 0,sell = 0;
 int buystop = 0,sellstop = 0;
 int buys = 0, sells = 0;
 int Total = 0, Total.b =0, Total.s =0;
  for(int i = 0; i < OrdersTotal(); i ++) //проверка ордеров
    {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if(OrderMagicNumber() != mag) continue;
     Total ++;
     
     if(OrderType() == OP_BUYSTOP)
     buystop = OrderTicket();
     Total.b++;
    
                              
     if(OrderType() == OP_BUYSTOP || OrderType() == OP_BUY)   
     buys ++;
                           
       
    }
 
  int LET = 0;
  if (AccountEquity()/AccountBalance() < PROSADKA)
  LET = 1;  // если просадки до фига - запрет на выставление новых отложек  
  // выставление отложек :
  if(LET == 0 && TimeCurrent() && M != iTime(Symbol(),1,0)) // раз в минуту
    {  
          
     if ( buystop < 1 && buys < Ords)
      buy_OPEN = NormalizeDouble(Ask+Cena*Point,Digits);
      buystop = OrderSend(Symbol(),OP_BUYSTOP,Lots,buy_OPEN,3,0,buy_OPEN+TP*Point,NULL,mag,0,Blue);
      
     if ( buystop == 1 && buys < Ords && Total.b < 2)
      buy_OPEN = NormalizeDouble(Ask+(Cena*2)*Point,Digits);
      OrderSend(Symbol(),OP_BUYSTOP,Lots,buy_OPEN,3,0,buy_OPEN+TP*Point,NULL,111,0,Blue);
 
      M = iTime(Symbol(),1,0);
     }
     
      return(0);
  } 
ну он открывает больше чем два
 
if (OrdersTotal()<3) {выставляем отложки и модифицируем ордера на нужный TP}
 
ktest0:

 мне надо открыть две отложки с разными магиками, одна отложка будет тралиться а вторая стоять на местеб тогда это надо делать по магику так что ли?
 
Да и еще код то мой работает все равно не правильно он открывает больше двух отложек как этого избежать???
 
XmaksasX:

 мне надо открыть две отложки с разными магиками, одна отложка будет тралиться а вторая стоять на местеб тогда это надо делать по магику так что ли?

Можно и так.
 
Ребят ну подскажите
 
т.е. выставить у меня их получается ну не два их выставляется гораздо больше(((
 
XmaksasX:
Ребят ну подскажите
Так в чем проблема? Правильно. Можно и по магику выбрать, и по комментарию.  Фишка в том, что при срабатывания отложки ордер становится рыночным. ( тип  OP_BY или OP_SELL). Делайте перебор по рыночным ордерам с выбором ордеров по определенному Вами заданному магику и тральте на здоровье как душа пожелает.
 

Да нет Вы не поняли мне надо было выставить сразу две отложки в разном месте с разным ТР вот как сделал

extern int Ords = 100;          // баев и сэллов (считаем отдельно) разрешаем по стока штук иметь
extern int TP = 60;           // тейк ордеров
extern int Cena = 10;         // расстояние от цены
extern double Lots = 0.1;     // лот
extern double PROSADKA = 0.5; // когда эквити равно или менее вот такой части от баланса

int mag, M;
double buy_OPEN, sell_OPEN;

int start()
{
 int buy = 0,sell = 0;
 int buystop = 0,sellstop = 0;
 int buys = 0, sells = 0;
 int Total = 0, Total.b =1, Total.s =1;
 
  for(int i = 0; i < OrdersTotal(); i ++) //проверка ордеров
    {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if(OrderMagicNumber() != mag) continue;
     Total ++;
     
     if(OrderType() == OP_BUYSTOP)
     {
     buystop  = OrderTicket();
     Total.b++;
     }                         
     if(OrderType() == OP_BUYSTOP || OrderType() == OP_BUY)   
     buys ++;
     
 int LET = 0;
  if (AccountEquity()/AccountBalance() < PROSADKA)
  LET = 1;  // если просадки до фига - запрет на выставление новых отложек   
   
  // выставление отложек :
  if(LET == 0 && TimeCurrent() && M != iTime(Symbol(),1,0)) // раз в минуту
    {  
      if ( buystop < 1 && buys < Ords) 
         {
             buy_OPEN = NormalizeDouble(Ask+Cena*Point,Digits);
             buystop = OrderSend(Symbol(),OP_BUYSTOP,Lots,buy_OPEN,3,0,buy_OPEN+TP*Point,NULL,mag,0,Blue);
          }
     if ( Total.b < 2) 
         {
             buy_OPEN = NormalizeDouble(Ask+(Cena*2)*Point,Digits);
             OrderSend(Symbol(),OP_BUYSTOP,Lots,buy_OPEN,3,0,buy_OPEN+TP*Point,NULL,111,0,Blue);
          }
      M = iTime(Symbol(),1,0);
     }   
  
     return(0);
  }
Причина обращения: