Как тестировать торговую систему. Как тестировать торговые системы форекс? Тестирование торговой системы

Здравствуйте уважаемые трейдеры! Недавно столкнулся с непростой проблемой: как протестировать торговую систему пришедшую мне в голову. Тестирование в Forex Tester на длительном периоде времени — далеко не быстрое и не простое занятие. Конечно, наилучшим способом было бы написать советник и затем пропустить его через жернова тестера стратегий Метатрейдер, но так как программист из меня никудышный, этот вариант тоже отпал. На бескрайних просторах интернета натолкнулся на еще один, наиболее приемлемый для меня, способ тестирования торговых систем в программе Excel, с основами которого и хочу вас познакомить.

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

Для начала познакомлю вас с простейшей торговой системой которая родилась в недрах моего воспаленного мозга :). Наблюдая за движением пары GBPUSD и глядя на историю, я заметил, что наиболее сильные движения по тренду происходят в одно и тоже время на протяжении многих лет. Построив в Excel гистограмму зависимости волатильности этой пары от времени суток выяснил, что наиболее сильные движения пары приходятся на 8 ÷ 12 и 13 ÷ 17 часов по GMT. На часовой график пары установим простую скользящую среднюю (SMA) с периодом 50, которая будет индикатором направления тренда в нашей системе. Правила входа и выхода системы по детски просты: в 8.00 по GMT смотрим на график, если цена выше SMA — открываем сделку на покупки, если наоборот — продажи. Закрываем сделку в 12.00 GMT. Повторяем то же самое после обеда трейдеров в Лондоне и начале торгов Нью-Йоркской сессии. В системе минимум переменных, что уменьшает вероятность подгонки на истории. В дальнейшем, для увеличения доходности и агрессивности системы можно прикрутить к ней элементы мартингейла в случае получения убытка или их серии, но это перспективы. На данном этапе необходимо выяснить: прибыльна ли система, положительно ли у нее математическое ожидание, ведь в противном случае выжать что — либо из системы представляется мне маловероятным.

Итак, приступим. Для получения котировок заходим на сайт Dukascopy и во вкладке «Рынки и инфо » нажимаем «Исторический Data Feed «.

В появившемся окне выбираем нужный нам торговый инструмент, таймфрейм и период времени за который мы будем скачивать котировки. Жмем: «Скачать «.

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

Запустив Excel импортируем скачанные котировки в нашу программу. Для этого во вкладе «Данные » нажимаем кнопку «Из текста «.

На первой вкладке запустившегося мастера импорта текстов нажимаем далее.

На второй вкладке ставим галочки напротив «запятая » и «пробел »

На последней вкладке ставим формат для первого столбца — «Дата » и жмем «Готово «.

Импортируем данные в ячейку А1 .

Теперь приведем котировки в божеский вид. Удалим колонку Volume за ненадобностью. Выделив четыре последние колонки нажмем Ctrl+F и заменим точки в этих колонках на запятые , Excel распознает в числовых данных только запятые.

В скачанных котировках присутствую все дни недели. Уберем ненужные нам субботы и воскресенья. Для этого в свободной колонке выполним функцию «ДЕНЬНЕД «. Выбрав первую дату нашей таблицы. Тип по которому определяется день недели ставим 2. Жмем «Enter».

В ячейке А2 получим цифру обозначающую день недели. Применим небольшую хитрость : если навести курсор на правый нижний угол полученной нами ячейки с данными до появления крестика и кликнуть в этот момент ЛКМ то получим данные рассчитанные по нашей формуле на всей таблице.

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

Затем также, с помощью фильтрации колонки «Time» удаляем неиспользуемые временные периоды от 0.00 часов до 7.00, с 12.00 до 13.00 и с 17.00 до 23.00.

Следующим шагом будет вычисление значений нашей скользящей средней. Можно пользоваться функциями СУММ и СРЗНАЧ.

Кликнув два раза на правый нижний угол ячейки рассчитаем значение SMA для всех используемых котировок. Следующим шагом вычислим направление входа в рынок с помощью полученных значений SMA. Используем для этого функцию ЕСЛИ. Продажам у нас будет присвоено числовое значение «0», покупкам «1». Проводим расчет для всех котировок.

И вот наконец, настало время получения прибыли. В следующей свободной колонке рассчитываем прибыль в зависимости от направления нашей позиции с использованием функции ЕСЛИ.

Мне кажется, что эта статья будет больше всего интересна новичкам в алготрединге. Общаясь с людьми, недавно заинтересовавшимися торговыми роботами, я зачастую сталкивался с тем, что они не до конца понимают, что такое торговый робот и как его создают, поэтому я позволил себе немного рассуждений и пояснений на тему тестирования и создания робота. Если хотите освободить себя от моих рассуждений, переходите к главе - ТЕСТИРОВАНИЕ ТОРГОВОЙ СИСТЕМЫ, Эта часть будет полностью посвящена практике тестирования и работе с платформой.

Почему Торговые роботы.

Часто, когда заходит разговор о торговом роботе, его главным преимуществом называют отсутствие психологических моментов в его работе. Нет страха, жадности или сомнений. Действительно, это существенные плюсы при торговле через торгового робота. Но главное преимущество торгового робота заключается в том, что мы можем протестировать алгоритм его работы на исторических данных. Таким образом, мы увидим, работает наша торговая система или нет. Если работает, то мы увидим её слабые и сильные стороны и найдем способ улучшить доходность системы. Используя программы для тестирования торговых систем, мы пройдем эти шаги гораздо быстрее, чем, если бы мы проверяли нашу систему в режиме реального времени. Мы сэкономим наши силы, время и деньги. Поэтому тестирование торговых стратегий является очень важным этапом на пути создания торгового робота.

ВВЕДЕНИЕ

Занимайтесь исследованием рынка

Многие новички, приходя на рынок, не имеют четкой торговой системы для принятия решений – покупать или продавать бумагу; когда выходить из сделки, если она прибыльная; когда выходить из сделки, если он показывает убыток. Новоиспеченный трейдер обучается прямо во время торгов – он принимает решения, основываясь на интуиции и на своём небольшом торговом опыте. Заработав на сделке, он запоминает определенный случай и старается применить его в будущем; получив убыток, он будет стараться избегать таких ситуаций. Но был ли тот случай, когда он смог заработать, действительной закономерностью или всего лишь единичным случаем из ста, когда ошибившись два раза, мы получили нужный результат? То же самое можно сказать по поводу отрицательного опыта – возможно, всё было сделано правильно, но именно в этот раз что-то сработало не так как надо, и мы не заработали. Начинающий трейдер не задается этим вопросом, и может взять за правило избегать прибыльных стратегий и следовать убыточным, основываясь на своём опыте. Причем те ситуации, которые наблюдает новичок, складываются на основе множества факторов: новости, индикаторы (часто это не один индикатор), наблюдение за стаканом, наблюдение за американским рынком, поведение самой цены. Человеку свойственно окружать себя тоннами информации, чтобы быть уверенным в своей правоте. Но, принимая решение на основе всех этих данных, и заработав или потеряв на сделке, как можно понять, благодаря чему именно мы заработали, и где была совершена ошибка, если мы потеряли деньги? Возникает множество сочетаний информации, которой вы используете, вычленить нужные моменты из этой массы становиться трудно. Осознание своих ошибок и создание прибыльной торговой системы при таком подходе занимает огромное количество времени и стоит немалых денег.
Итак, как же нам научиться зарабатывать на рынке, затратив при этом наименьшее количество времени и денег? Ответ настолько очевиден и прост, что я недоумеваю, почему этим занимается так мало людей! Чтобы научиться работать на рынке, обрести понимание рынка, надо заниматься его исследованием. Под исследованием я подразумеваю не просто наблюдение за рынком, а проверка сделанных выводов на основе прошлой истории, путем совершения бумажных сделок в прошлом, и анализом всех полученных результатов. Если вы недавно пришли на рынок, и у вас нет торговой системы, то вам необходимо придумать стратегию самим или взять за основу чужую систему. После чего требуется исследование, насколько хорошо эта система работает. Проверяя идею на истории, нам не надо ждать следующего дня, недели, месяца, чтобы увидеть первые результаты. Работая с историей, можно прогнать год торгов за несколько часов и узнать, какой результат можно ожидать от вашей системы. Так почему же этим занимается так мало людей? Проанализировав систему, вы лишаетесь иллюзий по поводу того, сможете ли вы заработать деньги, у вас не остается надежды на какое-то чудо. А также, работа на рынке лишается азарта, элемента игры. Мало кому хочется терять надежду на то, что “на рынке заработать просто”, не хочется превращать интересную игру в работу. Именно эти два желания – быстро разбогатеть и получить адреналин являются причиной постоянного потока “мяса” на рынок. На фондовом рынке находиться не меньше мечтателей, чем в любом казино.

ПОДГОТОВКА К ТЕСТИРОВАНИЮ

Выбор бумаги для тестирования

На фондовом рынке большое количество ценных бумаг и производных от этих ценных бумаг. У каждой бумаги своя специфика, свой характер движения. Это значит, что торговые системы, которые работают на одной бумаге, могут быть бесполезны на другой. Есть похожие по своему “характеру” бумаги, на которых будет работать один и тот же подход. Перед тем как создавать торговую систему, нам надо определиться, с каким инструментом мы будем работать. Советовать, чтобы на бумаге были сильные, резкие движения, или же наоборот, движения были плавные, нельзя. К какому рынку подойдет ваша система выясняется только тестированием. Желательно, чтобы бумага была ликвидная. Как вы позже сможете убедиться, потери при входе и выходе из-за проскальзывания значительно уменьшают прибыль и увеличивают убыток. Также стоит обращать внимание на комиссию – комиссия также может сильно сказываться на доходности системы.
Свои системы мы создаем для фьючерса на индекс РТС. Он был выбран как наиболее ликвидный инструмент на российском рынке. Проскальзывание для систем устанавливается в размере 50п для входа и 50п для выхода. Реальное проскальзывание устанавливается опытным путем.

ТЕСТИРОВАНИЕ ТОРГОВОЙ СИСТЕМЫ. ПОДГОТОВКА ПЛАТФОРМЫ

Выбор программы для тестирования стратегии

Для графического отображения исторических данных и тестирования стратегии нам понадобится программа. Выбор программы зависит от разных факторов, каждая программа имеет свои плюсы и минусы. Ниже перечислены наиболее распространенные программы для разработки систем.
Omega Tradestation, Metastock, Amibroker, Wealth-Lab Developer
В апреле 2012 года выходит StockSharp Studio, и вы сможете создавать и тестировать системы в одном месте. А пока мы будем тестировать систему на другой платформе.

Мы работаем на Wealth-Lab. Это один из признанных лидеров среди программ-тестировщиков. Основной его плюс – язык C#. Только ради этого плюса можно остановить свой выбор на этой программе. Данный язык – стандартный язык программирования, помощь по нему вы можете найти не столько на сайте программы wealth-lab, сколько на программистских сайтах и всемирно известных библиотеках (MSDN).

Данный язык позволяет

  • с лёгкостью тестировать написанный код на наличие ошибок;
  • писать стратегии любой сложности – от стандартных систем на свечках, до стратегий на объёмах (маркет профиль);
  • легко переносить протестированную стратегию в вашего робота (об этом на следующих семинарах).

После выбора программы нам необходимо загрузить котировки.

Скачать котировки можно с помощью Гидры (https://stocksharp.ru/doc/ Подробное описание работы с программой по ссылке)

На выходе мы получим текстовый файл с примерно следующим содержанием
ТФ 5 минут, тиккер – РТС. Формат даты, как можно увидеть, ГГГГММДД, формат времени ЧЧММСС.
Разделитель – запятая.

Код

,

Покажем, как загрузить данные в эту программу.

При первом запуске вы увидите примерно следующую картинку.

Мы собираемся загрузить котировки, для этого нажимаем на Data Manager . Next -> Create a new DataSet .
В красном прямоугольнике выделены уже существующие DataSet. Также их видно правее в окошке DataSet. Когда мы проделаем всю операцию, новый датасет появится в этом окне.

После нажатия Create a new DataSet, появится окно. У нас txt файл, поэтому выбираем ASCII Files.
Next -> указываем путь к котировкам.
Next -> после выбора папки в окошке появятся файлы, которые можно использовать.

Подсказка: в одной папке должны лежать файлы полностью сходные по формату. После того как мы выбрали папку, Велс обработает все файлы в этой папке. Позже, чтобы добавить какой-то новый файл у которого такие же параметры, достаточно будет просто закинуть его в папку из которой вы загружаете историю сейчас - и Велс сразу добавит его в DataSet. Чтобы создать датасет с другим форматом, надо сохранять файл в другую папку.

Next -> выбираем интервал, который мы выбрали при загрузке. У нас это 5 минут. Если у вас файл с 5 минутами, то из него можно создавать файлы старшего ТФ, но не наоборот. Создавать файлы старшего ТФ из младших тоже не советуется, т.к. Велс криво склеивает. Лучше отдельно загрузить старший ТФ.
Next -> появится окно, где нам надо прописать формат для программы. В нашем случае нам надо добавить 1 - Add Field в список Field Order. Наш формат ,

Для того, чтобы написанная на коде стратегия работала корректно, необходимо занести информацию об инструменте в Велс. Для этого заходим в Tools -> Sumbol info Manager , появится окошко. Сюда необходимо заносить данные для всех новых DataSet. Тип, устанавливаем Фьючерс (или акции, елси вы будете тестировать их). Маржа - сейчас среднее значение 9000 (минус в том, что маржа считается постоянной, и при 50 000 по РТС и при 100 000, при этом мы понимаем, что фактически она меняется). Point Value для фьючерсов 0,6. Тик равен 5 в нашем случае. Decimilars (знаков после запятой) у нас 0 . В Symbol нужно написать точно такое же название как в DataSet.
После того как мы прописали информацию, Велс будет знать как именно расчитавать профиты и лоси для системы.

Осталось задать проскальзывание. Tools -> Preferences -> Slippage . Ставим галочку для первого случая и ставим нужное нам проскальзывание. For Futures - > 10, проскальзывание в тиках = 50п.

ТЕСТИРОВАНИЕ ТОРГОВОЙ СТРАТЕГИИ. ПРИМЕР

К этому моменту у нас всё готово для тестирования стратегии. Но самой торговой системы у нас нет. Откуда же брать идеи для создания торговых систем? Лучший способ для начинающего системщика – взять за основу чужую торговую систему и попытаться поработать с ней. Позже, на основе ваших собственных наблюдений, вы будете создавать уникальные ТС.
Создание стратегии
Идея
Для создания ТС у нас должна быть идея, предположение, которое необходимо проверить. Наша идея основывается на наблюдении, что на рынке бывают дни с большим диапазоном, когда цена практически с самого открытия идет в одном направлении и закрывается рядом с максимальной точкой. Задача торговой системы состоит в том, чтобы поймать это движение – ударный день.
Центральные условия стратегии
Станет ли день ударным мы не знаем. Мы должны найти правила, соблюдение которых позволит нам получить систему с положительным матожиданием. На данном этапе, у нас есть только примерное представление, как стратегия должна работать. Все наши предположения нам предстоит проверить.
Предположения
- Если день ударный, то мы должны войти в него с самого утра. Если нам не удалось войти до определенного времени, день скорее всего не ударный.
- вход в лонг осуществляется выше уровня открытия, вход в шорт осуществляется ниже открытия. Уровень открытия служит как фильтр – если мы находимся выше, вероятность расти больше чем вероятность упасть и наоборот.
- вход в лонг осуществляется выше средней скользящей, вход в шорт осуществляется ниже средней скользящей. Средняя скользящая (157 – МА), используется как дополнительный фактор определения тренда.

Написание кода по алгоритму

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

Методы расчета размера позиции в системе

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

Нас интересует результаты системы, её доходность и просадка. Чтобы увидеть нужные нам результаты, необходимо зайти во вкладку Performance. Тут нужно сказать о способах, которыми расчитаываются результаты выполнения кода. При выборе разных способов, мы будем получать разные результаты на одной стратегии. Рассмотрим вкладку – Position Size.

Starting Capital – сумма с который вы будете тестировать систему.

1 – первый тип расчета позиции. Размер позиции будет постоянно выполнятся исходя из суммы указаной в fixed dollar . Если у нас ГО 7500, и в fixed dollar прописано 10 000, то размер позиции всегда будет = 1 контракту.

2- Размер позиции постоянно равен определенному количеству контрактов. 100 cоntracts в нашем случае было бы равносильно 750 000 в fixed dollars.

Эти два метода используются для того, чтобы увидеть – как было бы если вы постоянно торговали фиксированной суммой/сайзом. Третий способ отличается от передидущих двух, для тестирования систем мы используем именно его. Percent of Equity – размер позиции расчитывается изходя из имеющейся суммы, которая меняется по ходу тестирования. Если изначально у нас было 100 000 и на 50% от депозита размер позиции равен 6 контрактам, на сумме 200 000, он будет равен 12 контрактам. Тоесть в этом методе используется реинвестирование, и мы увидим какую доходность покажет система, если постоянно вкладывать заработаные деньги в систему. Также при таком подходе мы видим, какая может быть действительная просадка у системы. Этот вопрос расмотрим поподробнее.

Размер просадки при 1 и 2 методе расчета размера позиции в сравнение с 3 методом.

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

Картинки приведены с другой системы, не с той, что сейчас разбираем мы!

Посмотрим на эту же систему, где размер позиции рассчитывался исходя из процента размера депозита.

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

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

Backtest Performance Report | Range – временные рамки, в которых проводилось тестирование. * Сами временные рамки задаются слева в Data Range. Data Range заданный вами может не совпадать с Range.

Net profit – сколько денег заработала система с момента начала тестирования.

Net profit % - сколько процентов заработала система с момента начала тестирования.

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

Number of trades – количество совершенных сделок.

Average Profit – средняя прибыль за одну сделку.

Win/Loss Rate – процент прибыльных/убыточных сделок

Average Profit/Loss – средний профит/лосс по итогам всех
прибыльных/убыточных сделок.

Max consecutive Winners/Losses – максимальное количество подряд прибыльных/убыточных сделок.

Maximum drawdown – максимальная просадка системы.

Итак, на картинке снизу, мы видим результаты тестирования стратегии (тестирование проводилось на промежутке 2009 – 2010 год). Результаты совсем не те, на что мы рассчитывали: огромная просадка, при практически нулевом профите. В чем проблема, почему стратегия, так плохо работает, ведь были соблюдены все условия, и код проверен, работает правильно?!

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

Сначала попробуем оптимизировать параметры системы. Параметров в нашей системе 3 (5)
– МА период скользящей средней: Может так оказаться, что МА с другим периодом лучше работает.
– Время, до какого времени мы ищем сигнал: Возможно, что ждать сигнала до 2х часов излишне. Параметр время разбит отдельно для коротких и длинных позиций.
– Риск. Размер стопа после входа в позу: Стоп в нашем случае не превышает заданного параметра.
Оптимизация параметров
Важно научиться, по результатам оптимизации не только выбирать наиболее прибыльные значения параметров, но и также находить некоторые закономерности, которые могут помочь нам улучшить стратегию.

В любой системе есть параметры. Про параметры в системе следует сказать следующее:
А – параметры должны иметь под собой какое-то обоснование. Например, параметр время – работать после N часов дня, не имеет смысла, т.к. если это ударный день, то мы уже должны были войти в позицию, и нас не должно было выбить по стопу. Иначе – это не ударный день, искать входов не имеет смысла. Назначение этого параметра – найти время, до которого стоит искать признаки ударного дня, и после которого становится больше ложных сигналов.
Б – параметр можно переоптимизировать – подогнать под определенный промежуток времени, когда он будет хорошо работать, но в другое время будет работать намного хуже. Нужно избегать таких ситуаций.
В – система должна работать прибыльно на большом наборе значений параметра. Что значит - если есть параметр с 10ю различными значениями, система должна работать на большинстве из этих значений.
Г – чем их меньше, тем лучше. Увеличение количества параметров делает систему менее устойчивой.

Проведем оптимизацию наших параметров

Для того чтобы открылась вкладка Optimization, необходимо нажать на Optimize в левом нижнем углу.

Optimization control – настройка, выбор тех параметров что мы будем тестировать. Чтобы оптимизация проходила быстрее, стоит выбирать один-два параметра и тестировать их. Чтобы удалить параметры, которые мы не хотим тестировать, выделяем его и нажимаем Remove Selected Parameter. Восстановить начальный вид можно нажав Rollback Changes. После того как мы произвели необходимые настройки, нажимаем Begin Optimization.

Results – результаты тестирования в текстовом виде.

1 Parameter Graph - на шкале отображается результат тестирования только одного параметра.

2 Parameter Graph – Отображаются сразу два параметра.

Быстрее и нагляднее всего тестировать пару параметров. Например, Время - Риск лонг, Время_S - Риск шорт, Время – Время_S . Надо понимать, что если мы изменим один параметр, то он потянет за собой другой параметр. Поэтому тестировать лучше всего как раз такие пары, где один параметр влияет на другой.

Небольшое лирическое отступление - Этот семинар пишется онлайн, я сейчас поэтапно делаю всё, о чем пишу. После этого места я уже успел написать 5 страниц с картинками, когда понял, что пошел по неправильному пути, начал оптимизацию с пары Время – Время_S – абсолютная глупость. После того, как прооптимизировал этот параметр, пришлось еще несколько раз к нему возвращаться, т.к. я изменил риск и параметр время опять изменился. Поэтому я написал замечание выше. Думай головой, как говорится, и сэкономишь много времени. У нас бывало так, что, не проверив, как следует, код, мы принимались его тестировать, потом оказывалось, что в коде ошибка и все результаты приходилось выкидывать, а это много времени.

Я еще постараюсь сделать больше ошибок, чтобы их потом не сделали вы. А сейчас пойдем по более корректному пути.

Оптимизация Время – Риск Лонг

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

Если отключить в стратегии продажи, то картинка изменится именно таким образом – работа до 14 часов находится в положительной зоне при всех значениях риска.

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

График оптимизации с другой стороны, чтобы лучше рассмотреть результаты по риску.
Лучший параметр для риска по покупкам – 0,8-0,9%.

Какие выводы можно сделать по оптимизации Время – Риск

1 – Стратегия является прибыльной, если работать до 14 часов. При этом прибыль растет до 12 часов - посмотреть, почему прибыль начинает падать после 12 часов.
2 – При параметре время до 14 часов, на всех значениях риска, стратегия является прибыльной. Это хорошо, параметр должен быть прибыльным на большом наборе своих значений.
3 – Есть четкая тенденция, при увеличении параметра риска, прибыль растет – посмотреть, почему так происходит.

Проводя тестирование систем, и оптимизируя параметры, старайтесь понять, почему именно стратегия начинает лучше работать при тех или иных изменениях. По результатам оптимизации выбираем значение для Времени = 12 часам, для Риска по покупкам = 0,9%.

Для того чтобы понять, что именно изменилось, при новых параметрах, посмотрим Performance.

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

Если изменить риск с 0,2% до 0,8%, то количество сделок уменьшится еще больше, при том, что количество прибыльных сделок возрастет. Почему так произошло? Если просмотреть входы в сделки руками, то можно увидеть ситуации, когда поставим маленький стоп, мы получали после этого еще много лосей и в итоге так и не ловили УД. Если бы мы поставили больший стоп, то смогли бы поймать УД и не получили бы лосей.

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

Оптимизация Время – Риск Шорт

Повторяем процедуру для продаж.

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

В результате оптимизации я сделал следующие изменения в коде
- время для продаж до 14 часов.
- время для продаж с 11 часов
- риск для продаж 0,7%

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

Performance после изменений: времени работы, рисков для покупок и продаж.

Перед тем как приступить к проверке последнего параметра – Фильтра по МА, хочу сделать небольшое отступление и рассказать одну особенность WealthLab по расчету прибыли и просадок в Performance отдельно по покупкам и продажам.

Откуда -280%

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

Посмотрите на картинку выше, слева, в столбце по продажам, указана просадка, как работает шорт. Справа тот же столбец, только NetProfit сильно изменился, при этом мы ничего не меняли в алгоритме для продаж, и, как видно из той же картинки, количество сделок не изменилось. Дело в том, что, несмотря на то, что статистика для покупок и продаж ведется отдельно, при работе кода и появлении сигнала на продажу, вход в позицию осуществляется объемом с учетом заработанных ранее денег. После того как мы прооптимизировали алгоритм для покупок, и результаты сильно выросли, в том месте где мы раньше входили объемом в 13 лотов (пример), мы теперь будет входить объемом 26, т.к. до этого мы успели заработать с помощью покупок. При этом просадка считается от суммы, которую заработали продажи.

МА служит как некий индикатор тренда – если цена находится ниже средней, значит краткосрочный тренд нисходящий, наоборот – восходящий. Нам необходимо входить в позицию там, где у нас есть перевес вероятности, фильтр должен помогать нам находить этот перевес.
Число 157 объясняется количеством пятиминуток за один рабочий день (сейчас время торгов изменилось, количество 5м. тоже изменилось). Посмотрим, как работает стратегия на других параметрах.
Сейчас мы тестируем только один параметр, поэтому смотрим результаты в
1 Graph Parametr.

По результатам оптимизации
- на всех значениях параметра стратегия работает в плюс, это хорошо.
- параметр 157 один из лучших, 250 работает еще лучше, но незначительно.

Поставим значение параметра МА = 250.

Выводы после оптимизации параметров.

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

Начальный Алгоритм:
- вход в лонг выше открытия дня, вход в шорт ниже открытия дня
- Цена выше/ниже 157 средней. +++ Параметр работает, оставляем.
- искать точку входа до определенного времени t. +++ Выявили оптимальное время работы. С 11 до 12 для покупок и с 11 до 14 для продаж.
- Вход в лонг по бычьей модели поглощения.
- Вход в шорт по медвежьей модели поглощения.
- стоп = 0,2 – 0,3% от точки входа. --- оказалось что вход с маленьким стопом не оправдывает себя. Параметр был существенно изменен.
- выход в конце дня.

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

Как еще улучшить стратегию?

Хотя результаты стратегии стали намного лучше - 375% годовых, просадка оставляет желать лучшего – 43% это очень много. После того как мы исчерпали возможности оптимизации существующих параметров, вернемся к вкладке Chart, посмотрим как работает наша стратегия, возможно, после того как мы поработали с параметрами и можем отвлечься от них, мы увидим новые возможности для улучшения стратегии.

Во время просмотра Chart, мне попадались случаи подобные этому – когда у нас был хороший профит (в данном случае чистых 4,5%), а потом нас выбивало по стопу. Сразу возникает мысль – а что если сделать перенос в БУ после прохождения ценой некоторого расстояния? Или, что если мы будем фиксировать цель не в конце дня, а по математической цели, например, после 4% движения.

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

Во вкладке trades, есть два столбца MAE% и MFE%.

МАЕ% - означает, на сколько процентов цена уходила в сторону стопа.

MFE% - означает, на сколько процентов максимально цена уходила в нужную нам сторону от точки входа.

На приведенной картинке, видно, что были трейды, когда цена уходили на 4,5% , 2,3%, 3,7%, потом разворачивалась и мы получали убыток. Если просмотреть все трейды, становится видно, что такие случаи имеют место быть, поэтому попробовать запрограммировать перенос в БУ после прохождения определенного %, стоит. Также попробуем запрограммировать выход по математической цели.

Перенос стопа в БУ, после прохождения ценой N%.
Если цена проходит определенный путь от точки входа, то стоп переносится в БУ. Зададим это условие как параметр, допишем в код тестера.
Удостоверившись, что код работает правильно, протестируем новый параметр.

По результатам теста видно, что существенно никаких изменений, при переносе стопа в БУ нет. В таких случаях лучше отказаться от параметра, т.к. больше количество параметров делает систему менее устойчивой.

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

По результатам теста видно, что лучшие значения параметра это 9%, что, по сути, является максимальным значением. Если фиксировать прибыль при достижении 5-6-7%, к увеличению профита это не приведет, к уменьшению просадки тоже.

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

Проверка правильности написания кода.

После изменений в коде надо удостовериться, что код работает правильно. После каждого изменения в коде, надо проверять, что код работает правильно, иначе есть большая и неприятная возможность заниматься анализированием и оптимизацией неправильно работающего кода. Проверять можно полностью ручным методом, можно в помощь ручному методу использовать возможности WealthLab.
Например, возьмём результаты работы кода до внесения изменений по переносу стопа в БУ и после, установив в новой версии параметр переноса на значение 10%. 10% у нас за время тестируемой истории не было ни разу, поэтому результаты работы кода в обоих случаях должны быть одинаковыми.
На приведенном ниже рисунке мы видим, что все значении остались прежними, это косвенно подтверждает, что явных ошибок в измененном коде нет.
Можно посмотреть во вкладке trades MAE% и MFE%. Установив параметр (например, 2%) при всех MFE больше 2%, в колонке Profit видно, что стопило нас на уровне безубытка.

Проверка кода на наличие ошибок по перфомансу.

Проверка кода на наличие ошибок по MAE – MFE.

Заключение

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

Удачи в ваших исследованиях

Горбунов Алексей

StockSharp Торговые роботы

Приложение: код для тестирования торговой системы

Код

using System; using System.Drawing; using WealthLab; using WealthLab.Indicators; using WealthLab.Properties; using System.Drawing; namespace WealthLab.Strategies { public class FirstStrategy: WealthScript { StrategyParameter paramMA; StrategyParameter paramTime; StrategyParameter paramTimeShort; StrategyParameter paramRisk; StrategyParameter paramRiskS; public FirstStrategy() { paramMA = CreateParameter("MA", 1, 1, 500, 10); paramTime = CreateParameter("Время", 12, 10, 19, 1); paramTimeShort = CreateParameter("Время_S", 11, 10, 19, 1); paramRisk = CreateParameter("Риск лонг", 0.2, 0.2, 1, 0.1); paramRiskS = CreateParameter("Риск шорт", 0.2, 0.2, 1, 0.1); } protected override void Execute() { DataSeries ma = SMA.Series(Open, paramMA.ValueInt); PlotSeries (PricePane, SMA.Series(Open, paramMA.ValueInt), Color.Blue, LineStyle.Solid, 2); double sp = 0; double stop = 0; PlotStops(); for(int bar = 1; bar < Bars.Count - 1; bar++) { if (Bars.IntradayBarNumber(bar) == 0) { sp = Bars.Open; } \ if (IsLastPositionActive) { Position p = LastPosition; if (p.PositionType == PositionType.Short) { if (!CoverAtStop(bar, p, stop)) { if (Bars.IsLastBarOfDay(bar)) { CoverAtMarket(bar, p); } } } else //Long { if (!SellAtStop(bar, p, stop)) { if (Bars.IsLastBarOfDay(bar)) { SellAtMarket(bar, p); } } } } else { double high = Bars.High; double low = Bars.Low; if (!Bars.IsLastBarOfDay(bar) && high < sp) { if (Bars.Open < Bars.Close && Bars.Open > Bars.Close && Bars.Date.Hour < paramTimeShort.ValueInt && Close < ma) { stop = Math.Max(Bars.High, Bars.High); double openPrice = Bars.Open; double exitPrice = stop; if (openPrice / exitPrice > 1 - paramRiskS.Value / 100) { RiskStopLevel = stop; ShortAtMarket(bar + 1); } else { stop = openPrice / (1 - paramRiskS.Value / 100); RiskStopLevel = stop; ShortAtMarket(bar + 1); } } } if (!Bars.IsLastBarOfDay(bar) && low > sp) { if (Bars.Open > Bars.Close && Bars.Open < Bars.Close && Bars.Date.Hour < paramTime.ValueInt && Close > ma) { stop = Math.Min(Bars.Low, Bars.Low); double openPrice = Bars.Open; double exitPrice = stop; if (exitPrice / openPrice > 1 - paramRisk.Value / 100) { RiskStopLevel = stop; BuyAtMarket(bar + 1); } else { stop = (1 - paramRisk.Value / 100) * openPrice; RiskStopLevel = stop; BuyAtMarket(bar + 1); } } } } } } } }

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

Ниже рассмотрены основные способы и правила тестирования торговых систем применяемые в настоящее время.

Backtesting или тестирование на исторических данных

Благодаря развитию компьютерных технологий, сегодня провести такого рода Backtesting может практически любой трейдер. Практически каждый современный обладает набором инструментов для такого рода тестирования. Не исключением является и торговый терминал MetaTrader4 (МТ4). В МТ4 для этих целей применяется инструмент под названием «Тестер стратегий». Он позволяет протестировать создаваемую торговую стратегию на любом историческом интервале данных (если истории не хватает её всегда можно подгрузить). Для того чтобы воспользоваться этим инструментом необходимо сначала переложить тестируемую стратегию на язык понятный торговому терминалу (создать программный код). Для торгового терминала МТ4 это язык программирования MQL4.

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

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

Что такое оптимизация торговой системы и в чём её опасность

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

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

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

Как избежать переоптимизации торговой системы

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

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

Тестер стратегий в торговом терминале МТ4

Paper trading или тестирование на текущих данных

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

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

Вывод

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

1. Тестирование на исторических данных

2. Тестирование в реальном времени

Первым делом испытайте ТС на истории. Убедитесь в том, что она в принципе обладает достаточным потенциалом прибыльности.

Затем протестируйте созданную торговую систему на трёх разных исторических интервалах и убедитесь в отсутствии переоптимизации.

После этого в обязательном порядке протестируйте ТС на демо-счёте. Если это внутридневная система, то достаточно будет 2-4 недели тестирования. Для более долгосрочных ТС, соответственно, больше. Ни в коем случае не пренебрегайте этим этапом, именно он является определяющим во всей процедуре тестирования.

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

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

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

Как происходит все на практике? Трейдер находит какую-то систему, она ему визуально понравилась, естественно, он не хочет тратить много своего личного времени, чтобы протестировать ее должным образом, и делает это зря!

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

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

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

Смотреть


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

Но есть и еще один фактор – сугубо человеческий.

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

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

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

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

Учитывая все эти моменты, может появляться очень много вопросов: какие сигналы использовать? Какой интервал использовать? В какое время торговать? И многие другие вопросы. Часто бывает, что по доброте душевной, трейдер может посоветовать систему, которую использует сам, другому человеку.

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

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

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

Тестируем системы. Что оно даст?

Факт первый. Ну для начала, у вас появится некое понимание того, насколько полученная вами система будет прибыльной на практике. Стоит понимать, что далеко не все системы, которые вы встретите, будут прибыльными. Если кто-то говорит, что стратегия приносит стабильный профит, то еще далеко не факт, что такая же тенденция будет и в вашем случае. Сначала нужно собственноручно проверить систему, чтобы сделать выводы.

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

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

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

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

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

Выводы

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

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

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

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

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

Тестирование торговой системы

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

  • Пример: если на всем периоде наблюдается среднее количество убыточных сделок — 3-4 раза подряд и на одном участке 8 раз, то второе значение с большой вероятностью является аномалией и в расчет приниматься не должно.

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

  1. Не доверяйте глазам. Кривая депозита может быть и красивой, но при большем приближении могут вырисоваться явные минимумы и максимумы. Оценка системы «на глаз» не даст полного представления об этих параметрах, тогда как статистические методы позволят вывести усредненное количество прибыльных и убыточных сделок, достижения уровней поддержки и сопротивления и т.д. Имея под рукой конкретные цифры, проще понимать, как строить риск-менеджмент.
  2. Тестирование торговой системы выполняется без использования нулевого бара, то есть бара, который только формируется. Пока вы не знаете котировок внутри бара, не используйте его значения в тестировании.
  3. Убедитесь в правильности котировок. Несмотря на то, что брокеры гарантируют поставку котировок в онлайн режиме, после чего переходят в архив. По факту, архив котировок по непонятным причинам у разных брокеров отличается. И если взять один и тот же инструмент и подгрузить котировки разных ДЦ, результат может оказаться разный. Тестирование торговой системы допустимо только после анализа котировок на предмет «дыр» и «битых участков».
  4. В идеале тестирование торговых систем должно охватывать 5-6 лет. Только так можно охватить наибольший диапазон поведенческих факторов рынка. Некоторые трейдеры с этим не согласны, считая, что за 5 лет может произойти коренное изменение рыночной ситуации и система будет к этому времени нерабочей. Теория цикличности рынков пока опровергнута не была, но период тестирования оставляем на ваш выбор.
  5. Наиболее объективным будет тестирование по всем тикам. Оптимизация нескольких параметров может занять больше 24 часов, но это оправдано.
  6. Параметры торговой системы не должны противоречить свойствам актива, на котором осуществляется тестирование. Каждая валютная пара имеет индивидуальный уровень ордеров стоп-лосс, тейк-профит, спред и т.д. В МТ 4 это можно увидеть, перейдя по меню «Обзор рынка — Символы — Свойства». Если в тестировании будут установлены значения, превышающие указанные параметры, возникнет ошибка:
  • 130 — неправильные стопы;
  • 131 — неправильный торговый объем.

Аномальные показатели параметров МТ4 возможны в период выхода новостей, потому в такие моменты возможны погрешности при тестировании.

  1. Наибольшее внимание уделите последнему участку тестирования торговой системы. Речь идет о последнем годе (для 5-тилетнего периода) или месяце (для тестирования 12 месяцев). На нем рекомендуется проводить «слепое» тестирование, то есть тестирование с параметрами, находящимися за пределами выборки. Если на последнем периоде в ситуации «стресс-тест» (вне зоны классического поведения рынка) система показывает сбой, то требуется оптимизация. В худшем случае это означает, что система не способна сопротивляться форс-мажорным факторам.
  2. Тестирование торговой системы должно быть комплексным. Иными словами, важно проверять работу системы не только в целом, но и отдельно по входам и выходам. Например, роб отлично входит в рынок, но допускает провалы на выходе. В целом система может смотреться и симпатично, но, понимая, что слабое место — закрытие позиции, можно сделать систему еще более совершенной.

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