Потому что if(OrderClosePrice()==OrderStopLoss()) - не правда.
2015.06.26 15:13:04 | buy | 0.02 | eurusd | 1.1167 | 1.1117 | 1.1217 | 2015.06.29 00:00:02 | 1.0987 | 0.00 | 0.00 | 0.00 | -36.00 |
Как видно ордер был открыт 2015.06.26 15:13:04, а закрылся 2015.06.29 00:00:02 т.е. был открыт в пятницу потом прошли выходные и он закрылся в понедельник.
из файла 20150629.log
00:59:54.484 : order # buy 0.02 EURUSD at 1.1167 closed due stop-loss at price 1.0987
Следующий ордер который открылся в понедельник т.е. сегодня
00:59:55.359 : instant order buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038
00:59:57.359 : order was opened : # buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038
при этом должен был измениться лот открывшегося ордера советником, но этого не произошло. С понедельника по пятницу советник отработал идеально.
код выборки из истории
попробуйте сравнивать цену открытия и закрытия, потому как сравнивать по стоплоссу и закрытию - крайне не верно, часто закрытие идет с проскальзыванием.
if(OrderType()==OP_BUY && (OrderClosePrice()-OrderOpenPrice())<0); if(OrderType()==OP_SELL && (OrderOpenPrice()-OrderClosePrice())<0) ;
попробуйте сравнивать цену открытия и закрытия, потому как сравнивать по стоплоссу и закрытию - крайне не верно, часто закрытие идет с проскальзыванием.
Чуть не так.
Закрытие по СЛ должно определяться вот так:
if ( (OrderType() == OP_BUY && OrderStopLoss() - OrderClosePrice() > -DBL_EPSILON) || (OrderType() == OP_SELL && OrderClosePrice() - OrderStopLoss() > -DBL_EPSILON) )
чет-то я засомневался, что если по СЛ закроется, то OrderClosePrice() не равен OrderStopLoss()
если по ТП закроется, то OrderClosePrice() не равен OrderTakeProfit()
проверил по истории, если закрылись по СЛ то , OrderClosePrice() == OrderStopLoss(), если по ТП то OrderClosePrice() == OrderTakeProfit()
чет-то я засомневался, что если по СЛ закроется, то OrderClosePrice() не равен OrderStopLoss()
если по ТП закроется, то OrderClosePrice() не равен OrderTakeProfit()
проверил по истории, если закрылись по СЛ то , OrderClosePrice() == OrderStopLoss(), если по ТП то OrderClosePrice() == OrderTakeProfit()
Попробуйте проверить историю на ECN-счетах. Будете удивлены.
Далеко не всегда есть цена, соответствующая заявленному ТР или SL. В итоге рыночный ордер будет закрыт по действующей рыночной цене, а не по заявленной. Проскальзывание называется. ))
Попробуйте проверить историю на ECN-счетах. Будете удивлены.
Далеко не всегда есть цена, соответствующая заявленному ТР или SL. В итоге рыночный ордер будет закрыт по действующей рыночной цене, а не по заявленной. Проскальзывание называется. ))
мне это понятно, а понятно ли это вашему терминалу?
купили по 1,5; ТП поставили 1,6 ; Бид зацепил 1,6; ECNсчет + проскальзывание + расширенный спред, закрылись по цене 1,597, что будет написано в терминале? OrderClosePrice() = 1,597 OrderTakeProfit()=1,6??? OrderComment()= "тп"
терминал должен закрыть позицию по событию ТП, если OrderClosePrice() = 1,597 не равен OrderTakeProfit()=1,6 -----> значит события ТП не было , почему закрылись?
терминал закрыл позицию по событию ТП OrderClosePrice() = 1,597 ; равен OrderTakeProfit() = 1,597 ; OrderComment()= "тп"
Чуть не так.
Закрытие по СЛ должно определяться вот так:
по OrderComment()= [tp]
А вот фиг.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как видно ордер был открыт 2015.06.26 15:13:04, а закрылся 2015.06.29 00:00:02 т.е. был открыт в пятницу потом прошли выходные и он закрылся в понедельник.
из файла 20150629.log
00:59:54.484 : order # buy 0.02 EURUSD at 1.1167 closed due stop-loss at price 1.0987
Следующий ордер который открылся в понедельник т.е. сегодня
00:59:57.359 : order was opened : # buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038
при этом должен был измениться лот открывшегося ордера советником, но этого не произошло. С понедельника по пятницу советник отработал идеально.
код выборки из истории