이 전략은 이중 이동 평균 크로스오버의 원칙에 기반한 양적 거래 전략이다. 이 전략은 단기 SMA가 장기 SMA를 넘을 때 구매 신호를 생성하고 단기 SMA가 장기 SMA를 넘을 때 판매 신호를 생성한다. 전략 코드는 또한 날짜 범위 및 시간 프레임에 대한 설정을 도입하여 유연한 백테스트 및 전략 최적화를 허용한다.
이 전략의 핵심 원칙은 다른 기간의 이동 평균 사이의 교차 관계를 활용하여 가격 트렌드의 변화를 포착하는 것입니다. 이동 평균은 일반적으로 사용되는 기술적 지표로 단기 변동을 필터링하고 과거 기간 동안 가격을 평균화하여 전체 가격 추세를 반영합니다. 단기 이동 평균이 장기 이동 평균보다 높을 때 가격이 상승 추세를 시작하여 구매 신호를 생성 할 수 있음을 나타냅니다. 반대로 단기 이동 평균이 장기 이동 평균보다 낮을 때 가격이 하락 추세를 시작하여 판매 신호를 생성 할 수 있음을 나타냅니다.
SMA 이중 이동 평균 크로스오버 전략은 간단하고 이해하기 쉽고 매우 적응 가능한 양적 거래 전략이다. 다른 기간과 이동 평균의 크로스오버 관계를 활용함으로써 전략은 가격 트렌드의 변화를 효과적으로 파악하고 거래자에게 구매 및 판매 신호를 제공할 수 있다. 그러나 전략의 성능은 매개 변수 선택에 민감할 수 있으며, 시장이 매우 변동적일 때 빈번한 거래 및 지연 효과를 유발할 수 있다. 전략을 더 이상 최적화하기 위해서는 다른 기술적 지표들을 도입하고, 매개 변수 선택을 최적화하고, 필터링 조건을 추가하고, 매개 변수를 동적으로 조정하고, 리스크 관리를 통합하는 등의 조치를 고려할 수 있다. 전반적으로, 이 전략은 양적 거래의 기본 전략 중 하나로 작용할 수 있지만, 실제 적용의 특정 상황에 따라 적절히 최적화되고 개선되어야 한다.
/*backtest start: 2023-06-01 00:00:00 end: 2024-06-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SMA Crossover Strategy with Date Range and Timeframe", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, initial_capital=1000, currency=currency.USD, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0) // Define the lengths for the short and long SMAs shortSMA_length = input.int(50, title="Short SMA Length", minval=1) longSMA_length = input.int(200, title="Long SMA Length", minval=1) // Define the start and end dates for the backtest startDate = input(timestamp("2024-06-01 00:00"), title="Start Date") endDate = input(timestamp("2024-06-05 00:00"), title="End Date") // Define the timeframe for the SMAs smaTimeframe = input.timeframe("D", title="SMA Timeframe") // Request the short and long SMAs from the selected timeframe dailyShortSMA = request.security(syminfo.tickerid, smaTimeframe, ta.sma(close, shortSMA_length)) dailyLongSMA = request.security(syminfo.tickerid, smaTimeframe, ta.sma(close, longSMA_length)) // Plot the SMAs on the chart plot(dailyShortSMA, color=color.blue, title="Short SMA") plot(dailyLongSMA, color=color.red, title="Long SMA") // Define the crossover conditions based on the selected timeframe SMAs buyCondition = ta.crossover(dailyShortSMA, dailyLongSMA) sellCondition = ta.crossunder(dailyShortSMA, dailyLongSMA) // Generate buy and sell signals only if the current time is within the date range if (buyCondition) strategy.entry("Buy", strategy.long) if (sellCondition) strategy.close("Buy") // Optional: Add visual buy/sell markers on the chart plotshape(series=buyCondition and (time >= startDate and time <= endDate), title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sellCondition and (time >= startDate and time <= endDate), title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")