슈퍼트렌드에 기반한 장기 거래 전략

저자:차오장, 날짜: 2023-09-20 17:14:33
태그:

전반적인 설명

이 전략은 슈퍼 트렌드 지표를 사용하여 긴 기회를 식별합니다. 그것은 긴 진입에 대한 동적 지원 수준을 결정하기 위해 ATR 및 곱셈자를 사용합니다. 긴 거래에 중점을두고 있습니다.

전략 논리

  1. 상위 및 하위 대역은 ATR 기간, 곱셈 기호를 기반으로 계산됩니다. 상위 대역을 깨는 것은 상승 추세를 나타냅니다. 하위 대역을 깨는 것은 하락 추세를 나타냅니다.

  2. 현재 트렌드를 추적하고, 상승 추세를 나타내는 1과 하락 추세를 나타내는 -1이 있습니다. 상단단위 이상의 가격 경류는 트렌드를 아래쪽에서 위로 전환하여 구매 신호를 생성합니다. 하단단위 아래쪽의 경류는 위쪽에서 아래쪽으로 전환하여 판매 신호를 생성합니다.

  3. 유동 평균은 트렌드 필터로 추가됩니다. 상단 너머로 넘어갈 때 가격이 MA보다 높을 때만 구매하십시오. 하단 너머로 넘어갈 때 가격이 MA보다 낮을 때만 판매하십시오. 이것은 가짜 브레이크오프를 피합니다.

  4. 시각 보조자는 트렌드, 신호 등을 강조하여 의사 결정에 도움이 됩니다.

이점 분석

이 전략의 장점:

  1. 슈퍼트렌드는 가격 변화를 동적으로 추적하고 트렌드 변화를 적시에 반영합니다.

  2. ATR 스톱 로스는 시장의 변동성에 따라 스톱을 조정하여 수익을 확보하는 데 도움이 됩니다.

  3. MA 필터는 다양한 시장에서 잡음으로부터 잘못된 신호를 제거합니다.

  4. 시각 디자인은 전략 메커니즘과 시장 상황을 직관적으로 제시합니다.

  5. 거래 트렌드 역행만 장기 보유에 적합합니다.

위험 분석

주요 위험은 다음과 같습니다.

  1. 슈퍼트렌드는 매개 변수에 민감합니다. 빈번한 대역 조정으로 인해 거래가 과도하게 발생할 수 있습니다.

  2. 불안한 시장에서는 종종 정지 현상이 발생할 수 있습니다.

  3. 거래 비용을 고려하지 않습니다. 작은 계좌는 더 큰 영향을 받습니다.

  4. 스톱 로스가 없는 것은 높은 마감 위험을 의미합니다.

  5. 트렌드 필터는 어떤 기회를 놓칠 수도 있습니다.

위험은 다음과 같이 감소 할 수 있습니다.

  1. ATR 매개 변수를 최적화하여 낮은 대역 조정 주파수를 사용합니다.

  2. 높은 주파수의 작은 변동으로 정지되는 것을 피하기 위해 동등한 바 필터링을 추가합니다.

  3. 손해를 막고 수익을 취하기 위해 수익을 보호합니다

  4. 평형 필터링 효과로 이동 평균 기간 조정.

  5. 거래 비용의 영향을 줄이기 위해 자금 관리 최적화.

최적화 방향

이 전략은 다음과 같은 측면에서 향상될 수 있습니다.

  1. 다른 가격 소스를 테스트하십시오.

  2. 다른 동적 스톱 로스 표시기를 시도해보세요.

  3. 자본 활용을 최적화하기 위해 포지션 사이징을 추가합니다.

  4. 적립을 정비하기 위해 변동성 지표를 포함합니다.

  5. 스톱 로스를 적용하고 리스크를 통제하기 위해 이윤을 취합니다.

  6. 다른 시장에 대한 매개 변수를 조정합니다.

  7. 매개 변수 최적화를 위해 기계 학습을 탐구합니다.

  8. 필터 정확도를 높이기 위해 다른 지표를 조합합니다.

결론

이 전략은 트렌드를 결정하기 위해 동적 스톱과 함께 슈퍼 트렌드를 사용하고, 긴 항목을 식별하기 위해 MA 필터를 추가합니다. 시각적 디자인은 작업을 단순화합니다. 최적화된 매개 변수와 추가 기능으로 강력한 장기 거래 전략이 될 수 있습니다.


/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)

atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0))

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

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

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())

shortCondition = sellSignal
if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short, when = window())

buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)


더 많은