리소스 로딩... 로딩...

장기 트렌드 SMA 크로스오버 양적 전략

저자:차오장, 날짜: 2025-01-06 17:01:08
태그:SMAEMA

img

전반적인 설명

이 전략은 다기간 단순 이동 평균 (SMA) 크로스오버 신호를 기반으로 한 양적 거래 시스템이다. 주로 장기 상승 추세 내에서 인회 기회를 식별합니다. 전략은 5 개의 다른 기간 (5, 10, 20, 60, 120 일) 의 SMA를 사용하여 상대적 위치 및 크로스오버 신호를 통해 시장 추세와 거래 기회를 결정합니다.

전략 원칙

핵심 논리는 몇 가지 핵심 요소를 포함합니다.

  1. SMA20와 SMA60의 상대적 위치를 통해 장기 트렌드 식별, SMA20가 SMA60보다 높을 때 상승 트렌드를 확인합니다.
  2. 구매 신호는 단기 SMA5가 pullback 이후 SMA20를 넘어서면 상승 추세 내에서 리바운드를 나타냅니다.
  3. 출구 신호는 SMA20가 SMA5를 넘을 때 발생하며 단기 추진력이 약화되는 것을 시사합니다.
  4. 이 전략에는 시간 필터 기능이 포함되어 역 테스트 기간을 제한하여 유연성을 향상시킵니다.

전략적 장점

  1. 명확하고 간단한 논리, 복잡한 계산을 피하고 이해하기 쉽고 실행하기 쉬운 논리
  2. 여러 기간 이동 평균을 사용하여 효과적인 노이즈 필터링을 통해 신호 신뢰성을 향상시킵니다.
  3. 트렌드 시장에서 추락 기회에 초점을 맞추고, 트렌드를 따르는 핵심 원칙에 맞춰
  4. EMA 대신 SMA를 사용하는 것은 가격 감수성과 잘못된 신호를 감소시킵니다.
  5. 명확한 출입과 출입 논리는 실행과 리스크 관리를 용이하게 합니다.

전략 위험

  1. 이동평균 시스템에서의 고유한 지연은 열등한 입출출 시기를 초래할 수 있습니다.
  2. 다양한 시장에서 빈번하게 교차하는 경우 과도한 잘못된 신호를 생성할 수 있습니다.
  3. 변동성 필터링 메커니즘이 없기 때문에 높은 변동성 기간에 전략은 상당한 유출 위험에 노출됩니다.
  4. 부피 확인 없이 신호의 신뢰성이 손상될 수 있습니다.
  5. 고정 이동 평균 매개 변수는 모든 시장 조건에 맞지 않을 수 있습니다.

최적화 방향

  1. 높은 변동성 기간에 거래를 피하기 위해 변동성 필터링을 위한 ATR 지표를 구현합니다.
  2. 신호 신뢰성을 높이기 위해 부피 확인 메커니즘을 포함합니다.
  3. 다른 시장 환경에 더 잘 맞게 적응 가능한 이동 평균 기간을 개발합니다.
  4. ADX 지표와 같은 트렌드 강도 필터를 추가하여 강한 트렌드에서만 거래를 보장합니다.
  5. 더 나은 리스크 통제를 위해 후속 스톱을 포함한 스톱 로스 메커니즘을 강화합니다.

요약

이 전략은 여러 기간 SMA의 조정된 사용을 통해 장기 상승 추세 내에서 인회 기회를 포착하는 데 초점을 맞춘 거래 시스템을 구축한다. 이 전략의 설계는 실용적이고 간단하며, 좋은 이해성과 실행성을 제공합니다. 이 전략의 견고성과 신뢰성은 변동성 필터링, 볼륨 확인 및 기타 최적화 조치를 도입함으로써 더욱 향상될 수 있습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")

관련

더 많은