Глобальные переменные терминала в тестере работают? - страница 2

 
fxsaber:
"Во время оптимизации" - понятие растяжимое. Как и что именно предполагается "во время оптимизации" передавать, учитывая параллельность выполняемых действий?
 
Stanislav Korotky:
"Во время оптимизации" - понятие растяжимое. Как и что именно предполагается "во время оптимизации" передавать, учитывая параллельность выполняемых действий?

В MT5, вроде, нельзя прервать оптимизацию через MQL5. Поэтому пример простой - нужно "прервать" (сделать ExpertRemove в OnInit) оптимизацию, если один из пришедших OnTester достиг какого-то значения.

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

 
Stanislav Korotky:
Для передачи информации с агентов в терминал используйте фреймы. Не нужно файлов. Хотя и файл можно во фрейм запихнуть.

Что за фреймы, расскажите кратко плз
 
fxsaber:

В MT5, вроде, нельзя прервать оптимизацию через MQL5. Поэтому пример простой - нужно "прервать" (сделать ExpertRemove в OnInit) оптимизацию, если один из пришедших OnTester достиг какого-то значения.

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

А как раз продекларированный файл нельзя менять/дописывать в папке терминала? Если речь именно про пакеты, то наверно каждый следующий пакет считает файл заново. Вот внутри пакета заданий что-то изменить/переслать проблематично.
 
Alexey Volchanskiy:

Что за фреймы, расскажите кратко плз
См. документацию.
 
Stanislav Korotky:
А как раз продекларированный файл нельзя менять/дописывать в папке терминала? Если речь именно про пакеты, то наверно каждый следующий пакет считает файл заново. Вот внутри пакета заданий что-то изменить/переслать проблематично.

@Slava просим ответить. Управлять размерами пакетов нет возможности, поэтому возможности практически нулевые даже здесь.

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

Пример

  1. Два пользователя купили один и тот же советник в Маркете и решили его оптимизировать в Облаке.
  2. Советник устроен так, что при достижении какого-то условия он записывает на агенте файл, как флаг того, что следующие прогоны надо делать ExpertRemove  в OnInit.
  3. Первый пользователь запускает такой советник на оптимизацию. И радуется, что условие "остановки" оптимизации сработало и не нужно платить лишних денег за Облако.
  4. При этом второй раз запустить оптимизацию он не сможет на тех же агентах - файл там хранится.
  5. Но прикольнее даже другое, после первого пользователя второй окажется совсем в обломе - он не сможет даже первую оптимизацию провести этого же советника.

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


И все же, как во время оптимизации на удаленные агенты что-либо отправить? Ну или хотя бы, как через MQL прервать оптимизацию? Сейчас возможности руками это сделать есть, а программно - нет.


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


ЗЫ Пример советника для Маркета, который не будет оптимизироваться из-за названных выше причин

input int Tmp = 0;

double OnTester()
{
  return(FileIsExist(__FUNCTION__) || (FileOpen(__FUNCTION__, FILE_WRITE) == INVALID_HANDLE));
}
 

С облачной оптимизацией дело обстоит несколько по-другому, чем с локальной оптимизацией.

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

Поэтому запись какого-либо признака в файл бессмысленна.

Другое дело, что эксперт мог бы завершать оптимизацию по получению этого признака из фрейма в OnTesterPass. Что-то типа функции OptimizationStop. Тогда все задания будут застоплены сервером. Всех денег не сэкономите, но если расчёты серьёзные, то экономия может оказаться серьёзной.

 
Slava:

С облачной оптимизацией дело обстоит несколько по-другому, чем с локальной оптимизацией.

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

Поэтому запись какого-либо признака в файл бессмысленна.

Все зависит от количества прогонов для оптимизации. Чем больше - тем выше вероятность нарваться повторно на одного и того же Облачного агента. Ну а там с примером выше выйдет нехорошесть (особенно, если писать в Common-папку). По-моему, такие выкрутасы с файлами нужно запрещать.

Но это все частности большого вопроса о передаче данных на агентов. Если правильно понял, то почти бессмысленно что-то передавать из-за озвученных практических особенностей Облака.

Другое дело, что эксперт мог бы завершать оптимизацию по получению этого признака из фрейма в OnTester. Что-то типа функции OptimizationStop. Тогда все задания будут застоплены сервером. Всех денег не сэкономите, но если расчёты серьёзные, то экономия может оказаться серьёзной.

Хорошо бы еще иметь OptimizationRestart() с возможностью поменять диапазон входных.
 
fxsaber:

По-моему, такие выкрутасы с файлами нужно запрещать.

Совсем запрещать файлы не нужно. Должна быть песочница с контекстом в одну сессию, т.е. чиститься между запусками.
 
Stanislav Korotky:
Совсем запрещать файлы не нужно. Должна быть песочница с контекстом в одну сессию, т.е. чиститься между запусками.

Какой-то механизм чистки присутствует и сейчас, но не понял его логики.

Помимо песочницы есть еще COMMON-папка. Как с Облачными - не знаю, но с локальных точно вытягиваются все файлы через фреймы.

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