이 전략은 슈퍼트렌드 지표와 ATR 지표에 기반한 전략이다. 이 전략의 주요 아이디어는 슈퍼트렌드 지표를 사용하여 현재 시장 트렌드 방향을 결정하고 슈퍼트렌드 지표가 변경되면 거래를하는 것입니다. 동시에 이 전략은 ATR 지표를 사용하여 스톱 로스 및 영업 가격을 계산하고 위험을 제어하기 위해 계정 잔액의 특정 비율을 기반으로 포지션 크기를 계산합니다.
이 전략의 원칙은 다음과 같습니다.
이 전략의 장점은 다음과 같습니다.
이 전략의 위험은 다음과 같습니다.
위 위험 요소에 대응하기 위해 다음의 조치를 취할 수 있습니다.
이 전략은 다음 영역에서 최적화 될 수 있습니다.
위의 최적화는 전략의 수익성과 안정성을 향상시킬 수 있고 동시에 위험을 줄여서 다른 시장 환경에 더 적응할 수 있습니다.
이 전략은 슈퍼트렌드 지표와 ATR 지표를 결합하여 위험을 제어하면서 트렌드를 효과적으로 파악합니다. 최적의 포지션 크기를 계산함으로써 각 거래의 위험이 제어됩니다. 그러나이 전략은 변동적인 시장에서 높은 거래 비용과 드라우다운을 발생시킬 수 있습니다. 더 많은 기술적 지표, 매개 변수 최적화, 위험 제어 요인 추가 및 수익 전략 개선으로이 전략의 성능을 더욱 향상시킬 수 있습니다. 전반적으로이 전략은 트렌드 시장에서 사용할 수있는 간단하고 효과적인 트렌드 다음 전략입니다.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © tradez99 //@version=5 strategy('Supertrend', overlay=true, format=format.price, precision=2) Periods = input(title='ATR Period', defval=10) src = input(hl2, title='Source') Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0) changeATR = input(title='Change ATR Calculation Method ?', defval=true) showsignals = input(title='Show Buy/Sell Signals ?', defval=true) highlighting = input(title='Highlighter On/Off ?', defval=true) atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.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 upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0)) buySignal = trend == 1 and trend[1] == -1 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), textcolor=color.new(color.white, 0)) dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0)) sellSignal = trend == -1 and trend[1] == 1 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), textcolor=color.new(color.white, 0)) mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0) longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white //fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor) //fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor) multiplier = input.float(title="ATR multiplier", defval = 1.5) rr = input.float(title="Risk:Reward", defval=1.0) riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0) atr3 = ta.atr(14) //calculate stops and targets longstop = close - (atr3 * multiplier) shortstop = close + (atr3 * multiplier) longStopDistance = close - longstop shortStopDistance = shortstop - close longTarget = close + (longStopDistance * rr) shortTarget = close - (shortStopDistance * rr) // Save stops & targets var t_stop = 0.0 var t_target = 0.0 longCondition = buySignal if (longCondition) t_stop := longstop t_target := longTarget positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop)) strategy.entry("Long", strategy.long, qty = positionSize) shortCondition = sellSignal if (shortCondition) t_stop := shortstop t_target := shortTarget positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close)) strategy.entry("Short", strategy.short, qty = positionSize) strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop) strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)