Заставить тестер работать не фактической истории тиков, а по цене закрытия свечи

 

Что-то мучаемся с тестером. Раньше не думал, что на таком примитиве можно будет застрять.

Для разработки "скелета" взяли самое элементарное: цена пересекает вверх МА - лонг, пересекает вниз - шорт. Самая элементарная реверсивная штука. Развороты хочу делать двумя сделками. Т.е. первая - это выход из позиции, вторая - вход в новую. И здесь полезли непонятки. 

Для начала хотелось бы понять: к примеру, в своё время я тестировал стратегии в АмиБрокере. И там я могу просто тупо указать, что цена сделки - это цена закрытия свечи, на которой прошел сигнал. Ну так мне удобнее для общей картины. Можно ли что-то подобное сделать в МТ5? Ибо тестер постоянно лезет в фактические сдели, независимо от того, какой вид моделирования стоит. Если я работаю лимитками, то он просто может её не удовлетворить, если цена не дойдет или там не хватит объема. Ну оно и понятно. Если по маркету, то вообще чудеса - либо по несуществующим ценам проводит, либо какие-то адские проскальзывания. Как быть?

 
Чтобы заставить ордера исполняться по ценам закрытия свечи, нужно быть потомственной гадалкой, способной определить момент закрытия до того, как это закрытие реально произошло. Очень хорошо, что разработчики терминала не брали пример с АмиБрокера
 
На ликвидном инструменте цена закрытия свечи i равна открытию на следующей свече - а это режим по ценам открытия.
 
Ilya Malev #:
Чтобы заставить ордера исполняться по ценам закрытия свечи, нужно быть потомственной гадалкой, способной определить момент закрытия до того, как это закрытие реально произошло. Очень хорошо, что разработчики терминала не брали пример с АмиБрокера

Вы не поняли мысли. Речь тут не про гадалку. Речь не про исполнение ордера по ценам закрытия, тем более будущей свечи, а именно так Вы, видимо, поняли.

Речь про обычное моделирование. В рамках которого я хочу получить результат идеальной отработки алгоритма. Просто для понимания. Дальше при необходимости я смогу сам уже добавить и комиссии, и проскальзывания. Но изначально мне нужен идеальный проход. Вот есть у меня самая простая система - пробой МА. Когда цена пробивает МА снизу вверх и закрывается выше, то на следующей свече происходит вход. Мне необходимо, чтобы цена этого входа прописалась в моих виртуальных сделок для тестера как цена закрытия предыдущей (сигнальной) свечи. Да, в реальности новая свеча может открыться выше цены закрытия прошлой, и лимитка, выставленная по цене закрытия прошлой, может быть не удовлетворена. Но это уже вопрос второй, который будет решаться в реальной торговли уже существующим механизмом набора позиции через переставления заявок. Но именно для тестера мне просто нужна цена закрытия прошлой свечи.


Но пока я не вижу варианта, как это сделать. Поэтому и интересуюсь у почтенной публики, есть ли такие варианты.

К примеру, я не совсем понимаю принцип отработки данных систем моделирования:

Очевидно, в истории МТ5 есть данные о самой сделки и данные о ближайшем аске и биде. Получается, на этой основе происходит моделирования системы по первым двум пунктам? И он у меня начинает пропускать входы, если я прописываю вход лимиткой. Почему? А, видимо, на ближайшем аске не хватает объёма для исполнения всей лимитки и она просто не отрабатывает. В реальной торговле всё это было бы решено, но здесь не получается.

Если я вхожу по рынку, то тут вообще чудеса. К примеру, случаются такие сделки:


По ценам, которых вообще не было. Ну как это?


При режиме моделирования OHLC на 1м возникают какие-то дикие проскальзывания, когда сделки проходят на хвостах свечей

Тут система получается разворотная. Одна сделка - это выход из позиции, вторая - вход в обратку. Вот вторая улетает на хвосты. И каков принцип моделирования данного вида? Непонятно.

Т.е. почему не получается заставить систему нормально тестироваться даже на таком простом этапе. На элементарной системе.

 
Stanislav Korotky #:
На ликвидном инструменте цена закрытия свечи i равна открытию на следующей свече - а это режим по ценам открытия.

С режимом открытия тоже какая-то беда. Вот смотрите:

Да, цены вроде нормально. Но! Я напомню, тут используется разворотная система через две операции. Т.е. цена пробивает МА вверх - это у нас сразу выход из шорта, если система находилась в нём, а после этого вход в лонг. Ну и вот сразу вторая сделка: происходит покупка, направление out, т.е. выход из шорта. Но открытие лонга не происходит. Хотя должно, ведь есть условие - цена пересекла МА. Хотя, возможно, надо тут поработать с логикой, ибо у нас сейчас проверка стоит: не выставляется новая заявка, пока позиция открыта.

 
Anton Polkovnikov #:

Если я вхожу по рынку, то тут вообще чудеса. К примеру, случаются такие сделки:

По ценам, которых вообще не было. Ну как это?


Свечи / бары строятся по ценам Бид, а закрытие позиции на продажу - это покупка. Она производится по цене Аск, которой не видно на графике.
Спред по неликвидам большой, поэтому так и происходит. По сути классика.

 
Anton Polkovnikov #:

С режимом открытия тоже какая-то беда. Вот смотрите:

Да, цены вроде нормально. Но! Я напомню, тут используется разворотная система через две операции. Т.е. цена пробивает МА вверх - это у нас сразу выход из шорта, если система находилась в нём, а после этого вход в лонг. Ну и вот сразу вторая сделка: происходит покупка, направление out, т.е. выход из шорта. Но открытие лонга не происходит. Хотя должно, ведь есть условие - цена пересекла МА. Хотя, возможно, надо тут поработать с логикой, ибо у нас сейчас проверка стоит: не выставляется новая заявка, пока позиция открыта.

Чтобы перевернуть позицию по одному сигналу, нужно делать трейд двойного объема (или по крайней мере, бОльшего чем был до того, если лоты разные). Например, была продажа -1, делаем +2 - получили покупку. Если счет с хеджингом, затем делаем close_by, чтобы схлопнуть в одну позицию без уплаты спреда, на неттинге позиция автоматом перевернется.

На одном тике по идее можно и два ордера по отдельности послать (закрытие и открытие), но при этом потеряете 2 спреда, а не 1 в отличие от close_by. Плюс адекватность совпадения теста с торговлей в онлайн при таком подходе будет под вопросом. Если две сделки не происходят - нужно смотреть, что в коде написано. Без исходника трудно сказать, в чем проблема.

 
Stanislav Korotky #:
затем делаем close_by
Если ДЦ это допускает.
 
Anton Polkovnikov #:
По ценам, которых вообще не было. Ну как это?
Это называется цена Ask, ее отрисовка отсутствует на графике. Вы можете создать свой кастомный инструмент, на основе данного, и в нем приравнять спред к 0. Тогда будете рисовать на графиках бэктестов то, что душе угодно. Но открывать или закрывать сделки по ценам закрытия свечей все равно не получится. Разве что если заранее тик в тик записывая в памяти перед тестом их тайминг
 
Anton Polkovnikov:

Что-то мучаемся с тестером. Раньше не думал, что на таком примитиве можно будет застрять.

Для разработки "скелета" взяли самое элементарное: цена пересекает вверх МА - лонг, пересекает вниз - шорт. Самая элементарная реверсивная штука. Развороты хочу делать двумя сделками. Т.е. первая - это выход из позиции, вторая - вход в новую. И здесь полезли непонятки. 

Для начала хотелось бы понять: к примеру, в своё время я тестировал стратегии в АмиБрокере. И там я могу просто тупо указать, что цена сделки - это цена закрытия свечи, на которой прошел сигнал. Ну так мне удобнее для общей картины. Можно ли что-то подобное сделать в МТ5? Ибо тестер постоянно лезет в фактические сдели, независимо от того, какой вид моделирования стоит. Если я работаю лимитками, то он просто может её не удовлетворить, если цена не дойдет или там не хватит объема. Ну оно и понятно. Если по маркету, то вообще чудеса - либо по несуществующим ценам проводит, либо какие-то адские проскальзывания. Как быть?

Вы для начала возьмите готовый советник с коде базы или из статей по пересечению МА и его смотрите и тестируйте по ценам открытия по модели на М1 можно для точности и в советнике заложите логику работы по ценам открытия нового бара (свечи).

Вот как раз нашел по памяти - знакомитесь со статье с ее материалом и в конце советник МА - его посмотрите и покрутите он и на форексе ок будет торговать если его доработать.... или сразу будет работать....

вот в идеале надо ставить таймфрейм М1 на модели по ценам открытия и в советнике уже использовать в коде те таймфреймы которые надо для торгов... для начала можете и на текущем таймфрейме делать для понимания работы, вообще на М1 качество лучше по части точности... на картинке Н1 вы ставите всегда М1 и в советнике уже явно указываете те таймфреймы или таймфрейм который он использует для торгов!  Это оптимальный вариант для понимания процесса тестирования и логики робота на МА.

вот как раз логика торгов в роботе то что вам нужно

Как освоите - далее двигаетесь и по коду и по тестеру как он работает с вайбкодингом в том числе!!! )

Статья хоть и старая, но основное в ней актуально и по сей день!

правильная постановка вопроса: Заставить тестер работать не фактической истории тиков, а по цене ОТКРЫТИЯ свечи.

в СТАТЬЕ вариант для неттинга: 

//+------------------------------------------------------------------+
//| Return count volume for trade/                                   |
//+------------------------------------------------------------------+
double GetVolume()
  {
   if(PositionSelect(Symbol()))return Volume*2.0;
   return Volume;
  }

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


Как обезопасить себя и своего эксперта при торговле на Московской бирже
Как обезопасить себя и своего эксперта при торговле на Московской бирже
  • 2015.06.18
  • www.mql5.com
В статье подробно описываются методы работы, призванные обеспечить безопасность совершения торговых операций на биржевых и малоликвидных рынках, на примере срочной секции Московской биржи. Статья является логическим продолжением статьи "Основы биржевого ценообразования на примере срочной секции Московской биржи", в которой даны теоретические основы биржевой торговли, но носит более практический характер.
 

костыльный метод - сделать Custom символ, у которого все тики в течении например M1 одинаковы и равны первому в минуте и ask=bid (спред 0). Или вообще только один тик на бар, ровно по открытию. 

на таком костыле можно будет "тестировать" только то что не использует цены high/low