슈퍼 트렌드 이중 이동 평균 전략

저자:차오장, 날짜: 2024-01-16 15:19:09
태그:

img

전반적인 설명

슈퍼 트렌드 이중 이동 평균 전략 (Super Trend Dual Moving Average Strategy) 은 슈퍼 트렌드 지표와 간단한 이동 평균을 기반으로 하는 양적 거래 전략이다. 이 전략은 슈퍼 트렌드 지표를 사용하여 시장 트렌드의 방향을 결정하고, 200일 간 간단한 이동 평균을 필터링, 주요 트렌드 방향으로 긴 포지션과 짧은 포지션을 개척하기 위해 결합한다.

전략 논리

이 전략은 두 가지 지표를 사용합니다.

  1. 슈퍼 트렌드 인디케이터: 실제 변동성 ATR 및 멀티플리커를 기반으로 상부 및 하부 레일을 계산합니다. 닫기 가격이 상부 레일보다 높을 때 상승 시점을 나타냅니다. 하부 레일보다 낮을 때 하향 시점을 나타냅니다.

  2. 200일 간편 이동 평균: 지난 200일 동안의 폐쇄 가격의 수학적 평균을 취합니다. 종료 가격이 이 라인보다 높을 때, 이는 주요 상승 추세를 나타냅니다. 이 라인보다 낮을 때, 그것은 주요 하락 추세를 나타냅니다.

전략 논리:

  1. 슈퍼 트렌드 지표가 상승 시그널 (슈퍼 트렌드 값이 0보다 크다) 를 주고, 종료 가격이 200일 MA보다 높으면, 긴 시장을 선택합니다.

  2. 슈퍼 트렌드 지표가 하향 신호를 주면 (슈퍼 트렌드 값은 0보다 작다) 그리고 종료 가격은 200일 MA보다 낮으면, 쇼트 가십시오.

  3. 슈퍼 트렌드 지표가 이전 지표에 반전 신호를 표시하면 포지션을 닫습니다.

  4. 스톱 로스는 25%로 설정됩니다.

이점 분석

이 전략은 단기 트렌드를 결정하기 위해 슈퍼 트렌드 지표와 장기 트렌드를 결정하기 위해 200 일 MA를 결합하여 가짜 브레이크오프를 효과적으로 필터하고 승률을 향상시키는 동시에 거래 빈도를 줄일 수 있습니다. 중요한 시장 트렌드에서는 트렌드가 큰 스톱 로스 공간과 수익 목표와 충분히 명확합니다.

위험 분석

이 전략의 주요 위험은 스톱 로스 범위가 상대적으로 크다는 것입니다. 이것은 높은 레버리지 상황에서 강제 청산의 위험을 증가시킬 수 있습니다. 또한 시장이 범위로 묶일 때 슈퍼 트렌드 지표는 과잉 신호를 생성하여 거래 비용과 거래 빈도를 증가시킬 것입니다.

ATR 기간, 곱셈 매개 변수 및 스톱 로스 범위를 적절히 조정함으로써 위험을 줄일 수 있습니다.

최적화 방향

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

  1. 슈퍼 트렌드 지표를 최적화하기 위해 ATR 기간과 곱셈 매개 변수를 조정합니다.

  2. 대체를 위해 EMA와 VIDYA와 같은 다른 MA 지표를 시도하십시오.

  3. 추가 신호 필터링을 위해 BOLL 채널 또는 KD 표시기와 같은 다른 보조 표시기를 추가합니다.

  4. 스톱 손실 전략을 최적화하십시오. 예를 들어 더 높은 시간 프레임 수준과 함께 브레이크 이브 포인트 또는 트레일링 스톱으로 이동하십시오.

요약

전체적으로,이 전략은 매우 실용적입니다. 그것은 합리적인 스톱 로스 설정과 함께 단기 트렌드 판단과 장기 트렌드 판단을 모두 고려합니다. 그것은 실제 거래 검증 및 응용 가치가있는 매개 변수 조정 및 최적화로 더 나은 결과를 얻을 수 있습니다.


/*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


더 많은