Разгрузка процессора по событию от тестера стратегий.

 

Добрый день!

Как реализовать разгрузку процессора по событию от тестера стратегий?

Поясню. Идет расчет в сторонней программе и тестер стратегий не начинает расчет пока процессор не освободится.

Необходимо получить событие от MetaTester о начале расчета, чтобы поставить расчет в другой программе на паузу для освобождения процессора для MetaTester.

И обратно, получить событие, что расчет закончен, чтобы снять с паузы расчет в сторонней программе.

 
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{
  Alert(MTTESTER::IsReady() ? "Не считаю." : "Считаю...");
}
 
fxsaber:

Спасибо! Т.е. 

1. MetaTester получив задание пытается начать расчет OnStart

2. Говорит "Считаю...", то останавливаем параллельный расчет.

или

1. Проверяем есть ли задание у MetaTester через OnStart

2. Если есть "Считаю...", то останавливаем параллельный расчет.

?

 
С OnStart пример работы функции. Применяйте ее, как вздумается.
 
fxsaber:
С OnStart пример работы функции. Применяйте ее, как вздумается.

Без установки MetaTrader 5 никак не сделать?

 
1Serg:

Без установки MetaTrader 5 никак не сделать?

Звучит, как издевка.

Или у вас тестер запускает какое-то другое приложение?

 
Andrey Khatimlianskii:

Звучит, как издевка.

Или у вас тестер запускает какое-то другое приложение?

Ни в коем разе. Тестер работает на нескольких компьютерах в свободное процесорное время, но вот не работает если запущен майнинг на процессоре. Понимаете? Как понять, что тестеру пришло задание и майнинг на проце нужно остановить? Приоритет заданий не помогает. 

 
1Serg:

Ни в коем разе. Тестер работает на нескольких компьютерах в свободное процесорное время, но вот не работает если запущен майнинг на процессоре. Понимаете? Как понять, что тестеру пришло задание и майнинг на проце нужно остановить? Приоритет заданий не помогает. 

Решение такой задачи внутри MT/MQL - это замкнутый круг: агент, скорее всего, не получит задание, пока процессор достаточно не разгрузится. Гипотетически можно было бы попробовал в OnTesterInit дергать через веб-реквест или сокеты некоторые порты на машинах, где идет майнинг и установлены MT-агенты. В ответ на этот "пинг" некая программа останавливала бы майнинг, и тогда агенты становились бы приемлемыми для новых пакетов заданий. Но я предполагаю, что MQL-евские веб-реквесты и сокеты нельзя использовать в OnTesterInit.

 
1Serg:

Ни в коем разе. Тестер работает на нескольких компьютерах в свободное процесорное время, но вот не работает если запущен майнинг на процессоре. Понимаете? Как понять, что тестеру пришло задание и майнинг на проце нужно остановить? Приоритет заданий не помогает. 

Попробуйте сделать советника с таймером (или зацикленный скрипт), где будет постоянная проверка состояния тестера и отправка команды на остановку майнинга:

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{
  static bool TesterWorking = false;
  while ( !IsStopped() )
  {
    if ( MTTESTER::IsReady() )
      TesterWorking = false;
    else if ( !TesterWorking )
    {
      TesterWorking = true;
      StopMining(); // Написать самому
    }
  }
}

Если Станислав вдруг ошибся (я не проверял).