Бэктестинг/оптимизация - страница 82

 

Хороший пост о бэктестинге, цене покупки/продажи:

https://www.mql5.com/en/forum/181204

 

Strategytester: LotSize Limit MT4

Здравствуйте,

Как я могу изменить настройки максимального размера лота в тестере стратегий MT$? В настоящее время тестер стратегий не открывает позиции >50 лотов.

и есть ли в тестере стратегий лимит баланса?

Буду признателен за помощь. Спасибо!!!

 
lsteixeira:
Некоторые достойные данные, которые я использовал, были взяты отсюда:

Http://www.histdata.com

Ваше здоровье!!!

Спасибо за совет... я использую тикдату от Ducas с 99% качеством модинга на данный момент. Я не могу сказать, насколько это близко к реальности, но надеюсь, что достаточно близко ^^.

 

[langtitle=fr]Проблема с бэктестом[/langtitle]

[lang=fr]Bonjour tout le monde,

Je me tourne vers vous car j'ai un probleme lors du backtest de mon EA.

Comme vous pourrez voir sur le graphique, il y a une chute brutale et je ne sais pas d ou ca vient j ai un stop loss regler sur 10 pips

Файлы:
graphique.jpg  117 kb
rapport.jpg  97 kb
 

Нормальное завершение работы тестера

targetik:
[lang=fr]Bonjour tout le monde,

Я обращаюсь к вам, у меня возникла проблема во время бэктеста моего советника.

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

Привет, Таргетик,

Это обычный стоп-аут "End Of Strategy Tester"...

Тестер закрывает все открытые сделки, когда он заканчивается... и все ваши активные открытые сделки обычно закрываются с убытком.

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

Надеюсь, это поможет,

Роберт

 

[lang=fr]Merci beaucoup [/lang]

 

Отличная нить!

--

 

Извлечение наибольшего эквити из оптимизаций?

Можно ли в MT4 получить информацию о наибольшем эквити, достигнутом при каждом прогоне любого заданного набора результатов оптимизации?

Насколько я могу судить, MT4 не предоставляет информацию в окне результатов о наибольшем эквити, достигнутом стратегией во время обратного тестирования - ни в результатах оптимизации, ни в отчете от одного ручного прогона. (Ближе всего к этому находится просадка $, которая, как мне кажется, требует, чтобы вы знали значение соответствующей впадины, чтобы определить, каким был предыдущий пик - а об этом можно только догадываться по конечному балансу). Предположительно, тестер стратегии должен был знать точное значение наивысшего капитала в какой-то момент во время своих расчетов. Есть ли способ получить эти данные для результатов оптимизации?

Я могу придумать частичное решение. Наибольший эквити, достигнутый во время одного ручного бэк-теста, можно увидеть, добавив в советник переменную, которая действует как запись "наивысшей водной отметки", достигнутой с точки зрения эквити, а затем распечатать ее в журнал в конце прогона (или когда угодно). Проблема в том, что информация из журнала, похоже, недоступна, когда та же стратегия запускается как часть оптимизации... Это было бы хорошо для небольшого количества ручных прогонов, но не подходит для большого количества оптимизаций.

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

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

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

Кто-нибудь знает лучший метод, который бы работал более эффективно для оптимизации?

 

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

Одним из решений является использование глобальных переменных(Глобальные переменные - Документация MQL4). Как выяснилось, глобальные переменные АРЕ устанавливаются или обновляются во время каждого прогона оптимизации. Я имею в виду глобальные переменные в клиентском терминале, а не только "глобальные переменные" внутри советника. Поскольку переменная является глобальной, вы можете запросить ее с помощью чего-либо вне тестера стратегий. Вы можете просто добавить обычную (двойную) переменную внутри советника, которая обновляет себя до максимального значения эквити каждый тик, а затем установить глобальную переменную на это значение в секции deinit() того же советника. Затем эта глобальная переменная может быть запрошена с помощью GlobalVariableGet() в скрипте на обычном окне графика в терминале после завершения каждого прохода оптимизации, а полученное значение может быть отображено в виде комментария или записано в журнал терминала с помощью Print.

Единственная проблема с этим подходом заключается в том, что вам придется вручную запускать скрипт после каждого прохода оптимизации (до завершения следующего прохода) - так что вам все равно придется сидеть и наблюдать за оптимизацией. Я не думаю, что советник может быть использован для запроса глобальной переменной, потому что советник должен будет запускаться несколько раз, чтобы захватить несколько проходов оптимизации. Скорее всего, вы не будете получать тики во время оптимизации, потому что вы будете отключены от живых данных, чтобы сохранить настройки спреда. Я предполагаю, что различные методы отправки "фальшивых тиков" советнику не будут работать от прогона оптимизации до обычного графика терминала...

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

Вы можете обойти это, установив отдельную глобальную переменную для каждого прохода оптимизации, а затем считать их все в конце, нажав F3. Это можно сделать с помощью операции цикла в deinit() для получения текущего количества глобальных переменных ("n"), а затем назвать текущую глобальную переменную "n+1" и установить ее на соответствующее значение равенства. Таким образом, вы сможете просмотреть их все в конце, нажав F3, и имя переменной будет соответствовать номеру прохода (при условии, что в начале оптимизации не существовало глобальных переменных - чего можно легко добиться, запустив скрипт с GlobalVariablesDeleteAll() перед каждой оптимизацией). Я не уверен, каково максимальное количество глобальных переменных - но если у вас разумное количество оптимизаций, то все должно быть в порядке. К сожалению, я не думаю, что данные, полученные при нажатии F3, можно экспортировать, поэтому вам придется скопировать их с помощью снимка экрана или старой доброй ручки и бумаги (или просто иметь отдельную установку MT4 для каждой оптимизации, если вы используете огромное количество проходов). Я полагаю, что в качестве альтернативы вы можете написать скрипт, который будет печатать все имена и значения глобальных переменных в журнал терминала после завершения оптимизации, а затем экспортировать этот журнал.

Этот метод, конечно, можно использовать для получения практически любых данных из оптимизации, вместо того, чтобы полагаться на ограниченную информацию окна результатов оптимизации в Strategy Tester! Надеюсь, это кому-нибудь поможет :-)

 

p.s. - Я только что понял, что и Print, и Alert допускают только 64 символа, поэтому вы не сможете написать скрипт для печати глобальных переменных, если вы используете более чем горстку оптимизаций. (Если только вы не печатали каждую глобальную переменную в отдельной строке журнала терминала, а затем щелкали и копировали их все по одной в excel или подобную программу. Похоже, нет способа выбрать более одной записи в журнале в любой момент времени).

Чтобы обойти это, можно использовать операцию цикла для последовательной записи значений каждой из глобальных переменных в массивную строку (используя \n для размещения значения каждой глобальной переменной на новой строке), а затем отправить эту строку себе по электронной почте с помощью SendMail(). Похоже, что в Send Mail нет ограничения на количество символов. Вы можете легко скопировать эти данные электронной почты в текстовый документ на вашем компьютере и использовать кнопку Data\Import External Data\Import Data в excel, чтобы импортировать эти данные в любом формате. Если вы также скопируете результаты оптимизации в текстовый документ, а затем импортируете их в excel тем же методом (выбрав "Delimited" на первом экране, затем поставив галочку в поле "Other" и набрав "=" в этом поле ввода, чтобы отделить текст от чисел), вы можете затем просто выстроить данные из вашей электронной почты в ряд с данными, экспортированными непосредственно из оптимизации. Таким образом, информация, которую вы извлекли из оптимизации с помощью глобальных переменных, будет находиться в той же строке, что и соответствующие данные, экспортированные из оптимизации для каждого конкретного прохода. Проще простого.