Для тестирования и оптимизации советников необходимы тики, так как именно по ним работает советник. Тестирование может осуществляться на реальных тиках, предоставляемых брокером, или же на тиках, сгенерированных тестером стратегий на основе минутных данных.
Тестирование и оптимизация на реальных тиках являются максимально приближенными к реальным условиям. Вместо сгенерированных на основе минутных данных используются реальные тики, накопленные брокером по финансовым инструментам. Это — тики с бирж и от поставщиков ликвидности.
При тестировании на реальных тиках спред в пределах минутного бара может меняться, тогда как при генерации тиков внутри минуты используется спред, зафиксированный в соответствующем баре.
Если по инструменту транслируется биржевой стакан цен, бары строятся строго по ценам исполнения последней сделки — Last. Событие прихода тика OnTick срабатывает на всех тиках, независимо от того, была ли в них цена Last или нет.
Обратите внимание, что торговые операции всегда совершаются по ценам Bid и Ask, даже если график строится по ценам Last. Например, эксперт получит сигнал по одной цене (Last), но сделку совершит уже по другой (Bid или Ask в зависимости от направления). При использовании режима генерации "Все тики", бары строятся по ценам Bid, а сделки совершаются по Bid и Ask. При этом Ask рассчитывается как Bid + фиксированный спред соответствующего минутного бара.
Если в истории символа есть минутный бар, но тиковых данных за эту минуту нет, тестер сгенерирует тики в режиме "Все тики". Это позволяет протестировать советника на запланированном периоде в случае неполных тиковых данных у брокера. Если в истории символа нет минутного бара, но тиковые данные за эту минуту есть, то эти тики игнорируются. Минутные данные считаются более достоверными.
Тиковые данные имеют значительно больший размер, чем минутные. При первом запуске тестирования их скачивание может занять продолжительное время. Скачанные тиковые данные хранятся по месяцам в TKC-файлах в каталоге \bases\[имя торгового сервера]\ticks\[имя символа]\.
Тестер стратегий генерирует тиковые данные на основе кэшированных минутных записей в целочисленном формате. То есть тестер копирует себе необходимые исторические данные из платформы и переводит их в целочисленный формат для ускорения вычислений.
В тестере стратегий предусмотрены несколько режимов генерации тиков. Ниже описывается наиболее точный режим — "Все тики". |
Для баров, имеющих различный тиковый объем, генерация тиков протекает по разному:
Для бара с тиковым объемом, равным единице, генерация тиков не происходит, для него записывается тик со значением цены Close (закрытие):
Тики для баров с двумя тиками также не генерируется, сначала записывается тик со значением цены Open (открытие), а затем записывается тик со значением цены Close (закрытие):
Для баров, имеющих 3 и более тиков существуют различные схемы генерации тиков, в зависимости от их количества.
Для баров, имеющих три и более тиков, возможны только четыре схемы формирования:
Вариант развития |
Изображение |
|
---|---|---|
Цена сходила в одну сторону и вернулась на уровень цены открытия. Таким образом у бара есть только High (наибольшая цена) или только Low (наименьшая цена). |
||
Цена сходила в одну сторону и вернулась, пробив уровень открытия. В данном случае у бара также есть только High (наибольшая цена) или только Low (наименьшая цена), однако цены закрытия и открытия не равны. |
||
Цена сходила в одну сторону, но не дошла до цены открытия при возвращении назад. |
||
Цена прошла несколько пунктов только в одну сторону. В данном случае у бара нет High и Low. |
Генерация тиков происходит по опорным точкам. Количество этих точек не может превышать тикового объема, а также не может быть более 11 (точка цены открытия не учитывается).
Опорные точки разделены на три части: для формирования открывающей тени, размаха свечи (проход расстояния от между High и Low) и закрывающей тени.
В зависимости от количества тиков, возможны следующие распределения опорных точек:
Количество опорных точек |
Открывающая тень |
Размах свечи |
Закрывающая тень |
---|---|---|---|
11 |
3 |
5 |
3 |
10 |
2 |
6 |
2 |
9 |
2 |
5 |
2 |
8 |
2 |
4 |
2 |
7 |
2 |
3 |
2 |
6 |
1 |
4 |
1 |
5 |
1 |
3 |
1 |
4 |
1 |
2 |
1 |
3 |
1 |
1 |
1 |
|
Опорные точки вычисляются как количество пунктов от цены открытия. Идеальное распределение точек (3-5-3) вычисляется следующим образом:
Бычья свеча
Вычисление опорных точек |
Изображение |
---|---|
|
Медвежья свеча
Вычисление опорных точек |
Изображение |
---|---|
|
Если свеча является "Дожи" (Close = Open), то анализируются предыдущие свечи. Если предыдущая свеча была восходящей, то данная считается нисходящей, и наоборот.
Если тень генерируется при помощи трех опорных точек и целые значения 3/4 размера тени и 1/2 размера тени равны (это бывает, когда разница между open и low или open и high не превышает 2 пунктов, т.е. расстояние шагов цены вперед и назад равны), то генерация тени меняется следующим образом:
Бычья свеча
Вычисление опорных точек |
Изображение |
---|---|
|
Медвежья свеча
Вычисление опорных точек |
Изображение |
---|---|
|
Аналогичным образом генерируется закрывающая тень. |
Если тень генерируется при помощи двух опорных точек, то генерация происходит следующим образом:
Бычья свеча
Вычисление опорных точек |
Изображение |
---|---|
|
Медвежья свеча
Вычисление опорных точек |
Изображение |
---|---|
|
Аналогичным образом генерируется закрывающая тень. |
Размах свечи генерируется волнами в циклах. Если Prev = Low (предыдущая цена — это цена Low), то используется цикл:
Если Prev = High (предыдущая цена — это цена High), то используется цикл:
Здесь:
N1, N2 — опорные точки в одном цикле;
Prev — предыдущая цена;
Step — размер шага. Шаг вычисляется по следующей формуле: (H — L — 1)/(Количество циклов) + 1;
Количество циклов — вычисляется по следующей формуле: (Количество опорных точек в размахе + 1)/2.
Промежуточные тики между опорными точками генерируются по следующим правилам:
В окне настроек тестера стратегий можно выбрать режим генерации тиков. Доступны следующие варианты:
В данном режиме генерируются все тики: OHLC, а также промежуточные. Порядок такой генерации тиков описан выше.
В данном режиме генерируются только тики OHLC минутных баров. Если тиковый объем свечи больше 4, то всегда генерируются только цены Open, High, Low и Close. Если тиковый объем меньше 4, то применяются правила генерации, описанные выше.
Выбор данного режима не означает что тестирование/оптимизация будет проводиться именно на периоде М1. Например, при выборе периода Н1 в режиме "OHLC на M1" цены будут генерироваться на каждом минутном баре для значений Open, High, Low и Close. При этом событие OnTick() эксперта будет также запускаться четыре раза в минуту — на открытии, закрытии, минимуме и максимуме каждого минутного бара, хотя тестирование ведется на H1. |
Фактически, цены OHLC присутствуют в исторических данных. Таким образом, при тестировании генерируется лишь время прихода тиков Open, High, Low и Close, значения же цен берутся из истории.
В данном режиме происходит генерация цен OHLC баров таймфрейма, выбранного для тестирования. Функция эксперта OnTick() запускается только в начале бара (по цене Open). Из-за этой особенности стоп-уровни и отложенные ордера могут срабатывать не по заявленной цене (особенно при тестировании на старших таймфреймах). Но это позволяет быстро провести оценочное тестирование эксперта.
Исключение составляют периоды W1 и MN1, для которых бары генерируются один раз день, а не один раз в неделю и в месяц соответственно. |
Существует ряд ограничений применения режима "Только цены открытия":
Режим генерации всех тиков является наиболее точным, но в то же время и наиболее медленным. Для быстрого, но грубого тестирования/оптимизации следует использовать режим "Только цены открытия". |
Данный режим позволяет использовать тестер стратегий для математических вычислений. Для него не требуются и не загружаются исторические данные и информация о символах, также в нем не генерируются тики. В тестируемых советниках последовательно вызываются только функции OnInit(), OnTester() и OnDeinit().
При включении этого режима, в качестве критерия оптимизации автоматически применяется "Пользовательский критерий оптимизации". Все поля в настройках тестера, кроме режима оптимизации и выбора эксперта, становятся неактивными.
Математические вычисления удобно использовать для задач поиска экстремума математической функции, значение которой должно возвращаться из OnTester(). Оптимизация ведется на поиск максимального значения функции. При большом количестве комбинаций входных параметров математической функции рекомендуется использовать "Генетический алгоритм". Это позволяет существенно ускорить поиск экстремума.