Ещё раз о многопоточности - страница 5

 

Я далеко не спец, поэтому заранее извиняюсь.

Пишу советника.

Задача:

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

2) Параллельно получению сигналов от индикаторов выполнять постоянную проверку и закрытие профитных или убыточных позиций. К тому же - позиций скажем открыто много и этот процесс желательно еще распараллелить по частям. Скажем 1000 ордеров проверяем в 3 - 4 потока.

3) Параллельно вышеизложенным процессам по сигналам полученным от индикаторов в п. 1 осуществлять покупку или продажу.


И самое интересное = как распарллелить все эти задачи так, чтобы был доступен тестер и оптимизации в тесторе ?

Ткните носом, желательно с примерами. Заранее спасибо.

 
dd:

Я далеко не спец, поэтому заранее извиняюсь.

Задача:

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

2) Параллельно получению сигналов от индикаторов выполнять постоянную проверку и закрытие профитных или убыточных позиций. К тому же - позиций скажем открыто много и этот процесс желательно еще распараллелить по частям. Скажем 1000 ордеров проверяем в 3 - 4 потока.

3) Параллельно вышеизложенным процессам по сигналам полученным от индикаторов в п. 1 осуществлять покупку или продажу.


И самое интересное = как распарллелить все эти задачи так, чтобы был доступен тестер и оптимизации в тесторе ?

Ткните носом, желательно с примерами. Заранее спасибо.

А вы вообще терминал открывали хотя бы раз? Тестер и он же оптимизатор всегда доступны параллельно ведению торговли на счете. 

Интересно, как же долго идет получение сигналов от индикаторов, если возникает вопрос о необходимости их отпараллеливания?

 
Dmitry Fedoseev:

А вы вообще терминал открывали хотя бы раз? Тестер и он же оптимизатор всегда доступны параллельно ведению торговли на счете. 

Интересно, как же долго идет получение сигналов от индикаторов, если возникает вопрос о необходимости их отпараллеливания?

открывал, и очевидно больше вашего. Один тик - одна секунда. За это время надо проверить скажем 4 идикатора - постороить графики. Получить сигналы, купить или продать, Закрыть 1000 ордеров и так далее ... И как бы каждая милисикунда на счету ... Точнее в минусе счета. Время деньги :)
 
dd:

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

2) Параллельно получению сигналов от индикаторов выполнять постоянную проверку и закрытие профитных или убыточных позиций. К тому же - позиций скажем открыто много и этот процесс желательно еще распараллелить по частям. Скажем 1000 ордеров проверяем в 3 - 4 потока.

3) Параллельно вышеизложенным процессам по сигналам полученным от индикаторов в п. 1 осуществлять покупку или продажу.

Индикаторы, запускаемые на одном инструменте, работают все в одном потоке. Но если их написать нормально, задержки не будет (будет исчисляться миллисекундами).

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


dd:

И самое интересное = как распарллелить все эти задачи так, чтобы был доступен тестер и оптимизации в тесторе ?

Для тестера это все не нужно, он работает синхронно и не пропускает тики. Делайте 2 варианта - для тестера и для онлайна (if ( IsTesting() ).

Многопоточный асинхронный WebRequest на MQL5 своими руками
Многопоточный асинхронный WebRequest на MQL5 своими руками
  • www.mql5.com
Реализация торговых алгоритмов часто требует анализа информации из различных внешних источников, в частности из Internet. MQL5 предоставляет функцию WebRequest для отправки HTTP-запросов во "внешний мир", но она, к сожалению, обладает одним заметным недостатком. Эта функция является синхронной, а потому блокирует работу эксперта на все время...
 
Andrey Khatimlianskii:

Индикаторы, запускаемые на одном инструменте, работают все в одном потоке. Но если их написать нормально, задержки не будет (будет исчисляться миллисекундами).

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


Для тестера это все не нужно, он работает синхронно и не пропускает тики. Делайте 2 варианта - для тестера и для онлайна (if ( IsTesting() ).



Индикаторы, запускаемые на одном инструменте, работают все в одном потоке. Но если их написать нормально, задержки не будет (будет исчисляться миллисекундами).

--- чето не понял. Я не собираюсь писать свои индикаторы. Я использую штатные. И смысл в том, что я их хочу использовать параллельно, чтоб сократить время отклика...


Для тестера это все не нужно, он работает синхронно и не пропускает тики. Делайте 2 варианта - для тестера и для онлайна (if ( IsTesting() ).

---- тут вообще не понял. Кому не нужно ? Он работает синхронно --- а мне то надо наоборот, чтоб он учитывал мою ассинхронность ... Какие нафиг два варианта ? У меня один вариант моего советника и я его хочу погонять в тестере, но я хочу расспараллелить процессы и чтобы в тестере это было видно.

из за того что все выполняется последовательно у меня начинаются просадки, и нифиговые такие. 

 
dd:

--- чето не понял. Я не собираюсь писать свои индикаторы. Я использую штатные. И смысл в том, что я их хочу использовать параллельно, чтоб сократить время отклика...

Время отклика засекали? На распаралелливании больше потеряете.


dd:

---- тут вообще не понял. Кому не нужно ? Он работает синхронно --- а мне то надо наоборот, чтоб он учитывал мою ассинхронность ... Какие нафиг два варианта ? У меня один вариант моего советника и я его хочу погонять в тестере, но я хочу расспараллелить процессы и чтобы в тестере это было видно.

Один советник:

if ( IsTesting() )
{
   // работаем нормально
}
else
{
   // распараллеливаем торговые приказы
}

Зачем тестировать распараллеливание в тестере?

 
dd:

из за того что все выполняется последовательно у меня начинаются просадки, и нифиговые такие. 

Распределите отправку торговых приказов или используйте OrderSendAsync

Если нужно закрыть скопом кучу сделок, можно открыть одну большую встречную, зафиксировав прибыль, а потом спокойно закрывать OrderCloseBy одну об другую.
 
Andrey Khatimlianskii:

Распределите отправку торговых приказов или используйте OrderSendAsync

так дело не только в ордер сенд, там еще куча проверок делается. Но все они встают в очередь, пока одна функция не закончилась, другая не исполняется ....

яж в условиях задачки все описал. И это комплексная задача. DLL или чаты или там еще чего - меня интирисует при каком сценарии я смогу распараллелить эти задачи и при этом гонять в тестере чтоб понимать что к чему ...

 
dd:

так дело не только в ордер сенд, там еще куча проверок делается. Но все они встают в очередь, пока одна функция не закончилась, другая не исполняется ....

яж в условиях задачки все описал. И это комплексная задача. DLL или чаты или там еще чего - меня интирисует при каком сценарии я смогу распараллелить эти задачи и при этом гонять в тестере чтоб понимать что к чему ...

И сколько драгоценного времени вы теряете и какие от этого последствия? И какой бы был профит, если бы не было этой "потери"?

 
Dmitry Fedoseev:

И сколько драгоценного времени вы теряете и какие от этого последствия? И какой бы был профит, если бы не было этой "потери"?

дофига, чтоб прогнать в тестере эту стратегию мне, имея 24 ядра в распоряжении требуется 5 дней. А работает одно ядро. Я молчу про то что лог, тупой никому не нужный лог за это время может раздуться на пару терабайт. И это без оптимизаций. И этот тупой лог ни как нельзя отключить ... 

Как вы думаете если бы я ускорил процесс скажем так - 4 графика каждый на своем ядре - прирост по этому пункту в 4 раза. Плюс отдельный процесс на закрытие 1000 сделок скажем.  Или еще разбив этот процесс на 5 или 10 потоков - 10 раз. Плюс отдельный процесс на открытие позиций по сигналам ... 

Я думаю кратный и в разы ...

Но каждая милисикунда + лаг до брокера + лаг от брокера до биржи (если это не кухня)  - колосальные потери. Странно что в сибири это не понимают ...
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...