Стратегия торговли черепахами на основе Дончианских каналов

Автор:Чао Чжан, Дата: 2024-02-26 14:35:02
Тэги:

img

Обзор

Tang Anqi Turtle Trading Strategy - это очень упрощенная версия оригинальной торговой стратегии Turtle. Она сильно отличается от оригинальной торговой стратегии Turtle. Стратегия использует два канала Дончиана, быстрый канал и медленный канал. Периоды канала устанавливаются пользователем, с значениями по умолчанию 20 бар для быстрого канала и 50 бар для медленного канала. Стратегия использует верхнюю и нижнюю полосы медленного канала для входа в сделки и среднюю полосу быстрого канала для установки стоп-лосса.

Логика стратегии

Основная логика этой стратегии заключается в следующем:

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

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

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

  4. После открытия позиции средняя полоса быстрого канала используется в качестве стоп-лосса.

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

Анализ преимуществ

Преимущества этой стратегии:

  1. Простые правила, простые в реализации.

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

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

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

Анализ рисков

Риски, с которыми сталкивается эта стратегия, включают:

  1. Больше стоп-лосса, когда тенденция неясна.

  2. Когда тенденция меняется, плавающие прибыли в предыдущем направлении тренда превращаются в убытки.

  3. Неправильные настройки параметров приводят к чрезмерной агрессивности или чрезмерной консервативности.

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

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

Руководство по оптимизации

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

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

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

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

  4. Улучшить стратегии стоп-лосса. Например, принять отставание стоп-лосса, чтобы сделать стопы более адаптивными к тенденциям рынка.

Заключение

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


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's SimpleTurtle Strategy", shorttitle = "SimpleTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
sizelong  = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
fast      = input(20, minval=1)
slow      = input(50, minval=1)
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(false, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear    = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth   = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday   = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today     = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc)
plot(ls, offset = offset, color = colorpc)
plot(center, offset = offset, color = colorsl)

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Orders
truetime = true
lotlong = 0.0
lotshort = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and truetime)
strategy.exit("Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if true
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)

Больше