모멘텀 트렌드 최적화 조합 전략


생성 날짜: 2024-02-06 15:11:57 마지막으로 수정됨: 2024-02-06 15:11:57
복사: 4 클릭수: 756
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 트렌드 최적화 조합 전략

개요

동적 트렌드 최적화 조합 전략은 동적 인자와 트렌드 인자를 결합하여 지수 이동 평균, 이동 평균, 거래량 및 기울기 지표의 조합을 통해 구매 및 판매 신호를 생성하는 중장선 수량 거래 전략이다. 이 전략은 T+1 거래에 최적화되어 있으며, 다방향 거래에 적합하다. 최적화는 국제 주식 시장에도 적용된다.

전략 원칙

이 전략은 6일 간소 이동 평균과 35일 간소 이동 평균을 사용하여 두 가지 이동 평균을 정의한다. 구매 신호선은 2일 지수 이동 평균으로 정의되고, 판매 신호선은 지난 8일 종결 가격에 따라 계산된 기울기를 평평화한다. 또한, 20일 거래량 지수 이동 평균을 거래량 지표로 정의한다. 일부 Noise를 필터링하기 위해, 전략은 주당 기울기 오공 판단을 도입한다.

주식 종식 가격이 35일 이동 평균보다 높고 거래량이 20일 거래량 평균보다 높고 주간으로 다목적 시장으로 검사될 때, 아래쪽의 황금 십자에서 구매 신호를 유발한다. 반대로 위쪽의 사망 십자에서 판매 신호를 유발한다.

위험 관리 측면에서, 전략은 동적 포지션 조정 메커니즘을 도입한다. 계좌의 권익, 최대 포지션 비율, ATR 및 위험 인자에 따라 실제 포지션을 계산한다. 이것은 전략의 최대 회수를 제어하는 데 도움이 된다.

우위 분석

이 전략은 동력 인자와 트렌드 필터를 결합하여 중장선 방향을 효과적으로 식별할 수 있다. 동시에, 노이즈에 대한 필터링도 적당히 배치되어 있어, 흔들림 상황에서 잘못된 신호를 피하는 데 도움이 된다. 또한, 위험 관리 메커니즘의 도입은 최대 회수 제어를 적절하게 만들어 전략의 건전성을 보장한다.

재검토 결과에 따르면, 전략의 전체 수익률은 128.86%에 달하며, 매우 중요한 알파를 가지고 있다. 동시에, 전략의 승률은 60.66%에 달하며, 전략의 효과의 안정성을 나타낸다.

위험 분석

전략 자체가 위험 관리 메커니즘을 최적화했지만, 여전히 우려해야 할 위험이 있습니다. 특히 주요 위험은 다음과 같습니다.

  1. 철회 위험. 단일 최대 손실 222,021.46 달러에서 볼 수 있으며, 전략적 철회 폭이 크다. 이것은 포지션 관리 장치가 완벽하지 않은 것과 관련이 있다.

  2. 신호 안정성 위험. 전략 신호는 개별 주식 특수한 요인에 의해 영향을 받아서 잘못된 신호가 발생할 수 있습니다. 이것은 전략 수익에 약간의 충격을 줄 수 있습니다.

  3. 시장 환경의 변화 위험. 대시장 환경이 크게 변할 경우, 전략 매개 변수가 계속 효과를 유지하기 위해 조정될 수 있습니다.

최적화 방향

위와 같은 위험 분석에 따르면, 이 전략은 여전히 최적화될 필요성과 가능성을 지니고 있다.

  1. 최대 손실 상황을 고려하여 포지션 관리 메커니즘을 더 최적화하여 단위 손실의 크기를 제어하기 위해 손실 차단 모듈을 도입 할 수 있습니다.

  2. 더 많은 필터링 지표를 추가하여 특정 주식 현상을 식별하여 잘못된 신호의 가능성을 줄이는 것을 고려할 수 있습니다. 예를 들어, 수량값이 지표에서 벗어나는 것을 도입하는 것 등.

  3. 전략의 매개 변수를 지속적으로 재검토하고 검증하고, 시장 환경의 변화에 따라 매개 변수를 적시에 조정해야 한다. 과잉 최적화가 발생하지 않도록 해야 한다.

요약하다

동적 트렌드 최적화 포트폴리오 전략은 동적 인자와 트렌드 필터를 결합한 중장선 양적 거래 전략으로, 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)