Библиотеки: Symbol - страница 5

 
Viktar Dzemikhau:
А мне интересно, зачем кастомные символы нужны?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

АЛЬТЕРНАТИВНЫЕ ПРОГРАММЫ ТЕСТИРОВАНИЯ MQL5?

fxsaber, 2016.12.16 15:50

  • Можно изменять самому цены и смотреть зависимость показателей ТС от этого процесса - строить соответствующие графики.
  • Аналогично - с комиссией. При этом изменять саму комиссию и/или вносить часть ее в цену. Опять те же графики ТС.
  • Аналогично с проскальзываниями.
  • По этим графикам можно определить, что ТС вовсе не отстой, если может работать на улучшенных ценах. Далее встанет вопрос поиска подходящего брокера с необходимыми торговыми условиями. Т.е. ТС на текущих ваших брокерах сливает. Но вы знаете, что нужно для профитности и ищите (не обязательно MT5) нужное место для торговли. Многие держали в руках очень достойные ТС, но выбрасывали их, т.к. на текущем брокере они были сливными. А надо было просто поменять брокера под нужные условия. Или выторговать у менеджера пониженную комиссию с соответствующим техническим обоснованием.
  • Можете фильтровать историю цен, выбивая из них шпильные тики. На которых высока вероятность неисполнения лимитного приказа - реджкет. Тем самым тестер не будет исполняться на шпилях, сделав исполнение ближе к реалу. Delay-режим тестера - для маркетов, не для лимитников.
  • Можете фильтровать историю цен, зная, какие цены не влияют на саму ТС. Обычно, 99% тиков никак не влияют на большинство ТС. Это позволяет на порядки ускорить тестирование ТС. Получается быстрее Облака - на локальной машине+бесплатно.
  • Можно брать стороннюю тиковую историю - не MT5. И сразу понять, насколько подходит источник по торговым условиям к вашей ТС.
  • Можно синхронизировать истории цен с разных символов, чтобы не возникали ложные арбитражные ситуации.
  • Можно запускать статистические советники в тестере на разных ценовых историях и сравнивать торговые условия.
  • Можно сравнивать лаги между различными фидами.
  • Можно убирать явные ошибки в истории цен, заполнять дыры.
  • Можно генерировать свою историю цен с нужными стат. данными - Монте-Карлить ТС.
  • Можно генерировать историю цен синтетических символов и прогонять на них ТС.
  • ...

Некоторые вещи реализованы в этой ветке.

 
fxsaber:

В MT5-тестере, как правило (форекс, например), лимитные ордера имеют положительное проскальзывание, что приводит к самообману (иногда даже в виде тестерных граалей на реальных тиках!)

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


1. Если исходный символ (открытого графика) не кастомный или счет хеджевый, запустить на графике символа этот скрипт

2. Если счет хеджевый (присутствует слово Hedge в заголовке окна Терминала), зайти на любой неттинговый счет (например, MetaQuotes-Demo) и перезагрузить Терминал.

3. На текущем чарте запустить уже этот скрипт

4. Выбираем в Тестере полученный кастомный символ


Теперь лимитные ордера скользить не будут!

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Пиши и зарабатывай на MQL5

fxsaber, 2018.09.10 14:25

"Критерии для принудительного обрыва прохода Оптимизации".

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

Особенно актуально для кастомных символов, т.к. там сделки совершаются и при отрицательном балансе.

то простым ExpertRemove не обойтись, т.к. идет принудительное закрытие текущих позиций по нулевой last-цене в случае, если по ней нет данных в кастомных символах (чаще всего).


Поэтому, чтобы все же выйти из бэктеста без кочерги, нужно перед ExpertRemove сделать следующее

// Закрывает позиции через лимитные ордера
bool CloseAll()
{
  bool Res = true;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS))
      Res &= (OrderType() > OP_SELL) ? OrderDelete(OrderTicket())
                                     : OrderSend(OrderSymbol(), OrderType() ? OP_BUYLIMIT : OP_SELLLIMIT , OrderLots(), OrderClosePrice(), 100, 0, 0) && false;
    
  return(Res);
}

void OnTick( void )
{
  if (IsRemove() && CloseAll())
    ExpertRemove();
}


Заметьте, что закрытие на текущем тике будет только на неттинге (где и реализуется исходная задача убрать проскальзывания лимитных ордеров), т.к.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Symbol

fxsaber, 2018.04.06 16:43

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


Обратите внимание, важен не просто биржевой символ, но и  неттинговый счет. Например, можно взять MOEX-символ на Hedge-MQ-Demo, но он не будет исполняться так (и в Тестере), как на том же Netting-MQ-Demo.

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

Поэтому иногда нужно дожидаться следующего тика.


Вот такие пляски.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Symbol

fxsaber, 2018.04.07 22:37

Итог

По реальным тикам количество тиков уменьшилось в 16 раз (самый легкий фильтр), скорость Оптимизации выросла в 14 раз, качество не пострадало совсем (анализ, что сюда не вошел). Конечно, подобное можно проделать только при написании ТС определенным образом. В частности, с отсутствием анализа баров.

Предыдущее бесплатное универсальное ускорение давало рост лишь в два раза. Текущее - тоже бесплатное (качество не страдает), но менее универсальное. Однако, отдача более, чем на порядок. Теперь Оптимизирую ТС только так. Не ошибся.

Раз тема касается ускорения, то вот еще один рецепт ускорения

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.09.11 17:15

Tester папку перенес на 5Gb RAMDisk и в MT5-директории выполнил

mklink /j Tester z:\Tester


Теперь SSD спит спокойно, Оптимизация стала в ~1.5 раза (на глаз) быстрее, бесплатно!

Заодно SSD не убивается.

 
fxsaber:

простым ExpertRemove не обойтись, т.к. идет принудительное закрытие текущих позиций по нулевой last-цене в случае, если по ней нет данных в кастомных символах (чаще всего).


Вот такие пляски.

Костыли еще и в другом

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.09.12 18:30

На видео

биржевой инструмент на реальных тиках. Бары строятся по Bid, ласт-данных нет, открыта BUY-позиция. Хорошо видно, что текущая цена закрытия позиции

PositionGetDouble(POSITION_PRICE_CURRENT)

равна постоянно нулю, несмотря на то, что Bid вовсю меняется. Как объяснить Тестеру, что биржевой символ должен закрывать BUY-позицию по Bid? Сейчас даже эквити не вычисляется.


Поэтому пока единственное решение - ласты делать (Bid+Ask)/2.

 
fxsaber:

Раз тема касается ускорения

Проход Тестера "по реальным тикам" за три месяца (8 млн тиков) занимает 100 мс (4000 OrderSend, 800 сделок + логика EA). Рецепт - кастомные символы.

 

Спасибо за код. На его основе наваял кое-что себе... Правда немного подправил метод клонирования, чтобы можно было загружать какой-то определённый участок истории. Иначе, если тиков очень много, то отъедает много оперативки.

bool CiCustomSymbol::Clone(const string _src_symbol,const ulong _from_msc=0,const ulong _to_msc=LONG_MAX)
 
Denis Kirichenko:

немного подправил метод клонирования, чтобы можно было загружать какой-то определённый участок истории. Иначе, если тиков очень много, то отъедает много оперативки.

Обновил с учетом Вашего замечания, Спасибо.

 

Ещё создал себе 2 метода, позволяющие загрузить кастомную историю из файла . Допустим, есть 2 файла с тиками и минутками. Стоит задача подгрузить их в базу тиков и котировок выбранного символа.

bool              LoadTicks(const string _src_file_name);
bool              LoadRates(const string _src_file_name);
 
Denis Kirichenko:

Ещё создал себе 2 метода, позволяющие загрузить кастомную историю из файла . Допустим, есть 2 файла с тиками и минутками. Стоит задача подгрузить их в базу тиков и котировок выбранного символа.

Так формат не определен же в общем случае.

 
fxsaber:

Так формат не определен же в общем случае.

Да, но над этим нужно подумать. Но у меня есть архивы тиков с заданным форматом, под него пока и сделал. Достаточно простой: <DATE> ,<TIME> ,<BID>,<ASK>.

Причина обращения: