Флаг ExpertRemove и неудалившийся ордер

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Reactor555
436
Reactor555  

Добрый день коллеги. Два вопроса.


1. Каким флагом (функцией) проверяется сработавший ExpertRemove()?


2. Кто-нибудь сталкивался с такой проблемой (возникло один раз, хочу понять насколько такое часто происходит) - Поток свободен, OrderDelete() на отложенный ордер вернул true, а ордер не удалился. По журналу ошибка - поток занят. 

Alexey Volchanskiy
27331
Alexey Volchanskiy  
Reactor555:

Добрый день коллеги. Два вопроса.


1. Каким флагом (функцией) проверяется сработавший ExpertRemove()?


2. Кто-нибудь сталкивался с такой проблемой (возникло один раз, хочу понять насколько такое часто происходит) - Поток свободен, OrderDelete() на отложенный ордер вернул true, а ордер не удалился. По журналу ошибка - поток занят. 


Надо что-то в Deinit делать, если есть такая нужда. Например писать флаг в Глобальную переменную терминала через

GlobalVariableSet


Вот из хелпа.

Остановка эксперта не происходит немедленно при вызове функции ExpertRemove(), производится лишь взвод флага для прекращения работы эксперта. Т.е., любое следующее событие эксперт обрабатывать уже не будет, произойдет вызов OnDeinit() и выгрузка с удалением с графика.

Reactor555
436
Reactor555  
Alexey Volchanskiy:

Остановка эксперта не происходит немедленно при вызове функции ExpertRemove(), производится лишь взвод флага для прекращения работы эксперта. Т.е., любое следующее событие эксперт обрабатывать уже не будет, произойдет вызов OnDeinit() и выгрузка с удалением с графика.


Это я читал. Вопрос в том, есть ли у меня доступ к этому флагу.

Alexey Viktorov
27988
Alexey Viktorov  
Reactor555:

Это я читал. Вопрос в том, есть ли у меня доступ к этому флагу.

Просто надо засомневаться, что OrderDelete() вернул true и перед удалением советника проверять всё что надо.

fxsaber
17549
fxsaber  
Reactor555:

1. Каким флагом (функцией) проверяется сработавший ExpertRemove()?

_StopFlag, но есть особенность в MT5 (возможно, и в MT4)

2. Кто-нибудь сталкивался с такой проблемой (возникло один раз, хочу понять насколько такое часто происходит) - Поток свободен, OrderDelete() на отложенный ордер вернул true, а ордер не удалился. По журналу ошибка - поток занят. 

Скорее всего, OrderDelete вернул false. Иначе это очень серьезный баг, о котором еще никто за годы не сообщал.

Reactor555
436
Reactor555  

Скорее всего, OrderDelete вернул false. Иначе это очень серьезный баг, о котором еще никто за годы не сообщал.


bb = OrderDelete( maso [ i ] ); else if ( OrderCloseTime() == nd );

 if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );


Это выдержка из программы. Сообщения об ошибке не было.

Reactor555
436
Reactor555  
fxsaber:

_StopFlag, но есть особенность в MT5 (возможно, и в MT4)


Я вот тоже думал, что он. Но нигде нет конкретного описания, что это именно он. Везде написано "принудительное прерываение программы"... а что это за прерывание не написано.

Alexey Viktorov
27988
Alexey Viktorov  
Reactor555:

Я вот тоже думал, что он. Но нигде нет конкретного описания, что это именно он. Везде написано "принудительное прерываение программы"... а что это за прерывание не написано.

Прерывание может произойти ИСКЛЮЧИТЕЛЬНО ПОСЛЕ того как закончится выполнение события. То-есть если ExpertRemove() вызван из void OnTick(), то эксперт будет удалён с графика после того как выполнение программы дойдёт до последней фигурной скобки или команды return.

Alexey Viktorov
27988
Alexey Viktorov  
Reactor555:

bb = OrderDelete( maso [ i ] );
 else if ( OrderCloseTime() == nd );

 if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );



Это выдержка из программы. Сообщения об ошибке не было.

А где if которому относится else может и не должно было выполняться Alert()???

Reactor555
436
Reactor555  
Alexey Viktorov:

А где if которому относится else может и не должно было выполняться Alert()???


bb = OrderDelete( maso [ i ] ); 

 if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );


извините... случайно вышло...

Andrey Khatimlianskii
57714
Andrey Khatimlianskii  
Reactor555:

bb = OrderDelete( maso [ i ] ); 

 if ( !bb ) Alert ( ExName + " Ошибка удаления ордера" );


извините... случайно вышло...

Случайно такое не выходит.

А откуда знаете, что OrderDelete вообще вызывался?

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий