Turtle: Тест второй – Robo.trading

Turtle: Тест второй

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

 

Капитал и комиссия

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

Было:

strategy(«Turtle Strategy Test-1», overlay = true)

Стало:

strategy(«Turtle Strategy Test-2», overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 100, commission_value = 0.1)

default_qty_type = strategy.percent_of_equity

Аргумент default_qty_type назначает какой способ измерения суммы для торговли у нас будет по умолчанию, а strategy.percent_of_equity означает что будет % от капитала на счёте.

initial_capital = 1000

Аргумент initial_capital задаёт какой у нас будет изначальный стартовый капитал. По древней традиции сделаем $1.000. Хотя этого можно было и не делать, и указывать вообще, тогда было бы как по умолчанию $100.000.

default_qty_value = 100

Аргумент default_qty_value задаёт значение по умолчанию, и нас это будет 100. Значит 100% от капитала. Или «входим на всю котлету» ?

commission_value = 0.1

Аргумент commission_value задаёт размер комиссии по умолчанию, о чём не сложно догадаться из его названия. Комиссия на нужной нам бирже и на интересующей нас паре составляет 0,075%, но мы ставим комиссию больше чем на бирже, то есть «с запасом», чтобы учесть еще и проскальзывания, которые обязательно будут случаться. То есть вполне возможно что реальная прибыль от торговли окажется чуть больше, чем полученная в результате теста, но может получиться и чуть меньше (особенно если сумма в торговле очень крупная — от этого сильно зависит какие будут проскальзывания).

 

Параметры

Мы хотели протестировать и с другими периодами, не только 20 свечей, но и 55, 50 и любые другие. Есть 2 варианта как мы будем менять это число: либо каждый раз менять цифру в исходном коде скрипта, что будет очень неудобно, либо создать пользовательский параметр, чтобы пользователь сам мог поменять его в любой момент в удобной форме. Так и сделаем. Сразу после объявления стратегии добавим блок «Параметры».

//Параметры
dlina = input(20)

//Рассчитаем линии канала Дончана
high_line = highest(high, dlina)
low_line = lowest(low, dlina)

dlina = input(20)

Команда input как раз и создаёт пользовательский параметр. В качестве первого и единственного аргумента, здесь указано значение по умолчанию, которое 20, но пользователь сможет изменить это число в настройках. Аргументов у команды может быть куда больше, но нам их пока не нужно. Выбранное пользователем значение задаётся переменной, которая тут названа dlina, чтобы наш код стратегии был как можно более понятным.

high_line = highest(high, dlina)

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

low_line = lowest(low, dlina)

Здесь аналогичное изменение.

 

Тестируем разную длину

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

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

  • 10 свечей — круглое число
  • 20 свечей — столько предлагал автор
  • 30 свечей — кол-во дней в месяце (для «непрерывных» рынков, вместо 20)
  • 50 свечей — круглое число
  • 55 свечей — столько предлагал автор
  • 90 свечей — кол-во дней в квартале (для «непрерывных» рынков, вместо 55)
  • 100 свечей — круглое число

 

//@version=4
strategy(«Turtle Strategy Test-2», overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 100, commission_value = 0.1)

//Параметры
dlina = input(20)

//Рассчитаем линии канала Дончана
high_line = highest(high, dlina)
low_line = lowest(low, dlina)

//Нарисуем поверх гракика обе линии канала Дончяна
plot(high_line, offset = 1)
plot(low_line, offset = 1)

//Откроем сделки по ценам, которые равны цене линии канала
if high_line > 0

strategy.entry(«Long», strategy.long, stop = high_line)
strategy.entry(«Short», strategy.short, stop = low_line)

Теперь хорошо видно что идея использовать 30-дневный период себя не оправдала. Хорошо работает 20-дневный период, который рекомендовал не только автор стратегии «Turtle», но и сам разработчик индикатора Ричард Дончян. Конечно, можно было бы попробовать и другое количество свечей, типа 17, 18, 19 и так далее, но это был бы уже оверфиттинг (излишняя подгонка под данные прошлого). Таким методом мы бы подобрали идеальные настройки для прошлого, которые были бы идеальными только для прошлого. Вот только торговать то мы планируем не в прошлом.

С 90-дневным периодом оказалось получше. Во всяком случае это лучше чем авторский 55-дневный период.

 Длина % прибыльных сделок  Максимальная просадка  Фактор прибыли  Прибыль
 10  42%  -50% 1,294 +962%
 20  49% -49%  2,147 +3.560%
 30  54% -60% 1,862  +436%
 50  50%  -65% 1,689  +190%
55  44%  -69%  1,336 +106%
90  50%  -75%  1,306  +969%
100 50% -76%  1,272 +862%

 

Подсказки

Подсказка 1: Здесь очень стоит снова обратить на % прибыльных сделок. Как видим % прибыльных сделок совершенно не важен, а новички обращают на него внимание совершенно зря. Самый большой % прибыльных сделок показал 30-дневный вариант с прибылью +436%, тогда как 20-дневный вариант имеет прибыль во много раз больше, намного ниже максимальную просадку, но лишь 49% прибыльных сделок. Кстати да, нет ничего плохого в том что у системы большинство сделок убыточны. Потому что размер прибыли от прибыльной сделки не равен размеру убытка от убыточной. А это значит что система может быть прибыльной и при 10% прибыльных сделок (когда остальные 90% сделок убыточны).

Подсказка 2: существуют трендовые и контр-трендовые торговые системы (тут уж третьего не дано), и опримальный % прибыльных сделок зависит от типа системы. Для трендовой торговой системы наиболее предпочтительно и оптимально чтобы % прибыльных сделок был близок к 38% (следовательно желательно чтобы остальные 62% сделок были убыточными). Для контр-трендового подхода наоборот, желательно иметь 62% прибыльных сделок и 38% убыточных. То есть неверно ожидать «чем больше прибыльных — те лучше». Это ошибка. Почему это оптимальные числа здесь объяснения не будет, так как вопрос этот большой и на эту тему можно написать отдельную книгу.

 

Резюме второго теста

Автор предлагал нам торговать пробой 20-дневного максимума и минимума, и такой вариант оказался лучше других — здесь прислушаемся. Так что «черепашки» были скорее вынуждены торговать на дневном таймфрейме, так как торговали на прерывистых рынках. Торговля на непрерывных рынках позволяет более эффективно использовать более мелкие таймфреймы, чем дневной, и это тоже надо проверить. Уже нашем в третьем тесте.

/

Robo.Trading

eVe Developer
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять