В статье LifeHack для трейдера: один бэк-тест хорошо, а четыре – лучше показано как запустить тестирование/оптимизацию из другого терминала. Добавляем автоматический парсинг и модификацию исходного кода на лету и в итого объединяем две статьи в одну.
Это чтобы любой советник/индикатор автоматически наделять доп. возможностями, которыми он не обладал?
Для парсинга и модификации исходного кода понадобится DLL. А ведь можно просто инклудник написать и доп. возможности появятся аналогично. По крайней мере в Вашем примере про визуализацию Оптимизации такое подключение всегда будет работать через инклудник.
А вот если в исходнике есть препроцессинг, то парсинг может быть бессилен здесь.
Для парсинга и модификации исходного кода понадобится DLL. А ведь можно просто инклудник написать и доп. возможности появятся аналогично. По крайней мере в Вашем примере про визуализацию Оптимизации такое подключение всегда будет работать через инклудник.
Я не говорил про запрет на DLL, да - он будет использоваться. Парсим мы для того, чтобы автоматическии найти место, куда вставить инклюдник и прописать в нужные обработчики языка MQL5 вызовы из этого инклюдника.
Делаем все это на лету, и тогда можно будет любой советник в исходном коде взять из одного терминала и перекинуть (с модификацией кода на лету) на оптимизацию/тестирование в другой терминал и получить результат. И никакого ручного вмешательства в исходный код. Двумя/тремя кликами мышки.
Я не говорил про запрет на DLL, да - он будет использоваться. Парсим мы для того, чтобы автоматическии найти место, куда вставить инклюдник и прописать в нужные обработчики языка MQL5 вызовы из этого инклюдника.
Делаем все это на лету, и тогда можно будет любой советник в исходном коде взять из одного терминала и перекинуть (с модификацией кода на лету) на оптимизацию/тестирование в другой терминал и получить результат. И никакого ручного вмешательства в исходный код. Двумя/тремя кликами мышки.
Возможно, не достаточно досконально вижу потенциальные проблемы, но, наверное, парсить не нужно. Можно по инклуднику в начале и в конце mq5-файла автоматом поставить без парсинга.
Парсинг работать не будет в некоторых случаях - препроцессор.
Rashid Umarov: Если в советнике уже есть функций OnTester(), то просто добавить её нельзя - нужно вставить точно кусок кода в уже имеющуюся функцию OnTester().
Как раз в этом проблем нет никаких. Проблема определить, существует ли OnTester или нет в исходном коде.
Это пока чисто академическая проблема - попробуйте провести голосование и выяснить, каков процент программистом реально пользуется подобными макросами.
Кроме того, можно будет распарсить и такие варианты.
На случай, если OnTester существует, всегда будет работать такой подход (и ничего парсить не потребуется совсем)
#define OnTester Tmp_OnTester
// НАЧАЛО ИСХОДНИКА, В КОТОРЫЙ ВМЕШИВАЕМСЯdoubleOnTester()
{
Print("Original");
return(0);
}
// КОНЕЦ ИСХОДНИКА, В КОТОРЫЙ ВМЕШИВАЕМСЯ#undef OnTesterdoubleOnTester()
{
Print("Addon");
return(Tmp_OnTester());
}
На случай, если OnTester отсутствует - еще проще, конечно. Если бы можно было понять, что OnTester определен без парсинга - было бы совсем здорово.
Решил задачу без парсинга! Статья не актуальна теперь. Вот так выглядит
#include "Addon_Begin.mqh"#include "Addon_Body.mqh"// Здесь прописано, что и куда добавляем//----------------// Здесь исходник, который подвергнется изменению//----------------#include "Addon_End.mqh"
Вместо парсинга нужно только автоматом уметь добавлять две строчки в начале и одну - в конце.
Например, в статье Визуализируй стратегию в тестере MetaTrader 5 показано как визуализировать оптимизацию, достаточно в код добавить несколько функций
В статье LifeHack для трейдера: один бэк-тест хорошо, а четыре – лучше показано как запустить тестирование/оптимизацию из другого терминала. Добавляем автоматический парсинг и модификацию исходного кода на лету и в итого объединяем две статьи в одну.
Это чтобы любой советник/индикатор автоматически наделять доп. возможностями, которыми он не обладал?
Для парсинга и модификации исходного кода понадобится DLL. А ведь можно просто инклудник написать и доп. возможности появятся аналогично. По крайней мере в Вашем примере про визуализацию Оптимизации такое подключение всегда будет работать через инклудник.
А вот если в исходнике есть препроцессинг, то парсинг может быть бессилен здесь.
Для парсинга и модификации исходного кода понадобится DLL. А ведь можно просто инклудник написать и доп. возможности появятся аналогично. По крайней мере в Вашем примере про визуализацию Оптимизации такое подключение всегда будет работать через инклудник.
Я не говорил про запрет на DLL, да - он будет использоваться. Парсим мы для того, чтобы автоматическии найти место, куда вставить инклюдник и прописать в нужные обработчики языка MQL5 вызовы из этого инклюдника.
Делаем все это на лету, и тогда можно будет любой советник в исходном коде взять из одного терминала и перекинуть (с модификацией кода на лету) на оптимизацию/тестирование в другой терминал и получить результат. И никакого ручного вмешательства в исходный код. Двумя/тремя кликами мышки.
Я не говорил про запрет на DLL, да - он будет использоваться. Парсим мы для того, чтобы автоматическии найти место, куда вставить инклюдник и прописать в нужные обработчики языка MQL5 вызовы из этого инклюдника.
Делаем все это на лету, и тогда можно будет любой советник в исходном коде взять из одного терминала и перекинуть (с модификацией кода на лету) на оптимизацию/тестирование в другой терминал и получить результат. И никакого ручного вмешательства в исходный код. Двумя/тремя кликами мышки.
Возможно, не достаточно досконально вижу потенциальные проблемы, но, наверное, парсить не нужно. Можно по инклуднику в начале и в конце mq5-файла автоматом поставить без парсинга.
Парсинг работать не будет в некоторых случаях - препроцессор.
Если в советнике уже есть функций OnTester(), то просто добавить её нельзя - нужно вставить точно кусок кода в уже имеющуюся функцию OnTester().
Как раз в этом проблем нет никаких. Проблема определить, существует ли OnTester или нет в исходном коде.
Как раз в этом проблем нет никаких. Проблема определить, существует ли OnTester или нет в исходном коде.
Это не проблема - распарсить код с помощью регулярных выражений.
И здесь не будет проблемы?
Это пока чисто академическая проблема - попробуйте провести голосование и выяснить, каков процент программистом реально пользуется подобными макросами.
Кроме того, можно будет распарсить и такие варианты.