Как тестировать торговые стратегии на истории – Портал TradeLikeaPro

 

Содержание

Тестируем ручные системы

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

Установка советника Simple Forex Tester

0. Скачать и установить терминал Metatrader 4

1. Копируем содержимое папки 1 в папку с установленной программой Metatrader 4, соглашаемся на замену файлов при совпадении имен.

2. Копируем содержимое папки 2 в каталог данных терминала.

Как туда попасть?
Чтобы попасть в каталог данных, в терминале нажимаем Файл -> Открыть каталог данных

Каталог данных

3. Перезапускаем терминал.

4. Открываем терминал Metatrader 4, заходим Сервис->Настройки
Выбираем вкладку Советники и проставляем галочки как на рисунке ниже. Жмем ОК .

5. Запускаем тестер стратегий и следуем инструкциям из видео.

Скачать Forex Tester

Скачать кнопка

Искать на сайте

Ссылки

Разделы

Рекомендую

Вы новичок? Скачайте бесплатный видеокурс!

О Сайте

Наша цель – обучать простых людей торговле на валютном рынке Forex, а также предоставить все необходимые для успешной работы инструменты.

Советую ознакомиться

Торговые сигналы

Аналитика Форекс рынка на 7.07.2022

Аналитический обзор валютных пар на 6.07.2022

Анализ Форекс рынка на 5.07.2022

Прогноз движения валютных пар на 4.07.2022

XM

AMarkets

Alfa-forex

forex4you-C

Tickmill_small

NPBFX_small

Посты с форума

Популярные акции

Внимание! Торговля на валютном рынке Форекс (Forex) сопряжена с финансовыми рисками и подходит не всем инвесторам. Сайт tlap.com не предоставляет услуги торговли на финансовых рынках, носит исключительно информационный характер и не несет ответственности за последствия принимаемых вами торговых решений, либо работу программного обеспечения. Начиная работать на валютных рынках, убедитесь, что вы осознаете риски, с которыми сопряжена торговля с использованием кредитного плеча, и что вы имеете достаточный уровень подготовки. Данный ресурс управляется компанией TLAPFX LTD — регистрационный номер 24245 IBC 2017, адрес управления: Suite 305, Griffith Corporate Centre, P.O. Box 1510, Beachmont, Kingstown, St. Vincent and the Grenadines .
TLAPFX LTD не имеет представительств компании на территории Российской Федерации.

Зачем тестировать торговые стратегии на истории?

Еще

Итак, в обсуждении одной из моих прошлых публикаций справедливо заметили, что «зарабатывать можно только в будущем, а в прошлом уже нельзя, оно уже прошло», поставив тем самым под сомнение полезность того, чем занимаюсь я, и тестированием торговых стратегий на истории в частности.
Мы уже обсудили вопрос, зачем нужно учиться. Теперь поговорим собственно о тестировании.

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

Следует отметить, что в большинстве случаев такое исследование возможно при системной торговле на основе формализуемых алгоритмов проведения сделок покупки и продажи финансового инструмента, т.е. на основе так называемых механических торговых систем (МТС) или систем автоматической торговли — торговых роботов.

Что такое формализуемые алгоритмы? Это алгоритмы, которые могут быть записаны в виде некоторых математических выражений. В результате формализации получаем математическую модель торговой стратегии, в рамках которой полностью определен процесс принятия торговых решений и которая доступна объективному исследованию без всякой примеси субъективных факторов и предпочтений. Такая торговая стратегия может тестироваться совершенно объективным образом, без вмешательства человека, но она должна содержать точные правила для входов и для выходов из рынка:
— когда и по какой цене входить в рынок;
— когда и по какой цене выходить из рынка с убытком;
— когда и по какой цене выходить из рынка с прибылью.

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

Но как все это сделать, каким образом? Очень просто — запрограммировать и посчитать.

При слове «запрограммировать» у 90% аудитории делается кислое выражение лица. Я вхожу в эти 90%, поэтому долой программирование в традиционном понимании этого термина. Есть почти забытая программа Метасток, ориентированная на пользователей-непрограммистов и требующая минимума специальных навыков, не выходящих по сложности за выполнение элементарных расчетов с помощью EXEL, а если быть более точным, то еще проще. Ну или все-таки программировать в более сложных системах.

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

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

Чем полезен тест?
Тест, отличие от субъективной интуитивной уверенности в правильности выбранной торговой стратегии дает объективный результат от ее использования. Пусть и на истории.
Вы сразу можете проверить, разработан у вас «священный грааль» торговых систем или все преимущества стратегии существуют только в воспаленном мозгу разработчика.
Хорошая система должна работать при всех типах трендов, поскольку заранее никогда не известно, когда рынок поменяет направление тренда. Ценами на рынке управляют человеческие ожидания, и нереально, чтобы механическая система последовательно прогнозировала изменения в этих ожиданиях.

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

Ведь как чаще всего появляется метод?
Трейдер смотрит на график, и в мозгу у него зажигается лампочка: а что если так?
На графике он видит, что все должно быть отлично. И видит потому, что подсознательно выделяет только те моменты.где стратегия должна давать прибыль. И на уровне того же подсознания отбрасывает другие. те где прибыли не было бы.
Тест объективен. Он прошерстит правила на всем отрезке исследуемой истории и покажет истинную цену торговой стратегии.

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

Для примера рассмотрим, как это делается в простейшем случае в Метасток.

Зачем тестировать торговые стратегии на истории?

Откроем в Метасток график какого либо инструмента, для определенности EURUSD дневного масштаба, и настроим отображение элементов графика в виде японских свечей.

График EURUSD с отображением в виде японских свечей

С чего начинается построение торговой системы? Как мы помним, с торговой идеи, с того, что мы начинаем отвечать на вопрос: «А что если…?».
График у нас чист, никаких аналитических линий и индикаторов на нем нет, глазу не за что зацепиться, кроме самого графика. С графика и начнем.

И вот у нас появилась идея.
При восходящем тренде цена рынка в среднем растет, при нисходящем — падает.
В качестве признака роста примем следующее:
— если цена закрытия текущей свечи выше цены закрытия предыдущей, то это и будет признаком восходящего тренда;
— если цена закрытия текущей свечи ниже цены закрытия предыдущей, то это будет признаком нисходящего тренда.
Это и будет нашей торговой идеей.
И еще одно замечание.
Мы будем тестировать систему, которая торгует в двух направлениях, и на покупку и на продажу инструмента. И наша система будет всегда находиться в рынке, т.е. условие закрытия позиции на покупку инструмента будет одновременно являться условием для открытия позиции на продажу, и наоборот.
Записываем правила, запускаем тест.

Зачем тестировать торговые стратегии на истории?

Отображение результатов сделок — график эквити.

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

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

Какие факторы нам могут помочь в этом?
Первое, что приходит на ум, это тот факт, что при тренде цена в среднем, несмотря на откаты, возрастает. Поэтому, чтобы устранить влияние откатов, можно сравнивать текущую цену закрытия не с ценой закрытия предыдущего интервала, а с ценой, которая была N интервалов назад (фактически эту операцию выполняет классический индикатор Момент (momentum) ). В этом случае незначительные по уровню откаты не будут приводить к выходу из позиции.

Запускаем тест, и получаем результат, в котором данные упорядочены по размеру задержки N — переменная opt1.

Зачем тестировать торговые стратегии на истории?

Итак, наша интуитивная стратегия со сравнением цен закрытия двух соседних свечей дала наихудший результат, несмотря на то, что на графике мы «видели» победу.
В причины вдаваться не будем, это предмет других публикаций. Просто примем как факт, что при N=2 прибыльность системы резко возрастает.
И вот результирующий тест

Выбираем верхнюю строчку в списке и нажимаем клавишу «Plot on Chart».
Получаем график эквити с обозначенными сигналами входов и выходов из рынка, который приведен на рисунке

Зачем тестировать торговые стратегии на истории?

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

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

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

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

image

Ранее мы уже рассматривали вопрос об обязательных этапах разработки торговой стратегии для работы на фондовом рынке. Одной из наиболее важных стадий является тестирование производительности стратегии на исторических данных — бэктестинг. Сегодня мы поговорим именно о нем.

Что это

Говоря простым языком, бэктестинг заключается в запуске алгоритма торговой стратегии с использованием исторических финансовых данных. Алгоритм, обнаружив те или иные биржевые события («сигналы»), будет генерировать приказы на покупку или продажу финансовых инструментов — эти операции будут иметь связанный доход или убыток.

Общая величина дохода или убытка (profit and loss, P&L, PnL) за заданное в торговой стратегии время будет являться показателем успешности или неуспешности алгоритма.

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

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

image

Заблуждения о бэктестинге

Известный эксперт по биржевой торговли, квант и разработчик биржевых роботов Майкл Халлс-Мур, убежден, что начинающие разработчики биржевых систем часто допускают ошибки при их создании из-за определенных заблуждений. В частности, эксперт приводит четыре таких заблуждения:

Ожидание столь же высоких результатов в будущем

Часто разработчик сталкивается с искушением внести изменения в параметры тестирования для получения более убедительных результатов.

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

Использование «будущих» данных

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

Неверная оценка своей психологической устойчивости

При проведении тестов разработчик видит конечную производительность своего алгоритма. Если на определенном временном отрезке (скажем, год или пять лет) система приносит прибыль, то велик соблазн не обращать внимание на просадки депозита (полученные убытки), которые случались по ходу этого пути к успеху. Людям кажется, что они легко смогут пережить потерю 25% своих денег (ведь потом робот должен отыграться).

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

Какие параметры нужно учитывать

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

Транзакционные издержки

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

Проскальзывание и задержки

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

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

Влияние ликвидности

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

Типы торговых приказов

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

Приказ market («по рынку») выполняется немедленно по сформировавшейся на рынке в текущей момент цене финансового инструмента (акции, фьючерса, опциона и т.д.) Соответственно, при необходимостьи совершения крупной сделки, например, покупки большого числа акций, приказ market приведет к тому, что произойдет несколько сделок по разным ценам — на рынке может не быть нужное количество желающих продать акции по одной цене, тогда купив все их акции, робот перейдет к следующей предлагаемой цене и так далее.

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

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

image

Их плюсом, несомненно, является тот факт, что цена сделки заранее определена. Список текущих выставленных приказов типа Limit называется очередью заявок (Order book) и выводится в торговых терминалах отдельным окном.

При тестировании стратегии важно уделить внимание ее поведению при использовании рыночных и лимитных приказов. В том случае, если очередь заявок смоделирована неверно, торговая стратегия может показывать худшие результаты при работе в режиме реального времени, в сравнении с запуском на исторических данных.

Инструменты для бэктестинга

Существует довольно большое количество общедоступных систем, которые могут быть использованы для тестирования финансовых стратегий:

  • MS Excel — знакомый всем и каждому Microsoft Excel может быть использован и для написания механических торговых систем. Большинство брокеров позволяют связывать этот инструмент со своими программными продуктами (выгрузка данных и генерация торговых сигналов с помощью VBA). Минусом подобного решения будет невысокая скорость работ, а плюсом бесплатность и быстрота реализации простых стратегий. Альтернатива — Open Office
  • Matlab — программная среда, предназначенная для осуществления сложных вычислений. Существуют плагины для использования в биржевой торговле. С ее помощью можно создавать небольшие скрипты, которые тем не менее описывают довольно сложные стратегии. Минус — система платная и недешевая. Альтернативы для российского рынка TSlab и StockSharp. Также трейдеры используют для создания механических торговых систем продукты MetaStock, Wealth-Lab и Omega.
  • C++/C# — языки программирования, которые широко распространены в финансовом мире. Постепенно популярность набирают Java и Scala.
  • Встроенные инструменты торговых терминалов — в некоторых торговых терминалах есть встроенные средства для создания торговых роботов и бэктестинга стратегий. Соответствующий плагин можно установить в терминал SmartX. Для написания роботов используется скриптовый язык TradeScript.

Окно для бэк-тестинга плагина для создания роботов на TradeScript в терминале SmartX

Заключение

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

В дополнение к тестированию на исторических данных разработчикам стоит проверять работу программы в режиме реального времени — сделать это можно с помощью специальных тестовых торговых систем, которые предоставляют биржи и брокеры. С помощью таких безрисковых систем с виртуальными деньгами можно отладить реакцию робота на изменение условий на рынке — обычно данные в таких случаях предоставляют биржевые площадки (с задержкой или «прореженные»).

На сегодня все, спасибо за внимание. Будем рады ответить на вопросы в комментариях.

Внимание! В ITinvest открылась вакансия разработчика GUI C#, работа заключается в осуществлении фронтент-разработки программных продуктов для торговли на бирже. Подробности по ссылке www.itinvest.ru/about/vacancies/programmer-gui-c.

image

P.S. Если вы заметили опечатку или ошибку — напишите личным сообщением, и мы оперативно все исправим.

Источник https://tlap.com/testiruem-ruchnyie-sistemyi/

Источник https://smart-lab.ru/blog/591598.php

Источник https://habr.com/ru/company/iticapital/blog/238839/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *