Остановить оптимизацию при достижении необходимого показателя или времени. - страница 3

 
Maxim Kuznetsov #:

не просто "да, возможно", но если в OnTesterInit установка глоб.переменной меняет (или устанавливает) значения которые вы видите тыкнув F3 терминала, это не "проблема", это @#па

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

Разве не так? 

 
Georgiy Merts #:

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

Разве не так? 

OnTesterInit компонент чужой программы с закрытым кодом. Вы пихнаете её в тестер/оптимизатор, чтобы посмотреть/проверить - а по итогу меняется состояние торгового терминала.

надо ещё проверить действительно ли это так

 
Maxim Kuznetsov #:

OnTesterInit компонент чужой программы с закрытым кодом. Вы пихнаете её в тестер/оптимизатор, чтобы посмотреть/проверить - а по итогу меняется состояние торгового терминала.

надо ещё проверить действительно ли это так

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

Ну или я не совсем понимаю суть "глобальности" переменных.

 
Georgiy Merts #:

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

Ну или я не совсем понимаю суть "глобальности" переменных.

Агенты - это отдельные от терминала программы, могут быть даже в облаке. Глобальными переменные называются потому, что доступны из всех mql-программ в одном терминале или агенте (в отличие от переменных, определенных внутри любой mql-программы). Например, если ваш эксперт запускает несколько индикаторов, то индикаторы увидят глобальные переменные, созданные этим экспертом. В каждом экземпляре эксперта на отдельном агенте будет свой пул глобальных переменных, доступный "местным" экземплярам индикаторов.

 
Stanislav Korotky #:

Агенты - это отдельные от терминала программы, могут быть даже в облаке. Глобальными переменные называются потому, что доступны из всех mql-программ в одном терминале или агенте (в отличие от переменных, определенных внутри любой mql-программы). Например, если ваш эксперт запускает несколько индикаторов, то индикаторы увидят глобальные переменные, созданные этим экспертом. В каждом экземпляре эксперта на отдельном агенте будет свой пул глобальных переменных, доступный "местным" экземплярам индикаторов.

Ну, так и агенты в облаке, по идее, должны видеть эти переменные. 

Странно - файлы они видят, даже в облаке, а глобальные переменные - нет. 

Ну... "Это не баг, это фича"... 

 
Georgiy Merts #:

Ну, так и агенты в облаке, по идее, должны видеть эти переменные. 

Странно - файлы они видят, даже в облаке, а глобальные переменные - нет. 

Конечно, не должны. Г.переменные - внутри каждого процесса свои. Так задумали в MQ. Чтобы переменные были разделяемыми между процессами, средства конечно есть, но не очень тривиальные (DCOM, например).

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

 
Stanislav Korotky #:

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

Файлы из общей папке, указанные в директиве tester_file, видны на удалённых агентах. Правда, у меня не облако, у меня локальная сеть. 

Ограничение по времени я сделал именно через эти файлы. В момент начала тестирования в файл записывается стартовый момент (время на компьютере, не то, что моделируется), а на агентах этот файл считывается в функции инициализации. Если при считывании выясняется, что прошло слишком много времени, то функции OnTick() сразу возвращают управление, при условии, что это - не форвард-проход. 

В принципе, можно было бы использовать функцию TesterStop(), но непонятно, как при этом будет работать форвард. Форвард-проходы "терять" не хочется. 

 
Georgiy Merts #:

Файлы из общей папке, указанные в директиве tester_file, видны на удалённых агентах. Правда, у меня не облако, у меня локальная сеть. 

Ограничение по времени я сделал именно через эти файлы. В момент начала тестирования в файл записывается стартовый момент (время на компьютере, не то, что моделируется), а на агентах этот файл считывается в функции инициализации. Если при считывании выясняется, что прошло слишком много времени, то функции OnTick() сразу возвращают управление, при условии, что это - не форвард-проход. 

В принципе, можно было бы использовать функцию TesterStop(), но непонятно, как при этом будет работать форвард. Форвард-проходы "терять" не хочется. 

В такой постановке все будет работать и в облаке. Здесь не производится обмен информацией (для чего обычно используют г.переменные), а только отправка значения в одну сторону.

TesterStop вроде влияет только на текущий проход и не должен оказывать влияние на запланированные форварды. В принципе, вхолостую пропускать события OnTick - не особо экономное решение, потому что тестер все равно генерирует окружение для каждого тика. Так что лучше вызвать TesterStop или, как предполагалось раньше, возвращать ошибку из OnInit.

 

Всем приве!

подскажите пожалуйста если я при ген.оптимизации в инит проверю значение инпут параметра1 текущего прогона и исходя из значения(инпут параметра1) произведу замену диапазона значений с помощью  ParameterSetRange у  параметра2 это не повлияет на диапазоны следующих прогонов? и не возникнет ли вероятность задвоения комбинаций параметров?

Спасибо!


 
yaroslav ivantsov #:

подскажите пожалуйста если я при ген.оптимизации в инит проверю значение инпут параметра1 текущего прогона и исходя из значения(инпут параметра1) произведу замену диапазона значений с помощью  ParameterSetRange у  параметра2 это не повлияет на диапазоны следующих прогонов? и не возникнет ли вероятность задвоения комбинаций параметров?

Эта функция будет работать только в OnTesterInit, т.е. ДО запуска самого процесса оптимизации, но уже после нажатия на кнопку Старт.

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