Блог им. HOME

Бэк-тесты всегда мешают плохому танцору.

Предыдущий мой пост был призван помочь понять и осознать роль и место бэктестирования в практике трейдинга. Ну, и заодно — намекнуть на корректные правила использования тестирования исторических данных.

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

   Однако, как и следовало бы ожидать, некоторые не особо восхваляемые в приличном обществе личные качества комментаторов не дали этим «коллегам» возможности разглядеть предложенные возможности.
   Какие контраргументы предложили «коллеги» против бэк-тестирования?
   Увы, самые замшелые и незамысловатые, как-то:
  • бэк-тесты не учитывают уровни ликвидности;
  • сигналы на бэктестах не могут реализоваться в «боевых» условиях, потому что «рынок живой» (что это такое — каждый понимает по-своему);
  • бэк-тесты не учитывают разных аварий на линии коммуникаций или сбоев торгового ПО;
  • в реальности торговый алгоритм выдает одновременно 2 (!) торговых сигнала, робот-скотина «не фильтрует», а на бэк-тестах такого почему-то не бывает;
  • колл-бэки «в реале» не отвечают так, как хотелось бы;
  • бэк-тестирование — это удел презренных теоретиков и необстрелянных «окопников», никогда не бывавших в настоящем бою.
    Ну, и, естественно, еще многая многа чего невысказанного… Смысл только один: «все бэк-тесты — козлы, я один — Д'Артаньян».

    В качестве романтического отступления, предлагаю вспомнить (тем, кто когда-то знал, но забыл) или изучить заново (тем, кто не знал да еще и забыл) басню И.И.Крылова «Лисица и виноград» (ретивым «знайкам» она известна как басня Эзопа или Лафонтена). Тем, кому некогда расширять свой кругозор, буквально в трех словах изложу смысл басни: Не получив ожидаемой выгоды, человеку свойственно обвинять в этом обстоятельства, а не собственную несостоятельность.

   Ну, а теперь предлагаю «пробежаться» по порядку по изложенным выше претензиям к бэктестам.

 

  Первый и, как кажется на первый взгляд, неубийственный аргумент — это тезис о ликвидности, а именно отсутствие нужного объема по нужной цене. Это — проблема, прежде всего, спекулянтов-опционщиков, ибо спреды в стаканах измеряются не долями и не единицами, а десятками процентов, которые очень хочется скорее положить в карман своего депо-счета! Какой сладкий «виноград»! И, главное, вот он, рядом, только руку протяни… Ан, нетушки, дудки! Смотрит такой «трейдер» на свой бэктест, где программа его «затарила» по сладкой цене и «разгрузила» по еще более вкусной, а «в реале» попандос за попандосом, и понимает, что всех волосёшек на всем его хилом тельце не хватит для выражения постигшей его, такого умного и отважного бойца, трагедии.

  Жалко «бойца»! Хотя никто не заставлял его с голым задом на танк бросаться  (наоборот, все ветераны советуют бросить это занятие и «пойти заняться своим прямым делом» (проф.Преображенский)), но всё равно жалко человека. Да и надежда есть, что, хотя он еще молод и неопытен, но, тем не менее, имеет потенциал.

  Так вот, в качестве первого совета: прежде, чем «заряжать» бэктест на обработку данных, объясните ему, этому тупому бэктесту (не Вам же!), что (как вариант) нужный для реализации торговый объем можно собрать в стакане только в интервале(!) цен, а не по одной конкретной цене. Посмотрите, каков средний объем прошел по всем «свечам» (или, как меня тут ехидно «укололи», «по барам») за исторический анализируемый период, и каков был при этом средний ценовой интервал (от High до Low). Вполне возможно, что после этого вашу торговую систему нужно будет капитально пересмотреть.

                Отступление: в квантовой физике есть такое правило — принцип Гейзенберга, гласящее, что «мы никогда не сможем одновременно   определить энергию и координаты квантового объекта», а потому вынуждены использовать некие средние отклонения (интервалы) значений. Применительно к нашей материи это означает: никогда не стройте свою стратегию из расчета «хочу купить/продать конкретный объем по конкретной цене». Грамотный подход: «готов заплатить за нужный мне объем средним разбросом цен от Low до High».

  Я знаю точно, что по торгуемым мной инструментам для «затаривания» нужного объема мне достаточно установить проскальзывание в размере 0,2% (изредка — 0,5%). При таком подходе результаты моих бэк-тестов очень мало разнятся с «боевыми» результатами. Что обеспечивает высокую надежность и предсказуемость моей торговой системы.

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

  С уважением и наилучшими пожеланиями...

  зы: Лучше всего — пишите программы бэктестирования сами!
  ззы: насчет моего опыта прошу не беспокоиться, ибо имел расчетные фирмы на МТБ, на «Гермесе», РТСБ еще в те времена, когда многие здешние «оппоненты» еще и в проекте не состояли. )))

 

★8
21 комментарий
 ззы: насчет моего опыта прошу не беспокоиться, ибо имел расчетные фирмы на МТБ, на «Гермесе», РТСБ еще в те времена, когда многие здешние «оппоненты» еще и в проекте не состояли.
 Надеюсь, данный пост был написан с борта своей яхты, пришвартованной в Монте-Карло? 
avatar
О'Грин, не Монте-Карло. Шумно там, задами толкаются все. Хотя утлая лодчонка имеется, не без того. )))
avatar
Eugene Bright, В таком случае — поздравляю и желаю дальнейшего профита уже на не утлую «лодчонку»! )))
avatar
О'Грин, пасиб! Но люблю скромность во всем.
avatar
Не хватает картинки эквити с бекстеста в стиле «Туземун». 
Дмитрий Овчинников, картинки приведены в постах о графопостроителях. Туземуна нету, но положительная динамика на протяжении более чем полутора лет (по последнему фьючу) — налицо.
avatar
Да, тоже часто встречаюсь с разными заблуждениями по поводу бэктестов, но мой фаворит — это все про переподгонку).
avatar
Replikant_mih, ну, тут, если я правильно Вас понял, палка о двух концах. Подгонка продукта, который ты используешь для себя, — это обман самого себя. А подгонка в коммерческих целях (например, «улучшить» качество продукта, чтобы его «впарить») — это обман других. Я изложил собственное мнение в помощь первым, но никак не на поживу вторым.
avatar
Eugene Bright, Не, я, вроде, про другую подгонку). Про ту, которая оверфиттинг, переоптимизация — другими словами ситуация когда трейдер неверно проанализировал результаты тестировал, недостаточно внимания уделил вычленению закономерности и как следствие имеет неверные ожидания по поводу будущих результатов торговли (читай: выбрал из бэктестов один хороший и ожидает, что результаты в будущем будут соответствовать результатам в прошлом).
avatar
Replikant_mih, понятно, спасибо огромное за важное уточнение!
Да, объективность, — это одно из важнейших требований к постановке эксперимента.
avatar
Насколько правильно при тестировании закладываться на покупку по самой высокой цене свечи при покупке и продажу по самой низкой цене свечи при продаже для лонга? Для шорта, соответственно, наоборот.
В этом случае реальные результаты должны быть лучше.
avatar
u-gyn, да, конечно и обязательно: реальные результаты всегда будут лучше.

Я объясняю это так: 
во-первых, не весь объем в реале пройдет по невыгодной цене, а кое-что будет очень удачно куплено/продано,
во-вторых, если я проектирую эффективную торговую систему, то расчитываю с её помощью использовать некоторое трендовое движение, которое в своей цели значительно превышает самую невыгодную на текущий момент открытия позиции цену. «Пила», конечно, подпортит результат, но тут — вопрос статистики, правильно интерпретировав которую, можно задавать торговый диапазон и порядок выдачи сигналов.

Ну, и, с точки зрения принципа консервативности, если моя ТС показывает положительное матожидание по прибыли при худших условиях, то я уверен почти на 99%, что эта ТС будет тем более эффективна при условиях, хотя бы на чуточку лучших.
avatar
т.е. я использую правильный подход для тестирования. просто только начинаю тестировать свою первую в жизни ТС.
avatar
u-gyn, С почином Вас, коллега!
Не разочаровывайтесь в случае неудачи. Я на своем веку этих систем натестировал сотни, если не тысячи: каждый рынок, каждый инструмент, каждый фрейм. Там есть еще сонм влияющих параметров, даже и не очевидных на первый взгляд. Но — «дорогу осилит идущий»…
avatar
Eugene Bright, спасибо
avatar
Одна из проблем бек тестирования например какого нибудь паттерна это то что не ты ищешь паттерн а машина. И даже если все хорошо то реале ты будешь путаться ищя паттерн на графике. Вывод один нужно самому бар за баром тестировать и находить паттерн.
avatar
ol123, В процессе обучения, а точнее — формализации и представления паттернов в виде аналитического соотношения, ничего особенного, по сравнению с другими стратегиями, нет.

Например, если Вы хорошо знаете, что «падающая звезда» должна иметь вполне конкретное соотношение тела и фитилей, а также — определенное положение относительно предыдущей и последующей «свечи», то всегда сможете формально представить все эти соотношения. А значит, сможете «научить» программу различению паттернов.

Со своей стороны, могу только отметить, что паттерны — это, по моему опыту, не очень надежный показатель рыночной ситуации. Вероятность «попадания» на убытки всё-таки выше, чем в статистических моделях.
avatar
Каждая система, как бы хороша она не была, подчинена рынку. И при изменении рынка система начинает давать сбой и её приходится оптимизировать под сегодняшний рынок.
И самое главное, это найти это окно оптимизации (его размер) и период торговли, когда система работает. Например месяц оптимизации, две недели торгов. После двух недель торгов, мы вновь оптимизируем систему в окне месяц, со сдвигом на две прошлые недели торгов, и вновь запускаем её в торги на две недели. Такой метод ещё называется Wolk Forward. И это очень большой труд, что бы найти такое соотношение оптимизация/форвард, что бы соотношение по прибыли из хотя бы 20 прогонов было 50/50
Андрей Починчук, ну, про walk-forward (в отличие от Wolk Forward) я что-то слышал еще лет 20 назад.
Мое мнение: да, работы тут — непочатый край. Однако, не стоит забывать, что затраты на поиск решения истины не должны превышать всех «вкусняшек» от её использования.
Eugene Logunov уже неоднократно абсолютно верно отмечал в своих постах о необходимости построения МАКСИМАЛЬНО ПРОСТЫХ торговых систем. Я полностью разделяю это его мнение. Мало того, полагаю, что Вам это известно, количество внутренних ошибок в системе растет экспоненциально при каждом её очередном усложнении.
С другой стороны, если такая задача текущей оптимизации всё же является насущной, то тем более нужно написать свою программу бэк-тестирования и запускать её с нужной периодичностью.
Что ж тут плохого?
Просто я запускаю такую задачу верификации моего робота и бэк-тестов один раз в квартал-полгода-год, когда робот роллирует позицию.
avatar
Грамотный подход: «готов заплатить за нужный мне объем средним разбросом цен от Low до High».Не только за объем, но и прибыль также усредняется .+
avatar
ezomm, Да, так и получается.
avatar

теги блога Eugene Bright

....все тэги



UPDONW
Новый дизайн