트렌드 ATR 브레이크업 전략

저자:차오장, 날짜: 2023-12-06 18:03:38
태그:

img

전반적인 설명

꿀 트렌드 ATR 브레이크아웃 전략 (Honey Trend ATR Breakout Strategy) 은 트레이딩 신호를 생성하기 위해 ATR 지표와 볼링거 밴드를 기반으로 한 중장기 브레이크아웃 전략이다. 주로 상부 및 하부 ATR 채널의 특정 너비 내에서 주식 가격의 트렌드 변화를 모니터링한다. 가격이 하부 또는 상부 레일을 통과하면 트렌드 필터링과 결합하여 거래 결정을 내린다.

전략 원칙

이 전략은 세 가지 주요 부분으로 구성됩니다.

  1. ATR 채널: ATR 지표를 통해 주식 가격의 변동 범위를 계산하고 이 범위 내에서 위아래 채널을 형성합니다. 채널 너비는 ATR 룩백 기간과 ATR 디바이저 인자로 제어됩니다.

  2. Bee Line: 주식 가격의 중간선을 기준으로 삼습니다. 중간선의 계산 방법은: 어제의 최고, 최저 및 폐쇄 가격의 평균 값입니다.

  3. 트렌드 필터링: DMI 지표를 통해 가격 트렌드를 계산하고 신호 사이클을 설정합니다. pricesig >: pricesig[3], 트렌드가 상승합니다. pricesig < pricesig[3], 트렌드가 하락합니다.

트레이딩 신호를 생성하는 구체적인 논리는 다음과 같습니다.

긴 신호: pricesig > pricesig[3] 및 채널의 하부 레일을 통해 가격 파기.

짧은 신호: pricesig < pricesig[3] 및 채널의 상단 레일을 통해 가격 파업.

다른 상황에서는 거래가 없습니다.

이 전략은 또한 거래 위험을 통제하기 위해 스톱 이윤 및 스톱 손실 조건을 설정합니다.

이점 분석

꿀 트렌드 ATR 브레이크아웃 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 시장 변화를 동적으로 파악할 수 있는 ATR 지표를 사용하여 주식 가격의 변동 범위를 계산합니다.

  2. 중간선을 조합해서 주식 가격의 변동을 평가하고 채널 브레이크아웃 거래 포인트를 설정하여 최고치를 추구하고 최저치를 없애는 것을 피합니다.

  3. DMI 지표는 트렌드를 결정하고 트렌드에 반대되는 거래를 피하고 승률을 향상시키기 위해 사용됩니다.

  4. 단일 거래의 위험을 통제하기 위해 수익 중지 및 손실 중지 조건을 설정합니다.

  5. 전략 매개 변수들은 채널 너비, ATR 사이클 및 기타 요인을 조정하여 전략을 최적화 할 수 있을 만큼 유연합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 중장기 거래는 상대적으로 큰 변동과 높은 위험을 가지고 있습니다. 신중한 돈 관리가 필요합니다.

  2. ATR 채널 범위 계산은 주식 가격이 급격히 변동할 때 정확하지 않을 수 있습니다. 이것은 쉽게 잘못된 거래로 이어집니다.

  3. DMI 지표는 또한 트렌드 판단에 오류를 범할 수 있으며, 따라서 거래 신호의 정확성에 영향을 줄 수 있습니다.

위의 위험에 대응하여 ATR 채널과 같은 매개 변수를 조정하고 최적화 및 개선을 위해 신호 주기를 늘릴 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 채널 범위를 압축하거나 확장하기 위해 atrDivisor를 위로 또는 아래로 수정하여 ATR 채널 너비를 조정합니다.

  2. 최근 변동에 대한 채널의 감수성을 변경하기 위해 ATR 룩백 사이클 매개 변수를 조정합니다.

  3. 상승과 하락 트렌드 판단의 정확성을 높이기 위해 트렌드 신호 사이클 매개 변수를 조정합니다.

  4. 신호 품질을 향상시키기 위해 여러 요소 검증을 위한 다른 지표를 추가합니다.

  5. 리스크 통제를 개선하기 위해 스톱프로피트 및 스톱 손실 알고리즘을 최적화합니다.

결론

꿀 트렌드 ATR 브레이크아웃 전략은 가격 변동 범위 및 트렌드 판단 지표의 분석을 통합합니다. 시장 핫스팟을 포착하는 동시에 거래 위험을 제어합니다. 유연하고 적응 가능한 양적 전략입니다. 이 전략은 파라미터 조정 및 신호 최적화를 통해 지속적으로 개선 될 수 있으며 광범위한 응용 전망이 있습니다.


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

// === STRATEGY RELATED INPUTS AND LOGIC ===
PivottimeFrame = input(title="Pivot Timeframe",  defval="D")
ATRSDtimeFrame = input(title="ATR Band Timeframe (Lower timeframe = wider bands)",  defval="D")
len = input(title="ATR lookback (Lower = bands more responsive to recent price action)",  defval=13)
myatr = atr(len)
dailyatr = request.security(syminfo.tickerid, ATRSDtimeFrame, myatr[1])
atrdiv = input(title="ATR divisor (Lower = wider bands)", type=float, defval=2)
pivot0 = (high[1] + low[1]  + close[1]) / 3
pivot = request.security(syminfo.tickerid, PivottimeFrame, pivot0)
upperband1 = (dailyatr / atrdiv) + pivot
lowerband1 = pivot - (dailyatr / atrdiv)
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)

더 많은