Не могу понять что в нём не так. В тестере работает правильно, а на демо вообще в отказ. Прошу помочь с кодом.
А, закрытие по цене OrderClosePrice(),стало нормой?
Понаблюдайте чему равны Ticket1, 2, 3 перед вызовом OrderClose().
Здравствуйте Дмитрий! Через принт проверил - всё нормально. Тикеты ловит, но по закрытию выдаёт:
2014.02.01 16:33:44 2014.01.10 16:45 A4v USDJPY,M15: OrderClose error 138
2014.02.01 16:33:44 2014.01.10 16:45 A4v USDJPY,M15: close #71 sell 0.01 USDJPY at 104.357 at price 104.473
2014.02.01 16:33:44 2014.01.10 16:45 A4v USDJPY,M15: close #72 sell 0.02 USDJPY at 104.881 at price 104.473
2014.02.01 16:33:44 2014.01.10 16:45 A4v USDJPY,M15: Ticket1 : 72 Ticket2 : 71 Ticket3 : 73
понятно,что цена могла поменяться для этого и указал OrderClosePrice().
А, закрытие по цене OrderClosePrice(),стало нормой?
Ааа. Понял. 138 - реквот.
OrderClosePrice() - это цена закрытия последнего выделенного ордера, но не того, который закрываете. Надо сначала выделить ордер по тикету, если удалоссь выделить, то OrderClose() с OrderClosePrice().
Ааа. Понял. 138 - реквот.
OrderClosePrice() - это цена закрытия последнего выделенного ордера, но не того, который закрываете. Надо сначала выделить ордер по тикету, если удалоссь выделить, то OrderClose() с OrderClosePrice().
Что-то типо этого?!
if((Pr1+Pr2+Pr3)>0 && Lot1>0 && Lot2>0) {
if (OrderSelect( Ticket 1, SELECT_BY_POS, MODE_TRADES)) { OrderClose(Ticket1,Lot1,OrderClosePrice(),30,Red); }
if (OrderSelect( Ticket 2, SELECT_BY_POS, MODE_TRADES)) { OrderClose(Ticket2,Lot2,OrderClosePrice(),30,Red); }
if (OrderSelect( Ticket 3, SELECT_BY_POS, MODE_TRADES)) { OrderClose(Ticket3,Lot3,OrderClosePrice(),30,Red); }
}
Что-то типо этого?!
if((Pr1+Pr2+Pr3)>0 && Lot1>0 && Lot2>0) {
if (OrderSelect( Ticket 1, SELECT_BY_POS, MODE_TRADES)) { OrderClose(Ticket1,Lot1,OrderClosePrice(),30,Red); }
if (OrderSelect( Ticket 2, SELECT_BY_POS, MODE_TRADES)) { OrderClose(Ticket2,Lot2,OrderClosePrice(),30,Red); }
if (OrderSelect( Ticket 3, SELECT_BY_POS, MODE_TRADES)) { OrderClose(Ticket3,Lot3,OrderClosePrice(),30,Red); }
}
Да. Но всеравно получается ненадежная функция.
В лучшем бы случае сначала собрать данные об ордерах (получить тикеты), потому первую часть (цикл) не выполнять, а пытаться выполнять закрытия. Если закрытие выполнено - обнулить переменную Ticket. После того как все ордера закрыты, снова выполняется начальный цикл.
Первая часть: получение тикетов подлежащих закрытию.
Вторая часть - закрытие. Здесь еще для надежности проверять, не является ли ордер закрытым, потому-что вдруг вручную закроете.
Большое спасибо! Буду делать и обязательно отпишусь что получилось.
и ещё грамм сомнения: может Select через SELECT_BY_TICKET ?
и ещё грамм сомнения: может Select через SELECT_BY_TICKET ?
Не заметил. Конечно через SELECT_BY_TICKET
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не могу понять что в нём не так. В тестере работает правильно, а на демо вообще в отказ. Прошу помочь с кодом.