
이 “Advanced Multi-Functional SuperTrend Trend Tracking Strategy with Automatic Stop Loss System”는 SuperTrend 지표 기반의 양적 거래 전략으로, 자동 스톱 로즈 (TP/SL) 메커니즘과 입시 최적화 논리를 결합한다. 전략의 핵심은 SuperTrend 지표를 사용하여 시장의 흐름을 식별하고, 트렌드 전환점에 거래 신호를 발송하며, 실제 입시 지점을 비율의 편향으로 조정하고, 리스크를 관리하고 수익을 잠금하기 위해 사전 정의된 스톱 로즈 수준을 설정한다. 이 전략의 이러한 방법은 트레이더가 트렌드를 확인한 후 더 이상적인 가격으로 입시하도록 허용하며, 명확한 위험 제어 파라미터를 가지고 있다.
이 전략은 슈퍼트렌드 지표의 계산과 적용에 기반을 두고 있으며, 기본 원칙은 다음과 같다.
수퍼트렌드 계산우선, 전략은 시장의 변동성을 측정하기 위해 ATR을 계산한다. 그리고, ATR과 사용자 정의의 배수를 사용하여 상반대와 하반대 (upperBand) 를 결정한다. 슈퍼 트렌드는 가격의 위치와 관련해서 현재의 트렌드를 결정한다.
트렌드 식별: 가격이 상승을 돌파할 때, 트렌드는 하락으로 변한다 ((-1); 가격이 하락을 돌파할 때, 트렌드는 상승으로 변한다 ((1)). 전략 추적 트렌드의 변화, 트렌드가 -1에서 1으로 변할 때 구매 신호를 발신하고, 트렌드가 1에서 1으로 변할 때 판매 신호를 발신한다.
입시 최적화: 전략은 트렌드 역점에서 즉시 입장을 취하지 않고, 오차 가격을 계산한다. 구매 신호에 대해, 입시 지점은 신호 가격보다 특정 비율로 낮게 설정된다 ((entryOffsetPerc); 판매 신호에 대해, 입시 지점은 신호 가격보다 특정 비율로 높게 설정된다.
자동 정지: 일단 입시되면, 전략은 자동으로 입시 가격과 사용자가 정의한 비율 변수에 따라 중지 (TP) 및 중지 (SL) 수준을 설정한다. 다중 거래의 중지 (stop) 은 입시 가격 위의 일정 비율로 설정하고, 중지 (stop) 는 입시 가격 아래의 일정 비율로 설정한다. 공백 거래는 반대로한다.
발사 메커니즘: 전략은 가격이 스톱스톱 또는 스톱로스 레벨에 도달하는지 모니터링한다. 스톱스톱 또는 스톱로스 레벨에 도달하면 거래가 평점으로 표시되고, 그래프에 해당하는 표시가 표시됩니다.
트렌드 확인 후 최적화된 입학: 전통적인 슈퍼 트렌드 전략과 달리 트렌드 라인이 교차했을 때 즉시 입문하는 전략은 신호가 생성된 후 가격이 더 유리한 위치에 회수될 때까지 기다려야 입문할 수 있습니다. 이것은 입문 가격의 유리한성을 높이고, 가짜 돌파가 초래되는 위험을 줄일 수 있습니다.
자동화된 위험 관리이 전략은 각 거래에 대해 명확한 탈퇴 조건을 자동으로 설정하는 스톱 스톱 손실 메커니즘을 내장하고 있으며, 주관적인 감정으로 인해 거래자가 불리한 거래를 제때 탈퇴하지 못하는 문제를 방지합니다.
거래 정보를 시각화합니다.: 전략은 차트에 진입 지점, 정지 및 중단 손실 트리거를 표시하여 거래자가 거래의 성과를 직관적으로 이해할 수 있도록 해줍니다. 이는 후기 분석 및 전략 최적화에 도움이 됩니다.
매개 변수 조정전략은 ATR 주기, ATR 곱하기, 스톱 스톱 손실 비율 및 입점 편향 비율을 포함한 여러 조정 가능한 매개 변수를 제공하여 거래자가 다른 시장 환경과 개인 위험 선호도에 따라 조정할 수 있습니다.
양방향 거래이 전략은 상반기 거래와 상반기 거래를 동시에 지원하여 상반기 및 하반기 트렌드에서 수익을 창출하고 시장 기회를 극대화합니다.
트렌드 허위 돌파 위험이 문제는 전략이 입점 이동을 통해 완화했음에도 불구하고, 시장은 단기적인 변동으로 트렌드를 깨고 다시 원래의 트렌드에 복귀하여 불필요한 거래 신호와 손실을 초래할 수 있습니다.
고정된 손실 비율의 제한: 전략은 고정 비율을 설정한 스톱로드를 사용한다. 이것은 항상 최적이 아닐 수도 있다. 높은 변동성이 있는 시장에서 고정 비율 스톱로드는 너무 작아서 자주 트리거를 유발할 수도 있고, 낮은 변동성이 있는 시장에서 너무 커서 너무 많은 손실을 초래할 수도 있다.
매개 변수 최적화 도전최적의 ATR 주기를 찾는 것은 많은 양의 역사 데이터 테스트와 최적화를 필요로 하며, 최적의 매개 변수는 시장 조건의 변화에 따라 조정될 수 있다.
시장 공백 위험: 가격 격차가 발생했을 때, 실제 스톱 손실 가격은 설정된 스톱 손실 수준보다 훨씬 낮거나 훨씬 높을 수 있으며, 실제 손실이 예상보다 높을 수 있습니다.
유동성 위험: 유동성이 부족한 시장에서, 예상된 가격으로 입수 또는 출구 주문을 실행할 수 없는 경우, 슬라이드 포인트가 증가하고 전략 성능이 떨어질 수 있다.
해결책:
적응 변수 조정: 현재 전략은 고정된 ATR 주기 및 곱수를 사용하며, 시장의 변동성에 따라 이러한 파라미터를 자동으로 조정하도록 최적화 할 수 있습니다. 예를 들어, 변동율이 증가하면 ATR 주기를 늘리거나 변동율이 감소하면 곱수를 줄이거나 반대로 다른 시장 환경에 적응합니다.
다중 시간 프레임 분석: 더 높은 시간 프레임의 트렌드 방향이 현재 신호와 일치할 때만 거래를 실행하는 다중 시간 프레임 확인 메커니즘을 도입하여 역전 거래 및 가짜 브레이크 위험을 줄일 수 있습니다.
동적 중지 중지 손실 설정: 고정된 퍼센트 스톱 스톱 손실을 ATR 또는 변동률에 기반한 동적 값으로 변경하여 현재 시장 상황을 더 잘 반영하고, 높은 변동 환경에서의 과도한 중단 손실 또는 낮은 변동 환경에서의 과도한 중단 손실을 피합니다.
트랜잭션 수량 확인트렌드의 유효성을 확인하기 위해 거래량 분석과 결합하여, 예를 들어, 가격 돌파구가 충분한 거래량과 함께있을 때만 신호를 확인하면 가짜 돌파구의 위험을 줄일 수 있습니다.
일부 수익 잠금 메커니즘: 특정 수익 수준에 도달했을 때 일부 포지션을 청산하는 분량 청산 기능을 추가하여 수익의 일부를 잠금하고 나머지 포지션에 트렌드를 추적 할 수있는 공간을 제공하여 전반적인 리스크 수익률을 향상시킵니다.
이러한 최적화 방향은 전략이 시장 변화에 더 잘 적응할 수 있고, 잘못된 신호를 줄이고, 전략의 안정성과 장기적인 수익성을 향상시킬 수 있기 때문에 중요합니다. 특히 적응 파라미터와 동적 스톱 로즈 설정은 다양한 시장 환경에서 전략의 성능 일관성을 크게 향상시킬 수 있습니다.
고급 다기능 슈퍼트렌드 트렌드 추적 전략은 고전적인 트렌드 추적 장점과 현대적인 위험 관리 기술을 결합하여 슈퍼트렌드 지표를 통해 시장의 흐름을 식별하고, 입문 포인트 시점과 자동 정지 손실 메커니즘을 최적화하여 거래 효과를 향상시킵니다. 가장 눈에 띄는 특징은 트렌드 신호가 확인된 후 더 우수한 입문 포인트를 찾는 것과 동시에 각 거래에 대한 명확한 수익 및 위험 제어 매개 변수를 설정하는 것입니다.
이 전략의 강점은 신호 생성, 입점 최적화, 위험 관리에 이르기까지 명확한 규정이있는 완전한 거래 시스템 구조로, 트렌드 시장에서 이익을 얻고 위험을 통제하려는 거래자에게 적합합니다. 그러나, 모든 트렌드 추적 전략과 마찬가지로, 불안정한 시장에서 더 많은 가짜 신호와 손실 거래가 발생할 수 있습니다.
전략의 성능을 더욱 향상시키기 위해, 거래자는 자기 적응 파라미터 조정, 다중 시간 프레임 확인 및 동적 위험 관리 메커니즘을 추가하는 것을 고려해야 합니다. 전략이 다른 시장 환경에 더 잘 적응하도록합니다. 궁극적으로, 이 전략은 거래자가 자신의 요구와 시장 특성에 따라 개인 맞춤 조정 및 최적화를 할 수있는 좋은 기본 프레임 워크를 제공합니다.
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SuperTrend STRATEGY w/ TP & SL", overlay=true)
// === Girdiler ===
atrPeriod = input.int(10, title="ATR Period")
mult = input.float(3.0, title="ATR Multiplier")
src = input.source(hl2, title="Kaynak")
tpPerc = input.float(2.5, title="Take Profit (%)")
slPerc = input.float(1.0, title="Stop Loss (%)")
entryOffsetPerc = input.float(0.2, title="Giriş Noktası Yüzdesel Geriden (%)")
// === ATR ve SuperTrend Hesabı ===
atr = ta.atr(atrPeriod)
upperBand = src - mult * atr
lowerBand = src + mult * atr
prevUpper = nz(upperBand[1], upperBand)
prevLower = nz(lowerBand[1], lowerBand)
upperBand := close[1] > prevUpper ? math.max(upperBand, prevUpper) : upperBand
lowerBand := close[1] < prevLower ? math.min(lowerBand, prevLower) : lowerBand
var trend = 1
trend := close > prevLower ? 1 : close < prevUpper ? -1 : nz(trend[1], 1)
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1
// === Giriş Noktası Takibi ===
var float lastBuyPrice = na
var float lastSellPrice = na
var int lastBuyBarIndex = na
var int lastSellBarIndex = na
var bool buyEntryPlotted = false
var bool sellEntryPlotted = false
if buySignal
lastBuyPrice := close * (1 - entryOffsetPerc / 100)
lastBuyBarIndex := bar_index
buyEntryPlotted := false
if sellSignal
lastSellPrice := close * (1 + entryOffsetPerc / 100)
lastSellBarIndex := bar_index
sellEntryPlotted := false
// === TP ve SL Hesapları ===
long_tp = lastBuyPrice * (1 + tpPerc / 100)
long_sl = lastBuyPrice * (1 - slPerc / 100)
short_tp = lastSellPrice * (1 - tpPerc / 100)
short_sl = lastSellPrice * (1 + slPerc / 100)
// === TP / SL Temasları (yalnızca işlemden sonra ilk gelen hedef) ===
hitLongTP = false
hitLongSL = false
hitShortTP = false
hitShortSL = false
// === Giriş Etiketleri ===
var label buyLabel = na
var label sellLabel = na
if not na(lastBuyPrice) and not buyEntryPlotted and close <= lastBuyPrice and bar_index > lastBuyBarIndex
buyLabel := label.new(x=bar_index, y=low, text="Giriş", style=label.style_label_up, color=color.fuchsia, textcolor=color.white)
buyEntryPlotted := true
lastBuyBarIndex := bar_index
if not na(lastSellPrice) and not sellEntryPlotted and close >= lastSellPrice and bar_index > lastSellBarIndex
sellLabel := label.new(x=bar_index, y=high, text="Giriş", style=label.style_label_down, color=color.fuchsia, textcolor=color.white)
sellEntryPlotted := true
lastSellBarIndex := bar_index
if not na(lastBuyPrice) and buyEntryPlotted and bar_index > lastBuyBarIndex
if high >= long_tp
hitLongTP := true
lastBuyPrice := na
else if low <= long_sl
hitLongSL := true
lastBuyPrice := na
if not na(lastSellPrice) and sellEntryPlotted and bar_index > lastSellBarIndex
if low <= short_tp
hitShortTP := true
lastSellPrice := na
else if high >= short_sl
hitShortSL := true
lastSellPrice := na
// === Strateji Girişleri ===
if buySignal
strategy.entry("BUY", strategy.long)
if sellSignal
strategy.entry("SELL", strategy.short)
// === SuperTrend Plot ===
upPlot = plot(trend == 1 ? upperBand : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
dnPlot = plot(trend == -1 ? lowerBand : na, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
// === TP & SL Plot ===
plotshape(hitLongTP, location=location.abovebar, style=shape.labeldown, color=color.green, text="TP", textcolor=color.white, title="TP Long")
plotshape(hitLongSL, location=location.abovebar, style=shape.labeldown, color=color.red, text="Stop", textcolor=color.white, title="SL Long")
plotshape(hitShortTP, location=location.belowbar, style=shape.labelup, color=color.green, text="TP", textcolor=color.white, title="TP Short")
plotshape(hitShortSL, location=location.belowbar, style=shape.labelup, color=color.red, text="Stop", textcolor=color.white, title="SL Short")