MT5 и скорость в боевом исполнении - страница 6

 
A100:

Предлагается делать неоднократный возврат (return), пока Вы или всю текущую очередь не прочитаете или на заданное число событий. Когда торговые события закончатся - будет возврат по таймеру и у Вас будет доступ сразу ко всем событиям

Ну и я поворчу... ИМХО, конечно, но так и напрашивается запуск обработчика в отдельном потоке. Так, просто мысли вслух...

А если для себя, то все выносится во вне, а каждый обработчик будет представлять из себя нечто подобное:

void OnXXX{
 gOnXXXMutex.Lock();
 COnXXXOverlapped overlapped=new COnXXXOverlapped(<param_list>);
 gOnXXXOverlappedList.PushBack(overlapped);
 gOnXXXMutex.Unlock();
 DLLOnXXX(<param_list>,overlapped,&gOnXXXMutex);
}
 
A100:
есть и более изящное решение, без OnTimer... подумайте

Сами подумайте, почему это не будет работать.

 
fxsaber:

Сами подумайте, почему это не будет работать.

А здесь думать не нужно - только что рынок открылся, я проверил - все работает, до вычисления строки

if (наблюдаемая позиция закрылась по тейку)

торговые события добавились в очередь и могут быть прочитаны

 
A100:

А здесь думать не нужно - только что рынок открылся, я проверил - все работает, до строки

торговые события добавились в очередь и могут быть прочитаны

Извините, но даже объяснять ничего не буду в вашем понимании правильной работы. Устал от разжевывания простых вещей.

 
fxsaber:

Извините, но даже объяснять ничего не буду в вашем понимании правильной работы. Устал от разжевывания простых вещей.

Не хотите - не объясняйте. Просто я показал, что добавление

bool HandleNextEvent (ENUM_EVENT_TYPE);

принципиально ничего не меняет

 
A100:

принципиально не меняет

Очень сильно меняет. Просто, видимо, нужно потратить уйму времени (с неизвестным результатом), чтобы сделать очевидной эту мысль во многих головах.

 
fxsaber:

Очень сильно меняет. Просто, видимо, нужно потратить уйму времени (с неизвестным результатом), чтобы сделать очевидной эту мысль во многих головах.

Уйму не нужно, потому что согласно Теории простоты Эйнштейна: "Если вы не можете объяснить это просто - значит, вы сами не понимаете этого до конца"

 
A100:

Уйму не нужно, потому что согласно Теории простоты Эйнштейна: "Если вы не можете объяснить это просто - значит, вы сами не понимаете этого до конца"

Да, у вас не получилось.

 
fxsaber:

Да, у вас не получилось.

А я и не пытался ничего объяснять - я привел пример и получил результат:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MT5 и скорость в боевом исполнении

A100, 2020.05.31 23:23

... только что рынок открылся, я проверил - все работает, до вычисления строки

if (наблюдаемая позиция закрылась по тейку)

торговые события добавились в очередь и могут быть прочитаны

Оказалось, что из OnMain() можно прочитать торговые события возникшие в процессе ее выполнения. Вы утверждали обратное
 
A100:

А я и не пытался ничего объяснять - я привел пример и получил результат:

Оказалось, что из OnMain() можно прочитать торговые события возникшие в процессе ее выполнения. Вы утверждали обратное

Ничего вы не поняли. Когда делаем return, то заходим в On-функции сформированной очереди. Это может вызвать паузу, которая не даст СРАЗУ после первого OrderSend послать правильный второй.

Вы же предлагаете накопить очередь через сохранение всех On-функций после return, дождавшись On-функцию, в которой будет сообщение о завершении первого OrderSend. И тогда только отправлять второй OrderSend.

При этом еще и не понимаете, что тейк позиции может исполниться во время первого OrderSend, но его OnTradeTransaction будет в очереди позже (в ту же микросекунду, но позже), чем завершающий OnTradeTransaction от первого OrderSend.