Терминал при расчете данных отчета сортирует ордера по времени закрытия. А в скрипте этого нет. Пример сортировки ордеров по CloseTime я приводил - Сортировка ордеров
Рашид, спасибо Вам за информацию, обязательно сравню после изменения
скрипта результаты, напишу об этом.
Вы знаете, я поменял код SummaryReport.mq4, добавив в него Вашу функцию int LoadSortedTickets(int & Tickets[]) с http://simple-testing.blogspot.com/2007/07/blog-post_3924.html и использовав её:
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CalculateSummary(double initial_deposit) { int sequence=0, profitseqs=0, lossseqs=0; double sequential=0.0, prevprofit=EMPTY_VALUE, drawdownpercent, drawdown; double maxpeak=initial_deposit, minpeak=initial_deposit, balance=initial_deposit; int trades_total=HistoryTotal(); //---- initialize summaries InitializeSummaries(initial_deposit); // begin: chv added, 09.12.2007 int ordersIdList[]; ArrayResize(ordersIdList, trades_total); LoadSortedTickets(ordersIdList); int iSelectedIndex; // end: chv added, 09.12.2007 //---- for(int i=0; i<trades_total; i++) { // begin: chv added, 09.12.2007 iSelectedIndex = ordersIdList[i]; // //if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if(!OrderSelect(iSelectedIndex, SELECT_BY_POS, MODE_HISTORY)) continue; // end: chv added, 09.12.2007 int type = OrderType(); //---- initial balance not considered
Полный код прикреплен с топику.
В итоге расчёты изменились, но не в лучшую сторону. Чистая прибыль, которая была согласована между скриптом и терминалом, разошлась. И просадки тоже не пришли в норму. Я неверно понял суть того, что нужно изменить?
Алгоритм подсчёта я подправил, конечно же, после функции LoadSortedTickets, возвращающей массив тикетов, выбор ордеров должен идти по номеру тикета, т.е. SELECT_BY_TICKET:
//for(int i=0; i<trades_total; i++) for(int i=0; i<counter; i++) { // begin: chv added, 09.12.2007 iSelectedIndex = ordersIdList[i]; // //if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if(!OrderSelect(iSelectedIndex, SELECT_BY_TICKET)) continue; // end: chv added, 09.12.2007 int type = OrderType(); //---- initial balance not considered
Данные по числу ордеров, чистой прибыли и общей прибыли/убытку сошлись между тем, что показывает терминал в закладке Отчёт, и тем, что выдаёт исправленный алгоритм из функции CalculateSummary() SummaryReport.mq4.
Однако параметры просадки по-прежнему расходятся. Терминал стал считать её по эквити, т.е. правильно, и сортировка ордеров, к сожалению, ничего не меняет.
Небольшая преамбула.
Хочу обратить внимание разработчиков на то, что MetaTrader является де-факто лучшей платформой по автоматизированному трейдингу и автоматизированной обработке торговых данных. Я был на курсах Финама, то, что нужно выделывать с другими терминалами, выгружая для анализа данные в другие программы, никуда не идёт в сравнение, да простят меня их разработчики. Однако в современном мире, имеющем курс на интеграцию и объединение, важным является не только собственный функционал системы, сколько её возможность участвовать в составных системах различных производителей софта, интегрируясь как часть более сложных систем. Терминал имеет почти все нужные параметры для управления им из командной строки из других систем (ps.: кроме флажка Визуализация ;)), однако отсутствие встроенной возможности получения достоверных данных о результатах тестирования и оптимизации снижает возможность применения платформы MetaTrader в качестве составного звена в создаваемых комплексах. Запуски прогнали, а дальше-то что, где их достоверные результаты?
В своё время в споре Windows и OS/2 победила первая (хотя OS/2 была надёжнее и требовала меньше ресурсов), потому что под Windows писали больше софта, и она стала повсеместной платформой.
В связи с этим убедительно прошу разработчиков обратить внимание на данную задачу, и изыскать ресурсы (понимаю, все ушли на фронт MQL5) на её решение, каким-либо образом выдав ключевые параметры (их меньше десятка) прогона терминала с закладки Отчёт в виде, пригодном для автоматизированной обработки, либо описать понятный путь, как их возможно получить средствами MQL/WinAPI.
Заранее спасибо.
Рассчитать все просадки можно и по эквити, пример показан в скрипте Скрипт для расчета MAE и MFE
Уважаемый Рашид, снова возвращаюсь к этой теме после тестов.
По результатам темы был собран файл SummaryReport.mq4 из кода первоначального
SummaryReport.mq4 С. Старикова и кода темы Скрипт для расчета MAE и MFE.
Тесты показали, что чаще всего новый скрипт считает просадку
чуть жёстче, чем показатели терминала в закладке Отчёт (что
подходит). Однако не всегда, были тесты эксперта на M5 GBPJPY, на
которых терминал показал раза в два большую просадку, чем выдал
скрипт. Эксперта, к сожалению, публиковать не могу, это заказная
разработка и поэтому не моя собственность.
Код нового SummaryReport.mq4 прилагается. Используется он в эксперте так:
Блок деклараций переменных:
// SummaryReport:begin --- #include <SummaryReport.mq4> double ExtInitialDeposit; #define OP_BALANCE 6 #define OP_CREDIT 7 // SummaryReport:end ---
Блок в deinit():
if(!IsTesting()) ExtInitialDeposit = CalculateInitialDeposit(); CalculateSummary(ExtInitialDeposit);
и далее запись показателей теста в xml файл.
Однако это не всё. Запуски эксперта показали в некоторых случаях очень долгое время его выполнения. Т.е. на 4-хядерной машине Intel QX6850-1333 Ghz/ HDD speed 10000/ RAM 4 Gb DDR3 за ночь отрабатывало 2-6 тестов в режиме оптимизатора. Если же вернуть эксперту исходный файл SummaryReport. mq4 от Станислава Старикова (прошлый расчёт просадки), то число тестов приходило в норму, несколько сотен за ночь на каждый терминал.
Прошу Вас, если есть возможность, прокоментировать новый код
SummaryReport.mq4 на корректность. Или же вопрос, если показатели терминала
в закладке Отчёт генерируются MQL кодом (не C++ кодом терминала),
возможна ли его открытая публикация от MetaQuotes? Ведь параметры-то
тестов, и просадка в том числе, важные и открыто обсуждаемые
для экспертов на форуме, чемпионате и т.д.
А я не понял в чем проблема преобразовать html файл генерируемого отчета в xml или csv при помощи какого-нибудь текстового процессора типа awk?
Разобрать можно на чём угодно, но формат HTML отчёта нигде не утверждён и может меняться от версии терминала. Для автообработки более подходит xml с опубликованной схемой. Но это полбеды.
Главное - терминал в режиме оптимизатора не выдаёт столько отчётов, сколько прошло тестов. Отчёт будет только один в конце, а прогонов эксперта - много. Тут косяк - нет такой возможности на все тесты.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вопрос уважаемым разработчикам MT4 терминала.
В своё время была опубликована статья Самостоятельная оценка результатов тестирования эксперта Станислава Старикова (stringo), которая дала отличный инстумент по количественной оценке работы эксперта, его показателей. Приложенный в статье файл SummaryReport.mq4 был мной в соответствии с рекомендациями подключен и использован в эксперте для оценки его запусков.
После выхода, кажется, 211-го билда при сравнении показателей, выдаваемых данным кодом SummaryReport.mq4 из эксперта и тем, что показывает сам терминал на закладке Отчёт после прогона теста, видна сильная разница именно по показателям, связанным с просадкой (максимальная просадка, абсолютная просадка, относительная просадка). Сейчас эти показатели дают разницу зачастую в разы от показателей терминала. Рисунок поясняет разницу в показателях.
Прошу уважаемых разработчиков выдать, если это возможно, корректный алгоритм расчёта показателей работы эксперта по просадке.
Как предложение - поскольку эти показатели выдаются терминалом в виде отчёта, но в неудобном для автоматического анализа HTML виде (теги могут меняться без предупреждения в версиях терминала), сделать возможность с параметром командной строки терминала (вместе с TestReport, TestReplaceReport конфигураци при старте) выдавать отчёт в XML формате, это снимет все вопросы с получением подобных результатов. Однако у этого механизма сейчас есть недостаток - отчёт один на запуск терминала, а не на число тестов. Т.е. запуск в режиме тестера даст отношение "Один тест - один отчёт", а вот запуск оптимизатора на все тесты выдаст всего один отчёт, вероятно последний. Остальные прогоны останутся без отчёта и показателей.