Tang Anqi Turtle Trading Strategy - это очень упрощенная версия оригинальной торговой стратегии Turtle. Она сильно отличается от оригинальной торговой стратегии Turtle. Стратегия использует два канала Дончиана, быстрый канал и медленный канал. Периоды канала устанавливаются пользователем, с значениями по умолчанию 20 бар для быстрого канала и 50 бар для медленного канала. Стратегия использует верхнюю и нижнюю полосы медленного канала для входа в сделки и среднюю полосу быстрого канала для установки стоп-лосса.
Основная логика этой стратегии заключается в следующем:
Вычислите быстрый канал Донкиана: верхняя полоса - это самый высокий максимум за прошлые быстрые балы, нижняя полоса - самый низкий минимум, а средняя полоса - это среднее значение верхней и нижней полос.
Вычислите медленный канал Донкиана: верхняя полоса - это самый высокий уровень по сравнению с прошлыми медленными барами, нижняя полоса - самый низкий уровень.
При отсутствии позиции длинный сигнал запускается, когда цена касается верхней полосы медленного канала, а короткий сигнал запускается, когда цена касается нижней полосы медленного канала.
После открытия позиции средняя полоса быстрого канала используется в качестве стоп-лосса.
Закрыть позицию, когда в течение периода хранения присутствует противоположный сигнал, чем сигнал открытия.
Преимущества этой стратегии:
Простые правила, простые в реализации.
Пользователи могут регулировать параметры на основе торговых продуктов и временных рамок для адаптации к различным рыночным условиям.
Немногие противоречивые торговые сигналы. Опирается только на ценовые прорывы канальных диапазонов, избегает ложных сигналов от общих показателей.
Автоматическое управление стоп-лосом. Движущаяся стоп-лосс, основанная на средней полосе быстрого канала, может ограничить потери на одиночных сделках.
Риски, с которыми сталкивается эта стратегия, включают:
Больше стоп-лосса, когда тенденция неясна.
Когда тенденция меняется, плавающие прибыли в предыдущем направлении тренда превращаются в убытки.
Неправильные настройки параметров приводят к чрезмерной агрессивности или чрезмерной консервативности.
Высокая зависимость от автоматизированной торговли. Стабильность сервера важна, чтобы избежать исключений, приводящих к неудачам в автоматизированной торговле.
Для уменьшения вышеуказанных рисков можно оптимизировать параметры, а также ограничить размер позиций и добавить модули управления рисками.
Стратегии могут быть улучшены в следующих аспектах:
Добавьте фильтры для входных сигналов, чтобы избежать попадания сигналов обратного тренда. Например, используйте индикаторы тренда для определения направления тренда.
Оптимизировать такие параметры, как периоды канала и размещение позиций, чтобы лучше соответствовать различным торговым инструментам.
Добавить модули управления рисками, такие как максимальные лимиты привлечения и ежедневные лимиты потерь, чтобы предотвратить чрезмерные потери в экстремальных случаях.
Улучшить стратегии стоп-лосса. Например, принять отставание стоп-лосса, чтобы сделать стопы более адаптивными к тенденциям рынка.
Подводя итог, Стратегия торговли черепахами Тан является простой системой, следующей за трендом. Ее преимущества заключаются в ее простоте понимания и автоматизации. Но она также несет в себе определенные риски, и необходимы дальнейшие оптимизации параметров и управления рисками, чтобы сделать ее более практичной. С помощью таких мер, как настройка параметров, добавление фильтров и модулей контроля риска, стратегия может достичь лучших результатов в живой торговле.
/*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)