슈퍼 트렌드 이중 이동 평균 전략 (Super Trend Dual Moving Average Strategy) 은 슈퍼 트렌드 지표와 간단한 이동 평균을 기반으로 하는 양적 거래 전략이다. 이 전략은 슈퍼 트렌드 지표를 사용하여 시장 트렌드의 방향을 결정하고, 200일 간 간단한 이동 평균을 필터링, 주요 트렌드 방향으로 긴 포지션과 짧은 포지션을 개척하기 위해 결합한다.
이 전략은 두 가지 지표를 사용합니다.
슈퍼 트렌드 인디케이터: 실제 변동성 ATR 및 멀티플리커를 기반으로 상부 및 하부 레일을 계산합니다. 닫기 가격이 상부 레일보다 높을 때 상승 시점을 나타냅니다. 하부 레일보다 낮을 때 하향 시점을 나타냅니다.
200일 간편 이동 평균: 지난 200일 동안의 폐쇄 가격의 수학적 평균을 취합니다. 종료 가격이 이 라인보다 높을 때, 이는 주요 상승 추세를 나타냅니다. 이 라인보다 낮을 때, 그것은 주요 하락 추세를 나타냅니다.
전략 논리:
슈퍼 트렌드 지표가 상승 시그널 (슈퍼 트렌드 값이 0보다 크다) 를 주고, 종료 가격이 200일 MA보다 높으면, 긴 시장을 선택합니다.
슈퍼 트렌드 지표가 하향 신호를 주면 (슈퍼 트렌드 값은 0보다 작다) 그리고 종료 가격은 200일 MA보다 낮으면, 쇼트 가십시오.
슈퍼 트렌드 지표가 이전 지표에 반전 신호를 표시하면 포지션을 닫습니다.
스톱 로스는 25%로 설정됩니다.
이 전략은 단기 트렌드를 결정하기 위해 슈퍼 트렌드 지표와 장기 트렌드를 결정하기 위해 200 일 MA를 결합하여 가짜 브레이크오프를 효과적으로 필터하고 승률을 향상시키는 동시에 거래 빈도를 줄일 수 있습니다. 중요한 시장 트렌드에서는 트렌드가 큰 스톱 로스 공간과 수익 목표와 충분히 명확합니다.
이 전략의 주요 위험은 스톱 로스 범위가 상대적으로 크다는 것입니다. 이것은 높은 레버리지 상황에서 강제 청산의 위험을 증가시킬 수 있습니다. 또한 시장이 범위로 묶일 때 슈퍼 트렌드 지표는 과잉 신호를 생성하여 거래 비용과 거래 빈도를 증가시킬 것입니다.
ATR 기간, 곱셈 매개 변수 및 스톱 로스 범위를 적절히 조정함으로써 위험을 줄일 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
슈퍼 트렌드 지표를 최적화하기 위해 ATR 기간과 곱셈 매개 변수를 조정합니다.
대체를 위해 EMA와 VIDYA와 같은 다른 MA 지표를 시도하십시오.
추가 신호 필터링을 위해 BOLL 채널 또는 KD 표시기와 같은 다른 보조 표시기를 추가합니다.
스톱 손실 전략을 최적화하십시오. 예를 들어 더 높은 시간 프레임 수준과 함께 브레이크 이브 포인트 또는 트레일링 스톱으로 이동하십시오.
전체적으로,이 전략은 매우 실용적입니다. 그것은 합리적인 스톱 로스 설정과 함께 단기 트렌드 판단과 장기 트렌드 판단을 모두 고려합니다. 그것은 실제 거래 검증 및 응용 가치가있는 매개 변수 조정 및 최적화로 더 나은 결과를 얻을 수 있습니다.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef