Именно по стоп лоссу или в закрытый в убытке тоже пойдет ?
В том то и дело, что надо именно по стоп лоссу. Не могу найти такой функции.
ldd:
В том то и дело, что надо именно по стоп лоссу. Не могу найти такой функции.
В том то и дело, что надо именно по стоп лоссу. Не могу найти такой функции.
https://www.mql5.com/ru/forum/131859/page4#434229
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.05.2008 | //| Описание : Возвращает флаг закрытия последней позиции по стопу. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) { datetime t; double ocp, osl; int dg, i, j=-1, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo(sy, MODE_DIGITS); if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; ocp=NormalizeDouble(OrderClosePrice(), dg); osl=NormalizeDouble(OrderStopLoss(), dg); if (ocp==osl) return(True); } return(False); }
Только "Полезные функции от KimIV". - MQL4 форум
- www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
Но обратите внимание что на новых счетах типа ECN NDD STP будет работать через раз, так как часто закрывается с проскальзованием и разницы в последней цифре пятизнака будет достаточно, чтобы функция не заметила закрытие по стопу. Для тестера норм пойдет, для демо и реала сейчас есть более хитрые решения.
Спасибо. Буду разбираться. Нужен для реала.
Нашёл вот ещё что
if (StringFind(OrderComment(),"[sl",0)>=0)
{
}
В этом коде будет смысл?
Да, сервер дополняет строку [sl] , надо отбор делать по коменту в ордере с этой припиской. Так будет работать 100%. Насчет вашего кода незнаю. Можно функцию что выше изменить чтобы она не сравнивала цену закрытия и цену стоп лосса, а проверяла если приписка в каменте ордера.
Kino:
Да, сервер дополняет строку [sl] , надо отбор делать по коменту в ордере с этой припиской. Так будет работать 100%. Насчет вашего кода незнаю. Можно функцию что выше изменить чтобы она не сравнивала цену закрытия и цену стоп лосса, а сравнивала если приписка в каменте ордера.
Да, сервер дополняет строку [sl] , надо отбор делать по коменту в ордере с этой припиской. Так будет работать 100%. Насчет вашего кода незнаю. Можно функцию что выше изменить чтобы она не сравнивала цену закрытия и цену стоп лосса, а сравнивала если приписка в каменте ордера.
Думаю сравнение по приписки в коменте ордера более надёжный способ чем по цене.
А больше никаких вариантов нет? Получается терминал прямой информации о закрытие по стоп лоссу не даёт?
Попробую реализовать по коменту.
Не надо по комменту, это ненадежно.
Просто вместо вот этой строки:
if (ocp==osl) return(True);
сделайте разделение по типу позиции и проверку не на равенство, а <= (для бай) или >= (для селл):
if ( (OrderType() == OP_BUY && osl - ocp > -DBL_EPSILON) || (OrderType() == OP_SELL && ocp - osl > -DBL_EPSILON) ) return(true);
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте. Помогите пожалуйста.
Вопрос такой: как в эксперте для МТ4 узнать что ордер закрыт по стоп лоссу?
Т.е нужно программно понять что ордер закрыт по стоп лоссу, чтобы в последствие выполнить некое условие.