모멘텀 트렌드 최적화 조합 전략 (Momentum Trend Optimization Combination Strategy) 은 모멘텀과 트렌드 요인을 결합한 중장기 양적 거래 전략이다. 기하급수적인 이동 평균, 이동 평균, 볼륨 및 기울기 지표의 조합을 사용하여 구매 및 판매 신호를 생성합니다. 전략은 T+1 거래에 최적화되어 있으며 긴 포지션에만 적합합니다. 최적화는 국제 주식 시장에도 적용됩니다.
이 전략은 6일 간 간단한 이동 평균과 35일 간 간단한 이동 평균을 사용하여 두 개의 이동 평균을 정의합니다. 구매 신호 라인은 2일 기하급수적인 이동 평균으로 정의되며 판매 신호 라인은 지난 8 번의 폐쇄 가격의 기울기 기준으로 계산됩니다. 또한 20일 기하급수적인 이동 평균을 볼륨 지표로 정의합니다. 약간의 소음을 필터링하기 위해 전략은 또한 시장 방향에 대한 주간 기울기 판단을 도입합니다.
폐쇄 가격이 35일 이동 평균보다 높고 거래량이 20일 평균 거래량보다 높고 주간 체크가 황소 시장을 보여주면 아래쪽에서 황금 십자가가 구매 신호를 유발합니다. 반대로 위쪽에서 죽음의 십자가가 판매 신호를 유발합니다.
리스크 관리에 있어서 전략은 역동적인 위치 조정 메커니즘을 도입한다. 실제 위치는 계좌 자금, 최대 위치 비율, ATR 및 위험 요인에 기초하여 계산된다. 이것은 전략의 최대 유출을 제어하는 데 도움이됩니다.
이 전략은 동력 요인과 트렌드 필터링을 결합하여 중장기 방향을 효과적으로 식별 할 수 있습니다. 동시에 불안정한 시장에서 잘못된 신호를 피하기 위해 소음 필터링도 갖추어져 있습니다. 또한 위험 관리 메커니즘을 도입하면 최대 마감량에 대한 적절한 통제가 가능하여 전략의 안정성을 보장합니다.
백테스트 결과, 전략의 전체 수익률은 매우 중요한 알파로 128.86%에 달했습니다. 동시에 전략의 승률도 전략 효과의 안정성을 반영하여 60.66%에 달했습니다.
전략 자체는 위험 관리 메커니즘에 최적화되었지만, 여전히 주의가 필요한 몇 가지 위험이 있습니다. 구체적으로 주요 위험은 다음과 같습니다.
마감 위험. 222,021.46 위안의 단일 최대 손실에서 전략의 리트랙스 폭이 크다는 것을 알 수 있습니다. 이것은 불완전한 위치 관리 메커니즘과 관련이 있습니다.
신호 안정성 위험. 전략 신호는 개별 주식의 특수 요인에 의해 영향을 받을 수 있으며, 잘못된 신호 상황을 초래할 수 있습니다. 이것은 전략의 수익에 어느 정도 영향을 줄 것입니다.
시장 환경 변화 위험. 거시 시장 환경이 크게 변화하면 효과를 계속 유지하기 위해 전략 매개 변수를 조정해야 할 수 있습니다.
위의 위험 분석에 따르면 이 전략을 최적화하는 것이 여전히 필요하고 가능하다는 것을 알 수 있습니다.
최대 손실을 판단하면 단일 손실의 크기를 제어하기 위해 스톱 로스 모듈을 도입함으로써 포지션 관리 메커니즘을 추가로 최적화 할 수 있습니다.
일부 특수 주식 현상을 식별하고 잘못된 신호의 확률을 줄이기 위해 더 많은 필터링 지표를 추가하는 것을 고려하십시오. 예를 들어, 부피 가격 분차 지표를 도입하십시오.
역 테스트를 계속하고 전략 매개 변수를 확인하고 시장 조건의 변화에 따라 적절한 매개 변수를 조정하십시오. 동시에 과도한 최적화를 방지해야합니다.
모멘텀 트렌드 최적화 조합 전략 (Momentum Trend Optimization Combination Strategy) 은 모멘텀 요소와 트렌드 필터링을 결합한 중장기 양적 거래 전략으로 T+1 거래에 특별히 최적화되어 있다. 백테스트 지표에 따르면 전략의 전반적인 효과는 매우 놀라운 알파와 함께 상당히 크다. 그러나 잠재적인 위험도 고려해야 하며, 시장 조건의 변화에 따라 파라미터도 적시에 조정해야 한다. 이 전략은 양적 트레이더들에게 추가 알파를 가져다 줄 수 있으며, 추가 연구와 검증을 할 가치가 있다.
/*backtest start: 2024-01-06 00:00:00 end: 2024-02-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © fzj20020403 ////@version=5 //@version=5 strategy("Optimized Zhaocaijinbao", overlay=true, margin_long=100, margin_short=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Define two moving averages ma6 = ta.sma(close, 6) ma35 = ta.sma(close, 35) // Define buy and sell signal lines buyLine = ta.ema(close, 2) sellSlope = (close - close[8]) / 8 sellLine = sellSlope * 1 + ta.sma(close, 8) // Define volume indicator volumeEMA = ta.ema(volume, 20) // Define weekly slope factor weeklyMa = ta.sma(close, 50) weeklySlope = (weeklyMa - weeklyMa[4]) / 4 > 0 // Generate buy and sell signals buySignal = ta.crossover(buyLine, sellLine) and close > ma35 and volume > volumeEMA and weeklySlope sellSignal = ta.crossunder(sellLine, buyLine) // Define dynamic position sizing factor equity = strategy.equity maxPositionSize = equity * input.float(title='Max Position Size (%)', defval=0.01, minval=0.001, maxval=0.5, step=0.001) riskFactor = input.float(title='Risk Factor', defval=2.0, minval=0.1, maxval=10.0, step=0.1) atr = ta.atr(14) positionSize = maxPositionSize * riskFactor / atr // Define position status var inPosition = false // Define buy and sell conditions buyCondition = buySignal and not inPosition sellCondition = sellSignal and inPosition // Perform buy and sell operations if (buyCondition) strategy.entry("Long", strategy.long, qty=positionSize) inPosition := true if (sellCondition) strategy.close("Long") inPosition := false // Draw vertical line markers for buy and sell signals plotshape(buyCondition, style=shape.arrowdown, location=location.belowbar, color=color.green, size=size.small) plotshape(sellCondition, style=shape.arrowup, location=location.abovebar, color=color.red, size=size.small) // Draw two moving averages plot(ma6, color=color.blue) plot(ma35, color=color.orange) // Draw volume indicator line plot(volumeEMA, color=color.yellow) // Define stop loss and take profit stopLoss = strategy.position_avg_price * 0.5 takeProfit = strategy.position_avg_price * 1.25 if inPosition strategy.exit("Long Stop Loss", "Long", stop=stopLoss) strategy.exit("Long Take Profit", "Long", limit=takeProfit)