Прошу помощи! Почему ордеры не всегда закрываются

 
Советник торгует по ценам открытия на четырехчасовом графике. На одном баре происходит если продажа то закрытие бай ордеров, если покупка то закрытие селл ордеров. С открытием проблем нету, но закрытие срабатывает не всегда. Вот блок закрытия:


//================Закрытие позиций=====================================
//----------------------------------------------------------------------
for ( int v = OrdersTotal() - 1; v >= 0; v -- ) {
if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
//-----------------------------------------------------
if (OrderType() == OP_BUY) {
if( Y<0 && OrderProfit( ) >=0) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); // закрываем позицию

} }
//--------------------------------------------------------
if (OrderType() == OP_SELL) {
if( Y>0 && OrderProfit( ) >=0) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // закрываем позицию
} }



Может надо что-то добавить в коде, что бы советник на текущем баре закрывал позиции до победного!?
 

В первую очередь надо добавить вывод в журнал любых ошибок, которые могут происходить во время торговых операций. Анализ журнала поможет Вам разобраться с причинами.

 
api >>:

В первую очередь надо добавить вывод в журнал любых ошибок, которые могут происходить во время торговых операций. Анализ журнала поможет Вам разобраться с причинами.


как это корректно прописать, никогда с этим не сталкивался, с нуля советники не писал правил готовый шаблон
 
Наверно потому, что проскальзывание всего в три пункта. На быстром рынке да ещё и при медленном сервере ДЦ скорее всего возвращается реквот. К тому же у данного кода нарушена парность скобок. Посмотрите на ввертикальные линии приложенного скриншота. Это Ваш код.

 
drknn >>:
Наверно потому, что проскальзывание всего в три пункта. На быстром рынке да ещё и при медленном сервере ДЦ скорее всего возвращается реквот. К тому же у данного кода нарушена парность скобок. Посмотрите на ввертикальные линии приложенного скриншота. Это Ваш код.




Да нет, с парностью все нормально, просто не все скопировал, в большинстве случаев все же закрывает, только процентов 5 не закрывает. А вот на счет проскальзывания наверное вы правы, что-то я не подумал попробую сделать до 5. Спасибо
 
drknn >>:
Наверно потому, что проскальзывание всего в три пункта. На быстром рынке да ещё и при медленном сервере ДЦ скорее всего возвращается реквот. К тому же у данного кода нарушена парность скобок. Посмотрите на ввертикальные линии приложенного скриншота. Это Ваш код.




А если добавить команду sleep к примеру:

if(ticket > 0){
Print("Ошибка закрытия ордера SELL #", GetLastError());
Sleep(10000);

это будет работать?
 
 
starjj >>:


А если добавить команду sleep к примеру:

if(ticket > 0){
Print("Ошибка закрытия ордера SELL #", GetLastError());
Sleep(10000);

это будет работать?


Лучше так:

if(!OrderClose(TicketBuy,Lot,PR,Proskalz,CLR_NONE)){
	Print("Ошибка № ",GetLastError()," при сбросе лотов Бай-ордера в блоке сброса лотов.");
}
 

Не забудьте нормализацию добавить - сразу попустит....

Причина обращения: