SuperTrend를 기반으로 한 장기 거래 전략


생성 날짜: 2023-09-20 17:14:33 마지막으로 수정됨: 2023-09-20 17:14:33
복사: 0 클릭수: 770
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 슈퍼트렌드 지표를 통해 긴 선 진입 기회를 식별한다. 그것은 평균 실제 범위 ATR 및 곱수를 사용하여 동적 지원 위치를 결정하고, 긴 위치에 진입한다. 이 전략은 긴 위치에 거래 기회를 중점으로 한다.

전략 원칙

  1. ATR 주기 및 곱에 따라 계산된 오르락 내리락. 가격이 오르락 돌파할 때 상승, 하락 돌파할 때 하락.

  2. 현재 트렌드를 계산하기 위해, 1은 상승을 나타내고, -1은 하락을 나타냅니다. 가격이 궤도를 돌파 할 때, 트렌드는 하락으로 전환되어 구매 신호를 유발합니다. 궤도를 돌파 할 때, 트렌드는 하락으로 전환되어 판매 신호를 유발합니다.

  3. 이동 평균을 트렌드 필터로 사용하여 MA보다 높은 가격으로 구매를 요구하고 MA보다 낮은 가격으로 판매를 요구하여 가짜 브레이크를 피합니다.

  4. 비지니스 어시스트가 트렌드, 거래 신호 등을 시각적으로 표시하여 판단을 돕습니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 슈퍼트렌드 지표는 동적으로 가격 변화를 추적하고, 트렌드 전환을 적시에 반영할 수 있다.

  2. ATR는 시장의 변동에 따라 스톱로스를 조정할 수 있으며, 이윤을 잠금하는 데 도움이 된다.

  3. MA 제거 가짜 돌파구와 결합하여, 흔들리는 시장의 잡음 거래 신호를 효과적으로 필터링 할 수 있습니다.

  4. 비주얼 디자인은 거래 전략과 시장 상황을 직관적으로 보여주고, 조작이 간단하다.

  5. 트렌드 전환점만을 거래하는 것은 긴 라인 포지션에 매우 적합하다.

위험 분석

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 수퍼트렌드 지표는 변수에 민감하며, 다중 공선 조정이 자주 이루어지며, 자주 거래가 발생할 수 있다.

  2. 진동이 발생했을 때, 정지선 (stop line) 이 자주 작동한다.

  3. 거래비용을 고려하지 않고도, 작은 자본은 거래비용에 더 큰 영향을 받는다.

  4. 하지만, 이 경우, 이 경우,

  5. 트렌드 파동이 일부 기회를 놓쳤을 수도 있습니다.

위험은 다음과 같은 방법으로 줄일 수 있습니다.

  1. ATR 매개 변수를 최적화하여 다중 노선 조정 주파수를 줄인다.

  2. 동등한 K선 필터를 추가하여 고주파의 작은 파동에 의해 멈추지 않도록 한다.

  3. 손해를 막기 위해 스톱포드를 설정하고 이윤을 보호합니다.

  4. 이동 평균 주기를 적절히 조정하여 필터링 효과를 균형 잡는다.

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

최적화 방향

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

  1. 다른 가격 소스를 테스트합니다. 예를 들어, 종점 가격, 최고 가격 등

  2. Chandelier Exit처럼 다른 동적 스톱로스 지표를 시도해보세요.

  3. 포지션 관리 모듈을 추가하고 자금 사용 효율을 최적화하십시오.

  4. 변동률 지표와 함께 refined 입점 시간.

  5. 스톱패스, 스톱 모듈을 추가하고, 위험을 제어한다.

  6. 다른 시장에 맞는 조정 파라미터.

  7. 기계 학습 알고리즘을 탐색하여 파라미터 최적화를 구현하십시오.

  8. 다른 지표와 결합하여 필터링 정확도를 향상시킵니다.

요약하다

이 전략은 SuperTrend을 사용하여 동적 스톱 로즈 판단 트렌드를 통합하고 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)