Возможности МТ4 или компа очень ограничены оказывается. Если задать в алгоритме многоуровневые циклы с "тяжелыми" математическими формулами - то компьютер зависает..... - страница 2
... стоит тщательно проверить, оптимально ли происходят вычисления. Возможно, проблема не в скорости работы программы, а именно в неоптимальном алгоритме расчета.
Алексей Тарабанов:
Понравилось
Тут можно:
1. Воспользоваться профайлером МТ, хотя он в зародышевом состоянии.
2. Оптимизировать код в VS на С++ проекте - там профайлеры что надо. Перенос MQL -> C++проблем не вызовет.
3. Вынести все в DLL, которую компилировать на Intel Parallel Studio 2016
Все наши программы с 2000 года эффективно используют многоядерность. В то же время, оптимизатор статегий в MetaTrader 4 однопотоковый по своей архитектуре. Если нужен многопотоковы/сетевой/облачный оптимизатор торговых стратегий, то используйте MetaTrader 5.
А разве не одно ядро максимум использует MT4? У меня так, даже при торговле.
Вообще, MQ заявляют, что в МТ4 каждый советник работает в своем потоке. Проверить это крайне легко, задача на 5 минут, сейчас тест выложу. Самому стало интересно.
Вот вам тест, у меня 2-х ядерник, наблюдается странный эффект - при увеличении количества запущенных советников и последующем уменьшении до одного время на поток не уменьшается до начального уровня. Вопрос к MQ - вы что, при увеличении нагрузки уменьшаете приоритеты потоков, а при уменьшении не восстанавливаете приоритеты? Советник приаттачен внизу.
Проверьте на многоядерных процах, интересно. Я потом сделаю статистику поудобнее, пока обычный принт.
1. Запустите на одном чарте
2. Потом на втором и так далее
3. Смотрите вывод в закладке Эксперты
4. Выключите все советники, кроме одного. Время такое же, как в начале?
Ну и посмотрите на загрузку ядер.
Код (готовый советник скачайте внизу страницы)
externlong num_steps = 1000000; // Число циклов вычисления Пиexternint ind_steps = 500; // Число прогонов для индикацииulong SumTime = 0;
voidOnTick()
{
ulong dtStart, dtStop;
staticint indCount = 0;
staticulong count = 0;
double step;
double x, pi, sum = 0.0;
int i;
while(!IsStopped())
{
dtStart = GetMicrosecondCount();
step = 1./(double)num_steps;
for (i=0; i < num_steps; i++)
{
x = (i + .5)*step;
sum = sum + 4.0/(1.+ x*x);
}
pi = sum*step;
count++;
dtStop = GetMicrosecondCount();
SumTime += dtStop - dtStart;
if(indCount++ > ind_steps)
{
ulong t = SumTime / count;
printf("Время выполнения цикла %u мкс\n", t);
indCount = 0;
}
}
}
Вот вам тест, у меня 2-х ядерник, наблюдается странный эффект - при увеличении количества запущенных советников и последующем уменьшении до одного время на поток не уменьшается до начального уровня. Вопрос к MQ - вы что, при увеличении нагрузки уменьшаете приоритеты потоков, а при уменьшении не восстанавливаете приоритеты? Советник приаттачен внизу.
Тот же код без изменений можно запустить на МТ5, надо только файл переименовать, вот переименованный
Все наши программы с 2000 года эффективно используют многоядерность. В то же время, оптимизатор статегий в MetaTrader 4 однопотоковый по своей архитектуре. Если нужен многопотоковы/сетевой/облачный оптимизатор торговых стратегий, то используйте MetaTrader 5.
Ihor Herasko:
... стоит тщательно проверить, оптимально ли происходят вычисления. Возможно, проблема не в скорости работы программы, а именно в неоптимальном алгоритме расчета.
Алексей Тарабанов:
ПонравилосьТут можно:
1. Воспользоваться профайлером МТ, хотя он в зародышевом состоянии.
2. Оптимизировать код в VS на С++ проекте - там профайлеры что надо. Перенос MQL -> C++проблем не вызовет.
3. Вынести все в DLL, которую компилировать на Intel Parallel Studio 2016
Это в корне ошибочное утверждение.
Все наши программы с 2000 года эффективно используют многоядерность. В то же время, оптимизатор статегий в MetaTrader 4 однопотоковый по своей архитектуре. Если нужен многопотоковы/сетевой/облачный оптимизатор торговых стратегий, то используйте MetaTrader 5.
...
3. Вынести все в DLL, которую компилировать на Intel Parallel Studio 2016
Зачем?
Для оптимизации скорости, едреныть.
Очень похоже на анекдот:
- Студент, как работает трансформатор?
- Уууууууууууууууууууууууууууууууууууу...
Очень похоже на анекдот:
- Студент, как работает трансформатор?
- Уууууууууууууууууууууууууууууууууууу...
Так и работает :)
...
Вообще, MQ заявляют, что в МТ4 каждый советник работает в своем потоке. Проверить это крайне легко, задача на 5 минут, сейчас тест выложу. Самому стало интересно.
Вот вам тест, у меня 2-х ядерник, наблюдается странный эффект - при увеличении количества запущенных советников и последующем уменьшении до одного время на поток не уменьшается до начального уровня. Вопрос к MQ - вы что, при увеличении нагрузки уменьшаете приоритеты потоков, а при уменьшении не восстанавливаете приоритеты? Советник приаттачен внизу.
Проверьте на многоядерных процах, интересно. Я потом сделаю статистику поудобнее, пока обычный принт.
1. Запустите на одном чарте
2. Потом на втором и так далее
3. Смотрите вывод в закладке Эксперты
4. Выключите все советники, кроме одного. Время такое же, как в начале?
Ну и посмотрите на загрузку ядер.
Код (готовый советник скачайте внизу страницы)
Вот вам тест, у меня 2-х ядерник, наблюдается странный эффект - при увеличении количества запущенных советников и последующем уменьшении до одного время на поток не уменьшается до начального уровня. Вопрос к MQ - вы что, при увеличении нагрузки уменьшаете приоритеты потоков, а при уменьшении не восстанавливаете приоритеты? Советник приаттачен внизу.
Это в корне ошибочное утверждение.
Все наши программы с 2000 года эффективно используют многоядерность. В то же время, оптимизатор статегий в MetaTrader 4 однопотоковый по своей архитектуре. Если нужен многопотоковы/сетевой/облачный оптимизатор торговых стратегий, то используйте MetaTrader 5.