Нет с этим вопросом я еще не эксперементировал. Но я не совсем понимаю смысл связывания XML файла с существованием HTM отчета вы ведь не парсите его, после завершения процесса терминала, будет и XML и HTM файлы отчета, словом в совокупности, после чего их можно скопировать или обработать, а затем удалить или просто перенести с другими именами в папку своей программы и повторять операцию столько раз сколько нужно. Может я чего-то не учитываю? Но я думаю что вы просто не с той стороны подошли к поставленной задаче:) Вы ведь все равно дожидаетесь завершения работы процесса терминала, а значит после каждого завершения это можно беспрепятственно делать.
Не совсем так. В режиме тестера - да, поскольку в нём один прогон терминала даёт один прогон эксперта: peer-to-peer. А в режиме оптимизатора один прогон терминала (как процесса) даёт множество прогонов эксперта, причём число заранее неизвестно (хотя посчитать его можно, перемножив числа всех комбинаций перебираемых параметров), но отчёт в этом случае всего один, либо при TestReplaceReport = false их несколько, но генерируются они после завершения процесса терминала, т.е. я не могу сопоставить в режиме оптимизатора множество XML файлов-итогов прогонов эксперта с множеством файлов-отчётов терминала. Какой кому соответствует?
Мне хочется хранить в SQL базе на все прогоны эксперта, помимо числовых итогов, и картинки движения баланса, выдаваемые отчётом терминала, для дальнейшего просмотра.
Ага, вот теперь я понял, в чем проблемма... Да это действительно проблемма.
Разве что только по порядку создания используя глобальные переменные, в таком раскладе можно сопоставить файлы и то это будет достаточно
неудобно, потому как сбрасывать счетчик надо при каждой загрузке
процесса, а глобальные переменные имеют свойство сохранятся.
Счетчик можно использовать если он не сохраняется. Ну как говорится
проверяя существование первого файла, можно сбрасывать счетчик
в глобальных переменных. При этом надо предварительно вычищать
папку.
Я бы для этого использовал свою библиотеку вгружающую .NET она
не выгружается, так как создает свои потоки в процессе, за счет
чего я имею возможность пользоваться глобальной памятью на
время работы процесса, самым простым способом. Создаем на MC++
библиотеку и используем стандартный экспорт, без точки входа.
Но ради такой мелочи, городить огород это смешно:)))) Хотя не лешено
смысла:) Честно говоря я это начал делать для того чтобы иметь
именно такие глобальные переменные, но в расширенном понимании,
например имея в качестве уникального наименования такой переменной,
любое число параметров и значений не говоря о типах, асоциативного
маштаба, чтобы не приходилось, в наименование переменной вкладывать
все что имею и иметь больше одного значения и любого типа. Но
пока я не доконца представляю себе как это будет выглядеть в
результате, реальное удобство очень спорно.
Не вижу, к сожалению, критерия и возможности получения к каждому прогону эксперта и текстовых, и графических результатов (в оптимизаторе).
Либо эту картинку при чтении 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 то это проще чем кажется:)
Создаем битмап и рисуем на нем линии:) Можно даже добится такого же сходства:) Я бы так и сделал, так как хранить в базе или просто на диске тысячи картинок накладно, когда можно обойтись потоком данных:) И обеспечить просто напросто хороший вывод данных, не сложно в точности повторить тот же вид:) Однако если это делать не самому, надо проявить для этого значимость и необходимость для других:) Я поизучаю данный контекст проблеммы и возможно набросаю несколько классов для этого, возможно:)
Как ставить точечки в .Net GDI+, я наверняка уточню в MSDN. Вопрос, понятно, в другом. Что, зная в эксперте всю историю сделок и параметры баланса, выгрузить "наружу", и как "снаружи" по этим данным построить график?
Проще говоря, как считаются баланс/средства в отчёте терминала? Можно ведь, и правда, не хранить график, а строить его в форме "налету", зная все данные и алгоритм его формирования.
Я говорю не о способах рисования графики, а об алгоритме формирования баланса/средств. Он мне пока неизвестен. А как рисовать
линии и точки, дело десятое.
Подскажите, пожалуйста, алгоритм.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хочу обратить внимание уважаемых разработчиков на следующую задачу.
![](https://c.mql5.com/mql4/forum/2007/04/image5.png)
![](https://c.mql5.com/mql4/forum/2007/04/image1.png)
![](https://c.mql5.com/mql4/forum/2007/04/image3.png)
![](https://c.mql5.com/mql4/forum/2007/04/image2.png)
![](https://c.mql5.com/mql4/forum/2007/04/image4.png)
![](https://c.mql5.com/mql4/forum/2007/04/image6.png)
Я запускаю терминал внешним приложением в двух режимах: тестера и оптимизатора. Примерно с таким 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, т.е. файла ещё нет на диске.
Вопрос, как всё же получить на все прогоны эксперта (независимо от режима тестер/оптимизатор) файлы-отчёты и картинки баланса, числом равные числу прогонов эксперта?
Хотелось бы сохранить в базу все изображения движения баланса во всех прогонах эксперта для анализа.
Заранее спасибо разработчикам за действенный ответ.