Справка по MetaTrader 5Алгоритмический трейдинг, торговые роботыРеальные и сгенерированные тики

Реальные и сгенерированные тики

Для тестирования и оптимизации советников необходимы тики, так как именно по ним работает советник. Тестирование может осуществляться на реальных тиках, предоставляемых брокером, или же на тиках, сгенерированных тестером стратегий на основе минутных данных.

Реальные тики #

Тестирование и оптимизация на реальных тиках являются максимально приближенными к реальным условиям. Вместо сгенерированных на основе минутных данных используются реальные тики, накопленные брокером по финансовым инструментам. Это — тики с бирж и от поставщиков ликвидности.

При тестировании на реальных тиках спред в пределах минутного бара может меняться, тогда как при генерации тиков внутри минуты используется спред, зафиксированный в соответствующем баре.

Если по инструменту транслируется биржевой стакан цен, бары строятся строго по ценам исполнения последней сделки — Last. Событие прихода тика OnTick срабатывает на всех тиках, независимо от того, была ли в них цена Last или нет.

Обратите внимание, что торговые операции всегда совершаются по ценам Bid и Ask, даже если график строится по ценам Last. Например, эксперт получит сигнал по одной цене (Last), но сделку совершит уже по другой (Bid или Ask в зависимости от направления). При использовании режима генерации "Все тики", бары строятся по ценам Bid, а сделки совершаются по Bid и Ask. При этом Ask рассчитывается как Bid + фиксированный спред соответствующего минутного бара.

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

Тиковые данные имеют значительно больший размер, чем минутные. При первом запуске тестирования их скачивание может занять продолжительное время. Скачанные тиковые данные хранятся по месяцам в TKC-файлах в каталоге \bases\[имя торгового сервера]\ticks\[имя символа]\.

Генерация тиков #

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

В тестере стратегий предусмотрены несколько режимов генерации тиков. Ниже описывается наиболее точный режим — "Все тики".

Для баров, имеющих различный тиковый объем, генерация тиков протекает по разному:

Тиковый объем = 1

Для бара с тиковым объемом, равным единице, генерация тиков не происходит, для него записывается тик со значением цены Close (закрытие):

Тиковый объем равен единице

Тиковый объем = 2

Тики для баров с двумя тиками также не генерируется, сначала записывается тик со значением цены Open (открытие), а затем записывается тик со значением цены Close (закрытие):

Тиковый объем равен двум

Тиковый объем >= 3

Для баров, имеющих 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

  • Если у свечи нет какой-либо из теней, то опорные точки соответствующей тени отдаются размаху свечи.
  • Размах свечи генерируется по нечетному количеству опорных точек. Если у размаха четное количество опорных точек, то "лишняя" точка отдается одной из теней при условии, что у тени уже есть 2 точки. В противном случае "лишняя" точка просто пропадает.

Идеальное распределение (3-5-3)

Опорные точки вычисляются как количество пунктов от цены открытия. Идеальное распределение точек (3-5-3) вычисляется следующим образом:

Бычья свеча

Вычисление опорных точек

Изображение

  • Open
  • 3/4*(O — L)
  • 1/2*(O — L)
  • Low
  • (H — L)/3
  • (H — L)*3 — 1
  • 2/3*(H — L)
  • 2/3*(H — L) — 1
  • High
  • 3/4*(H — C)
  • 1/2*(H — C)
  • Close

Бычья свеча

Медвежья свеча

Вычисление опорных точек

Изображение

  • Open
  • 3/4*(O — H)
  • 1/2*(O — H)
  • High
  • (L — H)/3
  • (L — H)/3 + 1
  • 2/3*(L — H)
  • 2/3(L — H) + 1
  • Low
  • 3/4*(L — C)
  • 1/2*(L — C)
  • Close

Медвежья свеча

Свечи "Дожи"

Если свеча является "Дожи" (Close = Open), то анализируются предыдущие свечи. Если предыдущая свеча была восходящей, то данная считается нисходящей, и наоборот.

Свечи "Дожи"

Построение тени из трех точек

Если тень генерируется при помощи трех опорных точек и целые значения 3/4 размера тени и 1/2 размера тени равны (это бывает, когда разница между open и low или open и high не превышает 2 пунктов, т.е. расстояние шагов цены вперед и назад равны), то генерация тени меняется следующим образом:

Бычья свеча

Вычисление опорных точек

Изображение

  • Open
  • Open — 1
  • Open
  • Low

Бычья свеча

Медвежья свеча

Вычисление опорных точек

Изображение

  • Open
  • Open + 1
  • Open
  • High

Медвежья свеча

Аналогичным образом генерируется закрывающая тень.

Построение тени из двух точек

Если тень генерируется при помощи двух опорных точек, то генерация происходит следующим образом:

Бычья свеча

Вычисление опорных точек

Изображение

  • Open
  • Open + 1
  • Low

Бычья свеча

Медвежья свеча

Вычисление опорных точек

Изображение

  • Open
  • Open — 1
  • High

Медвежья свеча

Аналогичным образом генерируется закрывающая тень.

Построение размаха свечи

Размах свечи генерируется волнами в циклах. Если Prev = Low (предыдущая цена  — это цена Low), то используется цикл:

  • N1 = Prev + Step
  • N2 = Prev + Step — 1
  • Prev = N2

Если Prev = High (предыдущая цена — это цена High), то используется цикл:

  • N1 = Prev — Step
  • N2 = Prev — Step + 1
  • Prev = N2

Здесь:

N1, N2 — опорные точки в одном цикле;
Prev — предыдущая цена;
Step — размер шага. Шаг вычисляется по следующей формуле: (H — L — 1)/(Количество циклов) + 1;
Количество циклов — вычисляется по следующей формуле: (Количество опорных точек в размахе + 1)/2.

Размах свечи

Промежуточные тики

Промежуточные тики между опорными точками генерируются по следующим правилам:

  • Если количество тиков больше, чем количество пунктов между опорными точками, то генерируется "пила" (начальное значение +/— 1).
  • Если между опорными точками достаточно много пунктов, то генерируется линейная последовательность тиков.

Режимы генерации тиков #

В окне настроек тестера стратегий можно выбрать режим генерации тиков. Доступны следующие варианты:

Все тики

В данном режиме генерируются все тики: OHLC, а также промежуточные. Порядок такой генерации тиков описан выше.

OHLC на M1

В данном режиме генерируются только тики 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, для которых бары генерируются один раз день, а не один раз в неделю и в месяц соответственно.

Существует ряд ограничений применения режима "Только цены открытия":

  • Нельзя использовать режим торговли "Произвольная задержка";
  • В тестируемом эксперте невозможно обратиться к данным более низкого таймфрейма, чем тот, что используется для тестирования/оптимизации. Например, если тестирование/оптимизация осуществляется на периоде H1, то вы можете обращаться к данным H2, H3, H4 и т.д., но не к данным M30, M20, M10 и т.д. Помимо этого, более старшие таймфреймы, к которым идет обращение, должны быть кратными таймфрейму тестирования. Например, при тестировании на периоде M20 нельзя обратиться к таймфрейму M30, но можно к H1. Эти ограничения обусловлены невозможностью получить данные более низких и не кратных таймфреймов из баров, генерируемых при тестировании/оптимизации.
  • Ограничения по обращению к данным других таймфреймов распространяются и на другие символы, чьи данные используются советником. Однако в этом случае ограничением для каждого символа служит первый таймфрейм, к которому произошло обращение во время тестирования/оптимизации. Например, тестирование осуществляется на символе и периоде EURUSD H1, советник в первый раз обратился к символу GBPUSD M20. В этой ситуации советник в дальнейшем может использовать данные EURUSD H1, H2, и т.д., а также GBPUSD M20, H1, H2 и т.д.

Режим генерации всех тиков является наиболее точным, но в то же время и наиболее медленным. Для быстрого, но грубого тестирования/оптимизации следует использовать режим "Только цены открытия".

Математические вычисления #

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

При включении этого режима, в качестве критерия оптимизации автоматически применяется "Пользовательский критерий оптимизации". Все поля в настройках тестера, кроме режима оптимизации и выбора эксперта, становятся неактивными.

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