Здравствуйте. Подскажите, с помощью какой функции закрыть сделки? Сделка открывается на пересечении двух МА и закрывается на подаче сигнала другого пересечения.
- Закрытие ордера
- Блокировка других открытых ордеров до следующего сигнала
- MQL4. Уровень и МА
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 - тикет открытого ордера
Спасибо. Буду пробовать.
можно так, где SellTicket - тикет открытого ордера
Anna_89:
Вместо SellTicket подставьте Ord1 - для продажи. Для покупки - Ord2 и вместо Ask подставляете Bid в ClosePrice
может неправильно прописала закрытие. Выдает ошибку: OrderClose error 4051. Помогите исправить.
Daniil Stolnikov:
Вместо SellTicket подставьте Ord1 - для продажи. Для покупки - Ord2 и вместо Ask подставляете Bid в ClosePrice
Спасибо за подсказку. Щас попробую.
Вместо 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:
Не по тикету идёт выбор здесь, а по индексу. Хотя там есть ошибки. Просто нет времени расписывать их. Например - после выбора по тикету обязательно нужно посмотреть время закрытия, чтобы понять в рынке ордер, или уже закрыт. Для не закрытого ордера время закрытия должно быть 0. Проверки такой нету.
У вас в коде ошибочка даже не ошибочка а огромная ОШИБКА. Выбираете ордер с тикетом равным ноль, а такого тикета однозначно нет и условие будет всегда выполнятся.
И еще. Зачем у логического выражения делать лишнюю проверку ==false достаточно просто написать
Artyom Trishkin:
Не по тикету идёт выбор здесь, а по индексу. Хотя там есть ошибки. Просто нет времени расписывать их. Например - после выбора по тикету обязательно нужно посмотреть время закрытия, чтобы понять в рынке ордер, или уже закрыт. Для не закрытого ордера время закрытия должно быть 0. Проверки такой нету.
Да, в торопях писал сразу не обратил внимание на SELECT_BY_POS.
Не по тикету идёт выбор здесь, а по индексу. Хотя там есть ошибки. Просто нет времени расписывать их. Например - после выбора по тикету обязательно нужно посмотреть время закрытия, чтобы понять в рынке ордер, или уже закрыт. Для не закрытого ордера время закрытия должно быть 0. Проверки такой нету.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь