Эта стратегия использует канал ATR и теорию прорыва, чтобы следовать тенденциям, входя, когда канал прерывается. Она относится к стратегиям, следующим за трендом. Стратегия проста и легко понятна, используя движущиеся средние каналы и индикаторы ATR для определения направления тренда и выдачи торговых сигналов в ключевых точках.
Эта стратегия строит верхние и нижние полосы с высокими, низкими, закрытыми ценами и индикатором ATR для формирования ATR-канала. Ширина канала определяется размером параметра ATR. Когда цена проходит через канал, она рассматривается как начало тренда, в точке которого вводятся длинные или короткие позиции. Стратегия имеет два уровня торговых сигналов. Когда цена проходит через одну ширину ATR, она считается формирующимся трендом, запуская первый уровень точек покупки/продажи. Когда цена проходит через две ширины ATR, она считается ускоряющимся трендом, запуская второй уровень точек покупки/продажи.
Основными преимуществами этой стратегии являются:
Основными рисками этой стратегии являются:
Направления оптимизации этой стратегии включают:
Общая структура этой стратегии ясна и может использоваться в качестве доказательства концепции. Но есть пробелы в живой торговле, которые позволяют существенную оптимизацию. Если можно еще больше улучшить контроль рисков и частоту торговли, перспективы применения будут хорошими.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Myhaj_Lito //@version=5 strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true) TF = input.timeframe(title='TimeFrame', defval="60") ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000) HIGH = request.security(syminfo.tickerid, TF, high) LOW = request.security(syminfo.tickerid, TF, low) CLOSE = request.security(syminfo.tickerid, TF, close) ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength)) RENKOUP = float(na) RENKODN = float(na) H = float(na) COLOR = color(na) BUY = int(na) SELL = int(na) UP = bool(na) DN = bool(na) CHANGE = bool(na) RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1] RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1] H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1] COLOR := na(COLOR[1]) ? color.white : COLOR[1] BUY := na(BUY[1]) ? 0 : BUY[1] SELL := na(SELL[1]) ? 0 : SELL[1] UP := false DN := false CHANGE := false // calculating if not CHANGE and close >= RENKOUP[1] + H * 2 CHANGE := true UP := true RENKOUP := RENKOUP[1] + ATR * 2 RENKODN := RENKOUP[1] + ATR COLOR := color.rgb(0, 255, 170,60) SELL := 0 BUY += 2 BUY if not CHANGE and close >= RENKOUP[1] + H CHANGE := true UP := true RENKOUP := RENKOUP[1] + ATR RENKODN := RENKOUP[1] COLOR := color.rgb(0, 230, 38,60) SELL := 0 BUY += 1 BUY if not CHANGE and close <= RENKODN[1] - H * 2 CHANGE := true DN := true RENKODN := RENKODN[1] - ATR * 2 RENKOUP := RENKODN[1] - ATR COLOR := color.rgb(255, 92, 43,60) BUY := 0 SELL += 2 SELL if not CHANGE and close <= RENKODN[1] - H CHANGE := true DN := true RENKODN := RENKODN[1] - ATR RENKOUP := RENKODN[1] COLOR := color.rgb(245, 69, 69,60) BUY := 0 SELL += 1 SELL //// STRATEGY if(UP) strategy.entry("Long",strategy.long) if(DN) strategy.entry("Short",strategy.short) // ploting bgcolor(COLOR)