Закрытие сделки

 
Здравствуйте. Подскажите, с помощью какой функции закрыть сделки? Сделка открывается на пересечении двух МА и закрывается на подаче сигнала другого пересечения.
 
Anna_89:
Здравствуйте. Подскажите, с помощью какой функции закрыть сделки? Сделка открывается на пересечении двух МА и закрывается на подаче сигнала другого пересечения.
OrderSelect(SellTicket,SELECT_BY_TICKET);
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlippage,Red);
можно так, где SellTicket - тикет открытого ордера
 
Daniil Stolnikov:
можно так, где SellTicket - тикет открытого ордера
Спасибо. Буду пробовать.
 
Anna_89:

может неправильно прописала закрытие. Выдает ошибку: OrderClose error 4051. Помогите исправить.

 


Вместо SellTicket подставьте Ord1 - для продажи. Для покупки - Ord2 и вместо Ask подставляете Bid в ClosePrice
 
Daniil Stolnikov:
Вместо SellTicket подставьте Ord1 - для продажи. Для покупки - Ord2 и вместо Ask подставляете Bid в ClosePrice
Спасибо за подсказку. Щас попробую.
 

У вас в коде ошибочка даже не ошибочка а огромная ОШИБКА. Выбираете ордер с тикетом равным ноль, а такого тикета однозначно нет и условие будет всегда выполнятся.

//==================================================================+
//                    Условия и Открытие Ордеров.                   |
//==================================================================+

  ?????    if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False) ??????????
      {
         if(TekBar==Bars)return(0);
         TekBar=Bars;
          {
            if(MA1<MA3 && MA2>MA4)                                                 // Условия продажи
            {
             Ord1=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"",Magic,0,clrRed);     // Продажа
            }
            if(MA1>MA3 && MA2<MA4) 
            {
             Ord2=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"",Magic,0,clrGreen);    // Покупка
            }
          }
       } 

 И еще. Зачем у логического выражения делать лишнюю проверку ==false достаточно просто написать 

if(!OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
.......
} 
 
Vitalii Ananev:

У вас в коде ошибочка даже не ошибочка а огромная ОШИБКА. Выбираете ордер с тикетом равным ноль, а такого тикета однозначно нет и условие будет всегда выполнятся.

 И еще. Зачем у логического выражения делать лишнюю проверку ==false достаточно просто написать 

Не по тикету идёт выбор здесь, а по индексу. Хотя там есть ошибки. Просто нет времени расписывать их. Например - после выбора по тикету обязательно нужно посмотреть время закрытия, чтобы понять в рынке ордер, или уже закрыт. Для не закрытого ордера время закрытия должно быть 0. Проверки такой нету.
 
Artyom Trishkin:
Не по тикету идёт выбор здесь, а по индексу. Хотя там есть ошибки. Просто нет времени расписывать их. Например - после выбора по тикету обязательно нужно посмотреть время закрытия, чтобы понять в рынке ордер, или уже закрыт. Для не закрытого ордера время закрытия должно быть 0. Проверки такой нету.
Да, в торопях писал сразу не обратил внимание на SELECT_BY_POS. 
Причина обращения: