Стратегия следования за трендом, основанная на динамических полосах поддержки и сопротивления


Дата создания: 2023-12-26 11:57:20 Последнее изменение: 2023-12-26 11:57:20
Копировать: 1 Количество просмотров: 496
1
Подписаться
1623
Подписчики

Стратегия следования за трендом, основанная на динамических полосах поддержки и сопротивления

Обзор

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

Стратегический принцип

  1. Вычислить максимальные и минимальные цены за последние N циклов, в сочетании с текущими закрытыми ценами, чтобы сформировать динамическую среднюю ось
  2. Динамическая полоса пропускания, генерируемая в соответствии с ATR и множителями, изменяется с рыночными колебаниями
  3. Сделайте больше, когда цена отскочит от нижней линии, сделайте больше, когда цена отскочит от верхней линии
  4. С остановкой и логикой остановки, целью является возвращение к остановке на центральной оси
  5. Одновременно рассчитывается индекс тренда, используемый для фильтрации неудачных сделок.

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

  1. Динамическое изменение позиции каналов, позволяющее в реальном времени улавливать рыночные колебания
  2. Большая вероятность торговать по курсу, что помогает уловить тенденцию
  3. Логика сдерживания убытков

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

  1. Неправильная оптимизация параметров может привести к чрезмерной торговле
  2. Нельзя полностью избавиться от неудачных сделок при больших тенденциях
  3. Линия одностороннего прорыва может быть продолжена

Направление оптимизации

  1. Настройка параметров канализационных линий, чтобы они соответствовали характеристикам разных сортов
  2. Корректировка параметров индекса тренда для повышения вероятности прогресса
  3. Добавление элементов машинного обучения для динамической оптимизации параметров

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Strategy - Bobo PAPATR", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000)

// === STRATEGY RELATED INPUTS AND LOGIC ===
len = input(24, minval=1, title="Pivot Length, defines lookback for highs and lows to make pivots")
length = input(title="ATR lookback (Lower = bands more responsive to recent price action)", type=input.integer, defval=22)
myatr = atr(length)
dailyatr = myatr[1]
atrmult = input(title="ATR multiplier (Lower = wider bands)", type=input.float, defval=3)
pivot0 = (high[1] + low[1]  + close[1]) / 3

// PIVOT CALC
h = highest(len)
h1 = dev(h, len) ? na : h
hpivot = fixnan(h1)
l = lowest(len)
l1 = dev(l, len) ? na : l
lpivot = fixnan(l1)
pivot = (lpivot + hpivot + pivot0) / 3
upperband1 = (dailyatr * atrmult) + pivot
lowerband1 = pivot - (dailyatr * atrmult)
middleband = pivot

// == TREND CALC ===
i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually
i2=input(20, "Slow Period", minval=1)
i3=input(5, "Fast Period", minval=1)
i4=input(3, "Smoothing Period", minval=1)
i5=input(4, "Signal Period", minval=1)
i6=input(50, "Extreme Value", minval=1)
hiDif = high - high[1]
loDif = low[1] - low
uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0
dDM =  loDif > hiDif and loDif > 0 ? loDif : 0
ATR = rma(tr(true), i1)
DIu = 100 * rma(uDM, i1) / ATR
DId = 100 * rma(dDM, i1) / ATR
HLM2 =  DIu - DId
DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) /  ema(ema(ema(abs(HLM2), i2), i3), i4)
signal = ema(DTI, i5)


// === RISK MANAGEMENT INPUTS ===
inpTakeProfit   = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3])
exitLong = (high > middleband)
strategy.entry(id = "Long", long = true, when = enterLong) 
strategy.close(id = "Long", when = exitLong)

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3])
exitShort = (low < middleband)
strategy.entry(id = "Short", long = false, when = enterShort)
strategy.close(id = "Short", when = exitShort)

// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss)

// === CHART OVERLAY ===
plot(upperband1, color=#C10C00, linewidth=3)
plot(lowerband1, color=#23E019, linewidth=3)
plot(middleband, color=#00E2E2, linewidth=3)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)