Почему то не открывается файл. - страница 2

 
Dmitry Fedoseev:

!= замените на ==

Спасибо Дмитрий.

Не внимательность это да, страдаемс )

Но судя по проведённым сегодня экспериментам, проблему это не решает.

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

Даже если поменять нет на да, один фиг проблема останется. Печалька.

 
Georgiy Merts:

Работа с фреймами, как я понимаю, использует какие-то весьма тонкие системные механизмы, и я лично использовал ее исключительно в OnTesterDeinit(). 

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

Без фреймов у меня не получается сделать задуманное, объединить на одном графике бэк и форвард тестирование  https://www.mql5.com/ru/code/36058.

Я сначала сделал чтоб инфа из фреймов записывалась в файлы, а потом захотел лишний шаг(запись в файлы) убрать и сразу из фреймов строить графики. Но не получилось. 


Я разобрался в каких случаях скрипт срабатывал.

Если провести оптимизацию  в которой используется функции  FrameAdd  OnTester  OnTesterDeinit,  в общем кто то из них загружает на график в терминале оптимизируемого советника.

Так вот если скрипт с FrameNext запустить на этом графике с прикреплённым экспертом, то скрипт нормально работает )))


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

Ну или как выше объяснил Дмитрий, файл у меня то открывается(значит не открывается), то не открывается(значит открывается).

Как то так.

ScreenShotOptimization
ScreenShotOptimization
  • www.mql5.com
Скрипт, сохраняет скриншоты графика баланса каждого прохода оптимизации.
 
Aleksandr Slavskii:

Я сначала сделал чтоб инфа из фреймов записывалась в файлы, а потом захотел лишний шаг(запись в файлы) убрать и сразу из фреймов строить графики. Но не получилось. 

У себя я в OnTesterDeinit() все собранные фреймы распределил по парам, выделил наилучшую пару, и информацию по ней записал в файл. А потом, информацию из этого файла - использую для формирования настроечных параметров для советника. 

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

 
Georgiy Merts:

Ну, я в своем случае сделал именно так. 

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

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

Ну так я по вашему совету полез смотреть, что такое фреймы и с чем их едят )))

Смотрю, а там фреймы все в файл сваливаются, вот и подумал, а зачем мне его переписывать в свой, если он уже есть )))

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

 

Зачем вам файлы?

Собирайте нужные данные в процессе каждого тестерного прохода и отправляйте их во фрейм (FrameAdd).

В этом же советнике стройте нужные графики прямо по ходу оптимизации (OnTesterPass) или после ее завершения (OnTesterDeinit).

Вот тут готовый код — https://www.mql5.com/ru/articles/4395

Визуализируем оптимизацию торговой стратегии в MetaTrader 5
Визуализируем оптимизацию торговой стратегии в MetaTrader 5
  • www.mql5.com
В статье реализовано MQL-приложение с графическим интерфейсом для расширенной визуализации процесса оптимизации. Графический интерфейс создан с помощью последней версии библиотеки EasyAndFast. У многих пользователей возникает вопрос, зачем нужны графические интерфейсы в MQL-приложениях. В настоящей статье продемонстрирован один из множества случаев, когда они могут быть полезными для трейдеров.
 
Andrey Khatimlianskii:

Зачем вам файлы?

Собирайте нужные данные в процессе каждого тестерного прохода и отправляйте их во фрейм (FrameAdd).

В этом же советнике стройте нужные графики прямо по ходу оптимизации (OnTesterPass) или после ее завершения (OnTesterDeinit).

Вот тут готовый код — https://www.mql5.com/ru/articles/4395

Спасибо.

Статью, я конечно читал, многое в ней для себя почерпнул.

После того как написал это https://www.mql5.com/ru/code/36058  , сразу начал переделывать, потому как не то, что хотелось.

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


                                  Фильтры!!!


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

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


Решил, сделать так: в самом советнике, минимальные фильтры,   не выгружать те проходы  прибыль которых меньше нуля и те, которые завершились прерыванием тестирования функцией TesterStop(), тоже типа фильтра, но ускоряет оптимизацию в разы.

В  OnTesterDeinit выгружаем всё в файл такой же как и .mqd , но со своей структурой, и уже с этим файлом будет работать скрипт в котором можно выставить разные фильтры.

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

Кроме фильтров , по прибыли, просадке, макс число убыточных сделок и т.д. хочу ещё прикрутить какой нибудь другой анализ графиков, типа отношение трендовой прибыли к среднеквадратичному отклонению (этот код есть в справочнике), и из этой статьи https://www.mql5.com/ru/articles/1492  мне понравилась линия линейной регрессии и  коэффициент линейной корреляции, ну и ещё чего нибудь прикрутить для лучшей визуализации.


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

Вот подсказал бы кто как сделать так, чтоб обойтись без вставок в код советника, ну или хотя бы, чтоб вставка была одна, ссылка на библиотеку. А то сейчас надо вставлять код и в OnTick() и в OnTradeTransaction(), не удобно это всё.

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


В общем помаленьку, работа продвигается, в том числе благодаря всем откликнувшемся на вопрос.




ScreenShotOptimization
ScreenShotOptimization
  • www.mql5.com
Скрипт, сохраняет скриншоты графика баланса каждого прохода оптимизации.
 
Aleksandr Slavskii:

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

Вот подсказал бы кто как сделать так, чтоб обойтись без вставок в код советника, ну или хотя бы, чтоб вставка была одна, ссылка на библиотеку. А то сейчас надо вставлять код и в OnTick() и в OnTradeTransaction(), не удобно это всё.

Ну, с этого нужно было начать.

Сделать полный функционал для закрытых советников не получится.

 
Andrey Khatimlianskii:

Ну, с этого нужно было начать.

Сделать полный функционал для закрытых советников не получится.

Та не, про закрытые я не думал. Просто хотелось бы сделать, чтоб использование было максимально простым.

Есть же люди которые используют советники и индикаторы из CodeBase, вот надо сделать так, чтоб им было понятно как пользоваться этим.

MQL5 Code Base
MQL5 Code Base
  • www.mql5.com
Библиотека исходных кодов на языке MQL5 для MetaTrader 5
 

Нет, без вставки кода - никак не обойтись. 

А значит, надо просто максимально изолировать эти вставки, сделать их предельно простыми. Чтобы каждая вставка была одной строкой. 

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

В таком виде - большинство интересующихся смогут все запустить. 

 
Georgiy Merts:

Нет, без вставки кода - никак не обойтись. 

А значит, надо просто максимально изолировать эти вставки, сделать их предельно простыми. Чтобы каждая вставка была одной строкой. 

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

В таком виде - большинство интересующихся смогут все запустить. 

Понятно. У меня именно так и сделано, я думал может быть есть способ сделать ещё проще. Ну да ладно, как говорится, дареному коню... кому надо разберутся)))

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