Параметры TestReport/TestReplaceReport и получение отчёта о прогонах эксперта в оптимизаторе

 

Хочу обратить внимание уважаемых разработчиков на следующую задачу.

Я запускаю терминал внешним приложением в двух режимах: тестера и оптимизатора. Примерно с таким ini файлом:


формируя его таким образом, например для оптимизатора:


в итоге на выходе после каждого прогона эксперта я должен получить пару файлов:
1. XML файл с итогами прогона, формируется из deinit эксперта.
2. Желаю также получить картинку баланса, которую отображает в HTML стандартный отчёт терминала, формируемый в автозапуске параметрами TestReport и TestReplaceReport.


Т.е., например, 100 прогонов эксперта должны дать на диске 100 файлов с итогами, и 100 графических файлов.


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

А вот запуск в режиме оптимизатора даёт облом этой задачи :(. Если я ставлю в параметр TestReport уникальное имя .htm файла и, соответственно, получается с таким же именем .gif файл, то он выходит один на всю серию запусков эксперта во время сессии оптимизатора. Т.е., например, на 1280 вариантов прогона эксперта в оптимизаторе выходит один графический файл. Это неудача.

Как вариант, я могу поставить параметр TestReplaceReport в false, тогда на диске будут генерироваться файлы с похожими именами, но с номером в конце [1], [2] и т.д. Я мог бы в deinit эксперта определять последний по дате или номеру файл, мне же нужно соотнести XML файлы-итоги и соответствующие им графические файлы, раз имя файла будет изменено. Но, к сожалению, я обнаружил тестовым кодом, что во время выполнения deinit эксперта эти файлы отчёта (htm и gif) ещё не созданы. Опять неудача.

Код проверки такой:


Получается, как видно выше в блокноте, fSize = -1, т.е. файла ещё нет на диске.

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

Заранее спасибо разработчикам за действенный ответ.

 
Нет с этим вопросом я еще не эксперементировал. Но я не совсем понимаю смысл связывания XML файла с существованием HTM отчета вы ведь не парсите его, после завершения процесса терминала, будет и XML и HTM файлы отчета, словом в совокупности, после чего их можно скопировать или обработать, а затем удалить или просто перенести с другими именами в папку своей программы и повторять операцию столько раз сколько нужно. Может я чего-то не учитываю? Но я думаю что вы просто не с той стороны подошли к поставленной задаче:) Вы ведь все равно дожидаетесь завершения работы процесса терминала, а значит после каждого завершения это можно беспрепятственно делать.
 
xnsnet:
Нет с этим вопросом я еще не эксперементировал. Но я не совсем понимаю смысл связывания XML файла с существованием HTM отчета вы ведь не парсите его, после завершения процесса терминала, будет и XML и HTM файлы отчета, словом в совокупности, после чего их можно скопировать или обработать, а затем удалить или просто перенести с другими именами в папку своей программы и повторять операцию столько раз сколько нужно. Может я чего-то не учитываю? Но я думаю что вы просто не с той стороны подошли к поставленной задаче:) Вы ведь все равно дожидаетесь завершения работы процесса терминала, а значит после каждого завершения это можно беспрепятственно делать.

Не совсем так. В режиме тестера - да, поскольку в нём один прогон терминала даёт один прогон эксперта: peer-to-peer. А в режиме оптимизатора один прогон терминала (как процесса) даёт множество прогонов эксперта, причём число заранее неизвестно (хотя посчитать его можно, перемножив числа всех комбинаций перебираемых параметров), но отчёт в этом случае всего один, либо при TestReplaceReport = false их несколько, но генерируются они после завершения процесса терминала, т.е. я не могу сопоставить в режиме оптимизатора множество XML файлов-итогов прогонов эксперта с множеством файлов-отчётов терминала. Какой кому соответствует?

Мне хочется хранить в SQL базе на все прогоны эксперта, помимо числовых итогов, и картинки движения баланса, выдаваемые отчётом терминала, для дальнейшего просмотра.
 

Ага, вот теперь я понял, в чем проблемма... Да это действительно проблемма.

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

Я бы для этого использовал свою библиотеку вгружающую .NET она не выгружается, так как создает свои потоки в процессе, за счет чего я имею возможность пользоваться глобальной памятью на время работы процесса, самым простым способом. Создаем на MC++ библиотеку и используем стандартный экспорт, без точки входа. Но ради такой мелочи, городить огород это смешно:)))) Хотя не лешено смысла:) Честно говоря я это начал делать для того чтобы иметь именно такие глобальные переменные, но в расширенном понимании, например имея в качестве уникального наименования такой переменной, любое число параметров и значений не говоря о типах, асоциативного маштаба, чтобы не приходилось, в наименование переменной вкладывать все что имею и иметь больше одного значения и любого типа. Но пока я не доконца представляю себе как это будет выглядеть в результате, реальное удобство очень спорно.

 
Честно говоря, в текущей ситуации я пока не вижу решения. Ведь отчёт(ы) терминала, как я выяснил, генерируются в конце его работы, при выгрузке из памяти (разработчики поправят, если я ошибаюсь). А мои XML файлы (основой является статья Станислава Старикова Самостоятельная оценка результатов тестирования эксперта) генерируются из deinit эксперта после каждого завершения его прогона. И в момент их формирования отчётов тестера ещё нет физически на диске, не с чем сравнивать. А когда терминал при выгрузке генерирует отчёт, я уже не имею никакого работающего MQL кода. Остаётся только работающая внешняя управляющая система. И как она поставит соответствие множество XML файлов в одной папке на множество файлов-отчётов терминала? По дате? Но она может у файлов и не совпасть. И с учётом того, что файлы могут там лежать в папках и от предыдущих запусков терминала как тестера/оптимизатора (хотя это я могу устранить, собирая файлы сразу после завершения процесса терминала).

Не вижу, к сожалению, критерия и возможности получения к каждому прогону эксперта и текстовых, и графических результатов (в оптимизаторе).
Либо эту картинку при чтении XML файла рисовать самому по какому-либо алгоритму, из внешней системы по переданным в итоговом XML файле результатам всех сделок и баланса. И сохранять её в базу. Но этого алгоритма я пока не знаю.
Кто-нибудь его подскажет?
 
Кстати, сейчас выяснил ещё пару моментов. Я поставил такие параметры:
                                sw.WriteLine(string.Format(@"TestReport={0}{1}", CommonAction.REPORT_FOLDER, sReportHtmFile));
                                sw.WriteLine("TestReplaceReport=false"); // TestReplaceReport=true
                                sw.WriteLine("TestShutdownTerminal=true");
т.е. задал такой режим:
TestReplaceReport - разрешить/запретить повторную запись файла отчета. Принимаемые значения "true" или "false". Если указано значение "false" и файл отчета с таким именем уже существует, то к имени файла отчета будет добавлен порядковый номер в квадратных скобках. Например, "MovingAverageReport[1].htm". В случае отсутствия этого параметра используется значение "false".

Однако отчёт появился на диске один на запуск оптимизатора, т.е. параметр TestReplaceReport в режиме оптимизатора не играет роли, он применим только в режиме тестера.
И второе. Если оптимизатор досрочно прервать кнопкой Стоп, то файла отчёта не появится совсем.

В итоге вопрос один - кто знает, как сгенерировать самостоятельно картинку баланса/средств?
 
Если вопрос стоит о .NET то это проще чем кажется:)

Создаем битмап и рисуем на нем линии, а собственно этот битмап можно сохранять в любой формат или делать вывод в окно:) Можно даже добится такого же сходства:) Я бы так и сделал, так как хранить в базе или просто на диске тысячи картинок накладно, когда можно обойтись потоком данных:) И обеспечить просто напросто хороший вывод данных, не сложно в точности повторить тот же вид:) Однако если это делать не самому, надо проявить для этого значимость и необходимость для других:) Я поизучаю данный контекст проблеммы и возможно набросаю несколько классов для этого, возможно:)

Кстати вопрос, а зачем тогда используются репорты встроенные если все и так есть, ради картинок?
 
xnsnet:
Если вопрос стоит о .NET то это проще чем кажется:)

Создаем битмап и рисуем на нем линии:) Можно даже добится такого же сходства:) Я бы так и сделал, так как хранить в базе или просто на диске тысячи картинок накладно, когда можно обойтись потоком данных:) И обеспечить просто напросто хороший вывод данных, не сложно в точности повторить тот же вид:) Однако если это делать не самому, надо проявить для этого значимость и необходимость для других:) Я поизучаю данный контекст проблеммы и возможно набросаю несколько классов для этого, возможно:)
Очень познавательный алгоритм :)
Как ставить точечки в .Net GDI+, я наверняка уточню в MSDN. Вопрос, понятно, в другом. Что, зная в эксперте всю историю сделок и параметры баланса, выгрузить "наружу", и как "снаружи" по этим данным построить график?

Проще говоря, как считаются баланс/средства в отчёте терминала? Можно ведь, и правда, не хранить график, а строить его в форме "налету", зная все данные и алгоритм его формирования.
 
Я так подрузамеваю, что для этого можно использовать FXT файлы, хотя я пока сужу об информации поверхностно, поэтому как не знаю наверняка:) В остальном можно все, другой вопрос в том насколько глубоко забраться в это дело, но я уверен что добраться можно до всего:) Либо об этом расскажут разработчики, либо мы докапаемся сами, вопрос лишь в разнице во времени, которое на это потребуется:) Вот и все что я могу сказать:)
 
Cгенерировать график баланса в формате SVG легко можно  в deinit() штатными средствами MQL. SVG-графика поддерживается сейчас всеми браузерами,  кроме самых отсталых (типа IE)
 

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

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