MQL4 - как организовать асинхронные вычисления?

 
Пишу автооптимизирующийся советник. Столкнулся с проблемой долгого вычисления (порядка минуты и более) оптимальных параметров. В обычной программе (C++,C#) я бы выделил вычисления в отдельный поток. А как это сделать на MQL4? Искал, не нашел. Кто-нибудь подскажет?
 
wmlab:
Пишу автооптимизирующийся советник. Столкнулся с проблемой долгого вычисления (порядка минуты и более) оптимальных параметров. В обычной программе (C++,C#) я бы выделил вычисления в отдельный поток. А как это сделать на MQL4? Искал, не нашел. Кто-нибудь подскажет?
Можно использовать несколько советников или скриптов. Пользовал скрипты, как дополнительные потоки. Запускал их из советника. Потом надоело это баловство и перешёл на С++.
 
Zhunko:
Можно использовать несколько советников или скриптов. Пользовал скрипты, как дополнительные потоки. Запускал их из советника. Потом надоело это баловство и перешёл на С++.

Да, скрипт, как "грязное" решение, подойдет. Передача оптимальных значений от скрипта советнику возможна через файл. Просто хотелось бы это сделать более красиво.
 

А вы вычисляйте оптимум не на всем пространстве параметров, а только в некоторой окрестности предыдущего оптимума.

По теме: вроде можно зациклить советник, а котировки обновлять "вручную", было на форуме. Получите один поток, но управляемый, с которым можно делать что угодно.

 
wmlab:
Пишу автооптимизирующийся советник. Столкнулся с проблемой долгого вычисления (порядка минуты и более) оптимальных параметров. В обычной программе (C++,C#) я бы выделил вычисления в отдельный поток. А как это сделать на MQL4? Искал, не нашел. Кто-нибудь подскажет?

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

Так что, мечтать не вредно.

 
wmlab:

Да, скрипт, как "грязное" решение, подойдет. Передача оптимальных значений от скрипта советнику возможна через файл. Просто хотелось бы это сделать более красиво.

Так а чем не устраивает перенос основных расчётов в DLL? Решение в виде скрипта - это ведь всё-равно очень медленно, а главное - ненадёжно. Если уж так хочется обойтись без DLL, то тогда лучше два параллельно работающих советника.
 
Meat:

Если уж так хочется обойтись без DLL, то тогда лучше два параллельно работающих советника.
Хоть один, хоть два. Ускорения от распараллеливания процессов в МТ4 не будет. Ведь топикстатеру нужно повысить производительность, а не мутить многозадачность ради многозадачности.
 
wmlab:
Пишу автооптимизирующийся советник. Столкнулся с проблемой долгого вычисления (порядка минуты и более) оптимальных параметров. В обычной программе (C++,C#) я бы выделил вычисления в отдельный поток. А как это сделать на MQL4? Искал, не нашел. Кто-нибудь подскажет?


То что было в start у обычного советника - в отдельную функцию (будет торгующая функция). Из цила оптимизации периодически вызывать эту торгующую функцию.

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

 
Или еще посложнее, но зато с полной идентичностью работы в тестере и в реале. За один вызов start прогонять не всю оптимизацию, а только несколько ее циклов.
 
wmlab:

Да, скрипт, как "грязное" решение, подойдет. Передача оптимальных значений от скрипта советнику возможна через файл. Просто хотелось бы это сделать более красиво.
Данные через маппинг передавал. DLL значительно быстрее работает. Раз в 20. Видел, как DLL оба ядра напрягает.
 

Начиная с 432 билда наблюдаю такую картинку :

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