Jia Yibing 양적 추세 모멘텀 거래 전략


생성 날짜: 2024-03-08 15:40:05 마지막으로 수정됨: 2024-03-08 15:40:05
복사: 0 클릭수: 636
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

Jia Yibing 양적 추세 모멘텀 거래 전략

개요

이치량화 트렌드 동적 거래 전략은 트렌드 추적, 동적 지표, 부린 벨트 통로를 결합한 다중 헤드 빈 양적 거래 전략이다. 이 전략은 빠른 이동 평균의 교차를 사용하여 트렌드 방향을 판단하고, 부린 벨트 통로와 동적 지표와 결합하여 진입 신호를 확인한다. 이 전략은 또한 중지 손실, 추적 중지 손실 및 위치 관리와 같은 위험 제어 조치를 갖추고 있다.

전략 원칙

이 전략의 핵심 원칙은 가격 추세와 동력 효과를 사용하여 시장 기회를 포착하는 것입니다. 구체적으로, 이 전략은 두 가지 다른 주기의 이동 평균을 사용하여 가격 추세의 방향을 판단합니다. 빠른 선이 아래에서 위로 천천히 흐르는 경우, 상승 추세를 나타냅니다. 전략은 다중 신호를 생성합니다. 반대로, 빠른 선이 위에서 아래로 천천히 흐르는 경우, 하향 추세를 나타냅니다. 전략은 빈 신호를 생성합니다.

추세와 진입 시기를 추가로 확인하기 위해, 이 전략은 또한 부린 띠 통로와 동력 지표를 결합한다. 부린 띠는 세 개의 선으로 구성된다: 중간 궤도는 이동 평균이며, 상단 및 하단 궤도는 각각 중간 궤도에 기초하여 일정 표준 차이를 더하고 줄인다. 가격이 부린 띠를 돌파 할 때, 강한 상승 동력을 나타내는 전략은 더 많이 할 것이다. 가격이 부린 띠를 돌파 할 때, 강한 하향 동력을 나타내는 전략은 더 많이 할 것이다.

또한, 이 전략은 동력 지표를 도입하여, 현재 가격과 특정 기간 전의 가격을 비교하여 가격의 하락 속도를 측정합니다. 동력 지표는 트렌드의 강점을 판단하는 데 사용할 수 있으며, 따라서 진입에 대한 추가적인 확인을 제공합니다.

포지션 관리의 측면에서, 이 전략은 계정 자금과 위험 선호에 따라 포지션 크기를 설정할 수 있습니다. 또한, 전략은 단편 거래의 위험 틈을 제어하기 위해 중지 손실 및 추적 중지 손실 장치를 갖추고 있습니다.

전체적으로 보면, QE의 트렌드 동력 거래 전략은 트렌드 추적, 동력 확인 및 위험 관리와 같은 여러 차원을 통해 시장의 트렌드 기회를 잡는 동시에 위험을 엄격하게 통제하고 안정적인 투자 수익을 달성하려고 노력합니다.

우위 분석

  1. 트렌드 추적: 전략은 급속한 평균선의 교차를 사용하여 가격의 트렌디한 기회를 잡을 수 있으며, 상향 트렌드를 다룰 수도 있고, 하향 트렌드를 하락시킬 수도 있으며, 다양한 시장 상황에 적응할 수 있다.

  2. 동력 확인: 동력 지표가 트렌드의 2차 확인으로 도입되어 잘못된 신호를 제거하고 진출 품질을 향상시킵니다.

  3. 브린밴드 보조 의사 결정: 브린밴드는 가격의 변동 영역을 반영할 수 있으며, 브린밴드를 뚫는 것은 트렌드 가속화 또는 가격의 비정상적인 변동의 신호로 간주되어 진입에 대한 참조를 제공합니다.

  4. 포지션 관리: 전략은 계정 자금 비율과 제한을 기반으로 포지션 관리 방법을 채택하여 거래당 자금 사용량을 유연하게 제어 할 수 있으며 자금을 최대한 활용하면서 과도한 위험에 노출되지 않습니다.

  5. 스톱스트로프: 스톱스트로프를 설정하고 스톱스트로프를 추적하여 가격이 예상되는 방향으로 움직일 때 이익을 보호하고, 가격이 반전될 때 결정적으로 중단하여 단일 거래의 최대 손실을 효과적으로 제어합니다.

  6. 다중 변수 최적화: 전략에는 평균선 주기, 브린 밴드 변수, 스톱 스톱 손실 비율 등과 같은 여러 가지 조정 가능한 변수가 포함되어 있으며, 변수 최적화를 통해 전략의 적응성과 거친성을 향상시킬 수 있습니다.

위험 분석

  1. 빈번한 거래: 이 전략은 평균선 교차와 브린 벨트 돌파구에 따라 입문 신호를 생성합니다. 시장의 변동성이 큰 경우 거래 신호가 자주 생성 될 수 있으므로 거래 횟수가 너무 많으며 수수료 비용과 슬라이드 포인트 비용이 증가합니다.

  2. 변수 민감: 전략에는 평균선 주기, 동량 주기, 브린 밴드 변수 등과 같은 여러 가지 변수가 포함되어 있으며, 다른 변수의 선택은 전략 효과에 큰 영향을 미칠 수 있습니다. 변수가 적절하지 않으면 전략의 성능이 좋지 않을 수 있습니다.

  3. 트렌드 인식 지연: 이동 평균은 지연 지표이며, 특히 평균 선의 주기가 길어지면 트렌드 전환을 인식하는 속도가 느려지고, 최적의 진입 시기를 놓칠 수 있습니다.

  4. 스톱로스 위험: 전략이 스톱로스 조치를 설정했지만, 극단적인 상황 (예: 급격한 폭파) 에서 가격은 스톱로스 가격을 직접 넘어서서 실제 손실이 예상보다 많을 수 있습니다.

  5. 포지션 집중 위험: 전략이 특정 기간 동안 연속적으로 동방향 신호를 생성하면 포지션이 특정 방향으로 과도하게 집중되어 더 큰 포지션 위험에 직면 할 수 있습니다.

  6. 유동성 위험: 전략의 회수 및 실적 효과는 시장의 유동성에 영향을 받을 수 있으며, 특히 큰 금액의 거래시에는 슬라이드 포인트 및 거래량이 부족할 수 있습니다.

최적화 방향

  1. 더 많은 기술 지표를 도입: 현재 평균선, 동력 및 브린 밴드를 기반으로 RSI, MACD 등과 같은 더 많은 기술 지표를 도입하여 여러 지표의 공동 확인을 통해 신호의 신뢰성을 향상시킬 수 있습니다.

  2. 최적화된 입출장 메커니즘: 입출장 판단에 추가 조건을 도입하는 것을 고려할 수 있습니다. 예를 들어, 가격 돌파 전에 특정 거래량 요구 사항을 충족해야 하며, 출장 시 순환 상장 또는 이동 중지 방식을 사용하여 전략의 유연성과 수익성을 높일 수 있습니다.

  3. 동적 조정 매개 변수: 평선주기, 동력주기, 브린 밴드 매개 변수 등에 대해 매개 변수가 자율적으로 적응하는 메커니즘을 설계할 수 있으며, 다양한 시장 상태와 변동률 수준에 따라 동적으로 조정 매개 변수 값을 취하여 전략의 적응성을 향상시킬 수 있다.

  4. 포지션 관리를 개선: 현재 포지션 관리를 기반으로, 더 나은 수익과 위험을 균형 잡기 위해 캐리 공식, 고정 비율, 동적 적당금과 같은 더 고급 자금 관리 방법을 도입 할 수 있습니다.

  5. 기본적 분석과 결합: 순수 기술 분석 전략은 시장의 무효성 또는 실패의 위험에 직면할 수 있으며, 거시 경제 데이터, 산업 추세와 같은 몇 가지 기본적 요소와 결합하여 기술 신호를 필터링하고 확인하면 전략의 효과를 향상시킬 수 있습니다.

  6. 회수와 실적의 일관성을 강화: 전략 회수와 실적의 성과에 차이가 있을 수 있으며, 실적의 성과와 회수 결과의 일관성을 보장하기 위해 거래 가격, 점유점, 지연과 같은 요소를 포함한 회수와 실적의 실행 품질에 중점을 두어야 합니다.

요약하다

易定量化趋势动量交易策略은 여러 가지 기술적 분석 방법을 통합한 수량 거래 전략이다. 그것은 평선 교차 트렌드 캡처, 브린 벨트 돌파구 확인 트렌드, 동력 지표 반영 속도, 스톱 스톱 손실 제어 위험, 포지션 관리 자금 활용을 최적화하여 완전한 거래 의사 결정 및 관리 시스템을 형성한다.

이 전략의 장점은 트렌드 추적과 동력을 결합하고, 브린이 보조 판단, 포지션 관리 및 스톱 손실을 겸비하여 다차원적인 분석과 의사 결정을 통해 시장 기회를 잡는 것입니다. 그러나 동시에, 이 전략은 빈번한 거래, 변수 민감, 트렌드 식별 지연, 극단적 인 상황을 커버 할 수 없는 손실과 같은 잠재적인 위험에 직면합니다. 이것은 더 많은 기술 지표를 도입하고, 신호 판단 논리 동력을 최적화하고, 변수를 조정하고, 자금 관리를 개선하는 등의 조치를 통해 전략을 지속적으로 개선하고 개선해야합니다.

또한, 양적 거래 전략은 재검토 결과와 실장 성과 사이에 차이가 있을 수 있으므로, 전략의 실용성과 안정성을 높이기 위해 거래 가격, 슬라이드 포인트, 지연과 같은 실행 차원의 문제에 중점을 두어야 합니다. 또한, 양적 전략은 기술적 분석에 국한되어서는 안되며, 기본 요소를 적절하게 결합하면 의사 결정의 포괄성과 효율성을 높이는 데 도움이 될 것입니다.

전반적으로, QEQ 트렌드 동력 거래 전략은 양적 거래 관행에 대한 비교적 완전하고 실행 가능한 아이디어를 제공하지만, 전략의 최종 효과는 다양한 기회와 위험의 균형과 세부 사항의 최적화에 달려 있습니다. 실제 응용에서는 자신의 위험 선호, 자본 규모, 거래 시장과 같은 구체적인 상황에 따라 전략에 적절한 조정이 및 개선이 필요하며, 실장 운영에서 지속적인 모니터링과 최적화를 통해 더 안정적이고 이상적인 전략 성능을 추구합니다.

전략 소스 코드
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)