Нужна помощь в СКРИПТЕ

 

Здравствуйте!!! Помогите написать скрипт. Ордер открыт. Нужно его закрыть на 5 п. от цены открытия. Профит и Лосс ставится только минимум 10 пунктов. Как быть?

 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0);

         OrderClose(OrderTicket(),OrderLots(),Bid+5*Point,3,Violet); 
         return(0);
Вот так у меня получилось, но что-то не выходит....где может быть ошибка???
 
slayer:

Здравствуйте!!! Помогите написать скрипт. Ордер открыт. Нужно его закрыть на 5 п. от цены открытия. Профит и Лосс ставится только минимум 10 пунктов. Как быть?

Алгоритм такой:

Закрывать позицию по профиту

OrderSelect

OrderProfit

OrderClose

Вам в помощь... ;)))

 
      for(int n1=OrdersTotal() - 1;n1>=0;n1--) //  
      {
      if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
      if(OrderSymbol()!=Symbol())continue;
      {
      if(OrderType()==OP_BUY && OrderProfit()>=5*Point )OrderClose(OrderTicket(),OrderLots(),Bid,20,Red);
      if(OrderType()==OP_SELL && OrderProfit()>=5*Point )OrderClose(OrderTicket(),OrderLots(),Ask,20,Red);
      }}
пробуй так должно работать.
 
zhuki:
      for(int n1=OrdersTotal() - 1;n1>=0;n1--) //  
      {
      if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
      if(OrderSymbol()!=Symbol())continue;
      {
      if(OrderType()==OP_BUY && OrderProfit()>=5*Point )OrderClose(OrderTicket(),OrderLots(),Bid,20,Red);
      if(OrderType()==OP_SELL && OrderProfit()>=5*Point )OrderClose(OrderTicket(),OrderLots(),Ask,20,Red);
      }}
пробуй так должно работать.

Не должно, OrderProfit() используется неправильно

 
zhuki:
      for(int n1=OrdersTotal() - 1;n1>=0;n1--) //  
      {
      if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
      if(OrderSymbol()!=Symbol())continue;
      {
      if(OrderType()==OP_BUY && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Bid,20,Red);
      if(OrderType()==OP_SELL && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Ask,20,Red);
      }}

Терь все получится...

 
kharko:
zhuki:
      for(int n1=OrdersTotal() - 1;n1>=0;n1--) //  
      {
      if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
      if(OrderSymbol()!=Symbol())continue;
      {
      if(OrderType()==OP_BUY && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Bid,20,Red);
      if(OrderType()==OP_SELL && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Ask,20,Red);
      }}

Терь все получится...

Еше круче...) Ну что, кто сделает еще попытку? P

 
Figar0:
kharko:
zhuki:
      for(int n1=OrdersTotal() - 1;n1>=0;n1--) //  
      {
      if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
      if(OrderSymbol()!=Symbol())continue;
      {
      if(OrderType()==OP_BUY && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Bid,20,Red);
      if(OrderType()==OP_SELL && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Ask,20,Red);
      }}

Терь все получится...

Еше круче...) Ну что, кто сделает еще попытку? P

Лень писать - проверка разницы между текущей ценой и ценой открытия ордера даст желаемый результат.

Да, если это для реальной торговли, то желательно еще проверить магик, а также  нужно проверять еще результат работы ОдерКлозе и не обязательно столько раз вызывать ОрдерТайп.

Успехов.

 
VladislavVG:
Figar0:
kharko:
zhuki:
      for(int n1=OrdersTotal() - 1;n1>=0;n1--) //  
      {
      if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
      if(OrderSymbol()!=Symbol())continue;
      {
      if(OrderType()==OP_BUY && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Bid,20,Red);
      if(OrderType()==OP_SELL && OrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*Point )OrderClose(OrderTicket(),OrderLots(),Ask,20,Red);
      }}

Терь все получится...

Еше круче...) Ну что, кто сделает еще попытку? P

Лень писать - проверка разницы между текущей ценой и ценой открытия ордера даст желаемый результат.

Да, если это для реальной торговли, то желательно еще проверить магик, а также нужно проверять еще результат работы ОдерКлозе и не обязательно столько раз вызывать ОрдерТайп.

Успехов.

Блин, че то не работает!!!!! (((

 
slayer:

Блин, че то не работает!!!!! (((

А что там может не работать ? Выкладывайте код функции, тот, что сами написали - будет полезнее так разобраться. 

Успехов.

 
slayer:

Блин, че то не работает!!!!! (((

      for(int n1=OrdersTotal() - 1;n1>=0;n1--)
      {
        if(OrderSelect(n1,SELECT_BY_POS,MODE_TRADES)==false)    continue;
        if(OrderSymbol()!=Symbol()) continue;
        {
          if(OrderOrderProfit()>=MarketInfo(Symbol(),MODE_TICKVALUE)*5*OrderLots()) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Red);
        }
      }
Все ленивые никто и не подскажет) А так?
Причина обращения: