Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Язык MQL5 поддерживает технологию OpenCL. Попробуй сам!
а
77
а 2010.11.15 14:01 
 void Send_BUYLIMIT(double Lot,double cena)
{
if ( OrdersTotal()==0  ) OrderSend(Symbol(),OP_BUY,0.01,Ask,10,0,Bid+10*Point);
if (OrderType()==OP_BUY && OrdersTotal()<=4)OrderSend(Symbol(),OP_BUYLIMIT,Lot,cena,10,0,cena+tp*Point,0,123,0,Blue);
 
}
   return(0);


Как сделать чтобы, открылся бай и установилось 4 отложенных ордера байлимит? Итого 5 ордеров, 1 рыночный, а 4 отложники. В чем тут ошибка?
Игорь
157
Игорь 2010.11.15 14:30  

Взгляните на эту команду:

OrderSend(Symbol(),OP_BUY,0.01,Ask,10,0,Bid+10*Point);

Если у вас слипаж 10 пунктов, то имеем черырехзнак, когда:

1. Объем 0.01 может не поддерживаться типом вашего счета. Смотрим значение MODE_MINLOT для MarketInfo().

2. Фиксированное значение 10п для тейкпрофита, может оказаться меньше чем MODE_STOPLEVEL.

Ну и типично для бай-счетов тейкпрофит выставляется от Ask, а не Bid.

а
77
а 2010.11.15 14:40  

Да нет, ордера выставляет.

Нужно чтобы было всего 5 ордеров, не больше и не меньше, если меньше 5 то удалить все ордера к чертям!

Игорь
157
Игорь 2010.11.15 14:47  
_SS_:

Да нет, ордера выставляет.

Нужно чтобы было всего 5 ордеров, не больше и не меньше, если меньше 5 то удалить все ордера к чертям!

По тому куску кода, что вы привели больше комментировать нечего. Либо выкладывайте все, либо ищете ошибку самостоятельно.
Andrey F. Zelinsky
31051
Andrey F. Zelinsky 2010.11.15 14:48  
_SS_:


Как сделать чтобы, открылся бай и установилось 4 отложенных ордера байлимит? Итого 5 ордеров, 1 рыночный, а 4 отложники. В чем тут ошибка?

не понятно, что вам надо: найти ошибки в вашей функции? либо найти ошибки в вашем советнике, который не окрывает ордера?
а
77
а 2010.11.15 14:59  
  int SecondBuy ()

  {
  }
 void Send_BUYLIMIT(double Lot,double cena)
{
if ( OrdersTotal()==0  ) OrderSend(Symbol(),OP_BUY,0.01,Ask,10,0,Bid+10*Point);

  
 if   (  OrderType()==OP_BUY && OrdersTotal()<=5)OrderSend(Symbol(),OP_BUYLIMIT,Lot,cena,10,0,cena+tp*Point,0,123,0,Blue);
 
 
}

   return(0);
  
  int DeletAll ()
    {
   
if (OrdersTotal()!=5   )DeletAll ();
   
    for (int i=OrdersTotal()-1; i>=0; i--)
   {

      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket());
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
      if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());
      if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());
       if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),2);
      if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),2);
   }
   }
    
   
    
     return(0);
    
Должно быть открыть 5 ордеров, если их меньше 5 то удалить все. Вызов функций каждый тик. Советник выставляет ордера, но если один закрывается, то опять выставляеться ордер,а надо удалить все ордера.
Vladyslav Goshkov
2051
Vladyslav Goshkov 2010.11.15 15:39  

_SS_:

int SecondBuy ()

  {
  }
 void Send_BUYLIMIT(double Lot,double cena)
{
if ( OrdersTotal()==0  ) OrderSend(Symbol(),OP_BUY,0.01,Ask,10,0,Bid+10*Point);

  
 if   (  OrderType()==OP_BUY && OrdersTotal()<=5)OrderSend(Symbol(),OP_BUYLIMIT,Lot,cena,10,0,cena+tp*Point,0,123,0,Blue);
 
 
}

   return(0);
  
  int DeletAll ()
    {
   
if (OrdersTotal()!=5   )DeletAll ();
   
    for (int i=OrdersTotal()-1; i>=0; i--)
   {

      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket());
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
      if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());
      if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());
       if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),2);
      if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),2);
   }
   }
    
   
    
     return(0);
    

Должно быть открыть 5 ордеров, если их меньше 5 то удалить все. Вызов функций каждый тик. Советник выставляет ордера, но если один закрывается, то опять выставляеться ордер,а надо удалить все ордера.
По этому куску кода - не должно. К тому же у Вас бесконечная рекурсия - при вызове DeletAll() и при отсутствии 5 ордеров
а
77
а 2010.11.15 16:02  
и как быть?
Vladyslav Goshkov
2051
Vladyslav Goshkov 2010.11.15 16:21  
_SS_:
и как быть?

Так Вам же сказали :

 

По тому куску кода, что вы привели больше комментировать нечего. Либо выкладывайте все, 
либо ищете ошибку самостоятельно.

К этому куску кода это тоже относится .... И кому оно надо - за Вас догадываться ?????????????

а
77
а 2010.11.15 16:24  
а че тут выкладывать, вот 2 функции и все.
Vladyslav Goshkov
2051
Vladyslav Goshkov 2010.11.15 16:27  
_SS_:
а че тут выкладывать, вот 2 функции и все.

Так они вообще не должны работать.... и стало быть обсуждать нечего.

Как минимум вызов начинается с функции start(){....} ... если это не понято - все остальное бессмысленно.

Удачи.

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий