채널 브레이크아웃 반전 트레이딩 전략


생성 날짜: 2024-02-19 15:12:44 마지막으로 수정됨: 2024-02-19 15:12:44
복사: 0 클릭수: 603
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

채널 브레이크아웃 반전 트레이딩 전략

개요

채널을 뚫고 반전하는 거래 전략은 가격 채널의 이동 스톱 스톱 손실 지점을 추적하는 반전 거래 전략이다. 그것은 중화 이동 평균 방법을 사용하여 가격 채널을 계산하고 가격이 채널을 뚫을 때 오버 헤드 또는 공백 위치를 설정한다.

전략 원칙

이 전략은 먼저 와일더의 평균 실제 범위 (((ATR) 지표를 사용하여 가격 변동률을 계산한다. 그리고 ATR 값에 따라 평균 범위 상수 (((ARC) 를 계산한다. ARC는 가격 통로의 절반 폭이다.

구체적으로, 먼저 가장 가까운 N근 K 선의 ATR을 계산한다. 그리고 ATR을 계수로 곱하면 ARC가 나온다. ARC를 계수로 곱하면 통로의 폭을 제어할 수 있다. ARC를 N근 K 선의 절감 가격의 가장 높은 지점에 더하면 통로의 상도, 즉 높은 SAR이 나온다.

전략적 이점

  1. 가격 변동률을 계산하는 적응 통로를 사용하여 시장 변화를 추적할 수 있습니다.
  2. 역전 거래, 트렌드 역전 시장에 적합하다
  3. 이동식 스톱스톱 손실, 수익을 잠금하고 위험을 통제할 수 있습니다.

전략적 위험

  1. 역전환 거래는 조작되기 쉽고, 적절한 변수를 조정해야 합니다.
  2. 큰 변동이 있는 시장에서 쉽게 포지션을 닫을 수 있다
  3. 변수가 잘못되면 거래가 너무 자주 발생합니다.

해결책:

  1. ATR 주기와 ARC 계수를 최적화하여 통로 폭을 합리화합니다.
  2. 트렌드 지표 필터링과 함께 시점에 들어갑니다.
  3. ATR 주기를 늘리고 거래 빈도를 낮추는 것

전략 최적화 방향

  1. ATR 주기 및 ARC 계수를 최적화
  2. 예를 들어 MACD 지표와 결합하여 포지션 개시 조건을 추가합니다.
  3. 더 많은 손실을 막는 전략

요약하다

통로 돌파 반전 거래 전략은 통로를 사용하여 가격 변화를 추적하고, 변동이 심해지면 반전 포지션을 구축하고, 적응하는 모바일 스톱 스톱을 설정한다. 이 전략은 반전 중심의 청산 시장에 적용되며, 반전 지점을 정확하게 판단하는 전제하에 좋은 투자 수익을 얻을 수 있다. 그러나 스톱 스톱의 과도한 완화 및 변수 최적화 문제를 방지하는 데 주의가 필요합니다.

전략 소스 코드
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=LucF

// Volatility System [LucF]
// v1.0, 2019.04.14

// The Volatility System was created by Welles Wilder.
// It first appeared in his seminal masterpiece "New Concepts in Technical Trading Systems" (1978).
// He describes it on pp.23-26, in the chapter discussing the first presentation ever of the "Volatility Index",
// which later became known as ATR.
// Performance of the strategy usually increases with the time frame.
// Tuning of ATR length and, especially, the ARC factor, is key.

// This code runs as a strategy, which cannot generate alerts.
// If you want to use the alerts it must be converted to an indicator.
// To do so:
//      1. Swap the following 2 lines by commenting the first and uncommenting the second.
//      2. Comment out the last 4 lines containing the strategy() calls.
//      3. Save.
strategy(title="Volatility System by Wilder [LucF]", shorttitle="Volatility System [Strat]", overlay=true, precision=8, pyramiding=0, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// study("Volatility System by Wilder [LucF]", shorttitle="Volatility System", precision=8, overlay=true)

// -------------- Colors
MyGreenRaw = color(#00FF00,0),      MyGreenMedium = color(#00FF00,50),  MyGreenDark = color(#00FF00,75),    MyGreenDarkDark = color(#00FF00,92)
MyRedRaw = color(#FF0000,0),        MyRedMedium = color(#FF0000,30),    MyRedDark = color(#FF0000,75),      MyRedDarkDark = color(#FF0000,90)

// -------------- Inputs
LongsOnly = input(false,"Longs only")
ShortsOnly = input(false,"Shorts only")
AtrLength = input(9, "ATR length", minval=2)
ArcFactor = input(1.8, "ARC factor", minval=0, type=float,step=0.1)
ShowSAR = input(false, "Show all SARs (Stop & Reverse)")
HideSAR = input(false, "Hide all SARs")
ShowTriggers = input(false, "Show Entry/Exit triggers")
ShowTradedBackground = input(false, "Show Traded Background")

FromYear  = input(defval = 2000,    title = "From Year", minval = 1900)
FromMonth = input(defval = 1,      title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1,       title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999,    title = "To Year", minval = 1900)
ToMonth   = input(defval = 1,       title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1,       title = "To Day", minval = 1, maxval = 31)

// -------------- Date range filtering
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00)
ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => true

// -------------- Calculate Stop & Reverse (SAR) points using Average Range Constant (ARC)
Arc   = atr(AtrLength)*ArcFactor
SarLo = highest(close, AtrLength)-Arc
SarHi = lowest(close, AtrLength)+Arc

// -------------- Entries/Exits
InLong = false
InShort = false
EnterLong = TradeDateIsAllowed() and not InLong[1] and crossover(close, SarHi[1])
EnterShort = TradeDateIsAllowed() and not InShort[1] and crossunder(close, SarLo[1])
InLong := (InLong[1] and not EnterShort[1]) or (EnterLong[1] and not ShortsOnly)
InShort := (InShort[1] and not EnterLong[1]) or (EnterShort[1] and not LongsOnly)

// -------------- Plots
// SAR points
plot( not HideSAR and ((InShort or EnterLong) or ShowSAR)? SarHi:na, color=MyRedMedium, style=circles, linewidth=2, title="SAR High")
plot( not HideSAR and ((InLong or EnterShort) or ShowSAR)? SarLo:na, color=MyGreenMedium, style=circles, linewidth=2, title="SAR Low")
// Entry/Exit markers
plotshape( ShowTriggers and not ShortsOnly and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyGreenRaw, size=size.small, text="")
plotshape( ShowTriggers and not LongsOnly and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyRedRaw, size=size.small, text="")
// Exits when printing only longs or shorts
plotshape( ShowTriggers and ShortsOnly and InShort[1] and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyRedMedium, transp=70, size=size.small, text="")
plotshape( ShowTriggers and LongsOnly and InLong[1] and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyGreenMedium, transp=70, size=size.small, text="")
// Background
bgcolor( color=ShowTradedBackground? InLong and not ShortsOnly?MyGreenDarkDark: InShort and not LongsOnly? MyRedDarkDark:na:na)

// ---------- Alerts
alertcondition( EnterLong or EnterShort, title="1. Reverse", message="Reverse")
alertcondition( EnterLong, title="2. Long", message="Long")
alertcondition( EnterShort, title="3. Short", message="Short")

// ---------- Strategy reversals
strategy.entry("Long", strategy.long, when=EnterLong and not ShortsOnly)
strategy.entry("Short", strategy.short, when=EnterShort  and not LongsOnly)
strategy.close("Short", when=EnterLong and ShortsOnly)
strategy.close("Long", when=EnterShort and LongsOnly)