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

이중 체인 하이브리드 모멘텀 EMA 추적 거래 시스템

저자:차오장, 날짜: 2024-11-29 17:04:57
태그:EMAMA

img

전반적인 설명

이 전략은 기하급수적 이동 평균 (EMA) 을 기반으로 한 혁신적인 거래 시스템으로, 서로 다른 시간 프레임에 걸쳐 설정된 두 개의 독립적인 거래 체인을 통해 시장 기회를 포착합니다. 이 전략은 다차원 시장 분석을 위해 주간, 매일, 12 시간 및 9 시간 시간 프레임에 걸쳐 EMA 크로스오버를 통해 거래 신호를 생성하여 장기 트렌드 다음 및 단기 모멘텀 거래의 장점을 통합합니다.

전략 원칙

이 전략은 두 개의 체인 디자인을 사용하며, 각 체인은 고유한 입출구 논리를 가지고 있습니다.

체인 1 (장기 트렌드) 는 주간 및 일간 시간 프레임을 사용합니다.

  • 엔트리 신호: 폐쇄 가격이 주간 시간 프레임에서 EMA를 넘을 때 생성됩니다.
  • 출구 신호: 닫기 가격이 일일 시간 프레임에서 EMA 이하로 넘을 때 생성됩니다.
  • 기본 EMA 기간은 10, 필요에 따라 조정할 수 있습니다

체인 2 (단기 모멘텀) 는 12시간과 9시간의 시간 프레임을 사용합니다.

  • 엔트리 신호: 종료 가격이 12시간 시간 프레임에서 EMA를 넘을 때 생성됩니다.
  • 출구 신호: 종료 가격이 9시간 시간 프레임에서 EMA 이하로 넘어갈 때 생성됩니다.
  • 기본 EMA 기간은 9, 필요에 따라 조정됩니다.

전략적 장점

  1. 다차원 시장 분석: 시간 프레임 조합을 통해 포괄적 인 시장 트렌드 포착
  2. 높은 유연성: 두 개의 사슬은 독립적으로 활성화 또는 비활성화 될 수 있습니다.
  3. 강력한 위험 관리: 여러 시간 프레임 확인은 잘못된 신호를 줄입니다.
  4. 강력한 매개 변수 적응력: EMA 기간과 시간 프레임은 조정 가능합니다.
  5. 완전한 백트테스팅 기능: 전략 검증을 위한 내장된 테스트 기간 설정

전략 위험

  1. 트렌드 반전 위험: 변동성 시장에서 지연이 나타날 수 있습니다.
  2. 시간 프레임 구성 위험: 다른 시장은 다른 시간 프레임 조합을 요구할 수 있습니다.
  3. 매개 변수 최적화 위험: 과도한 최적화는 과도한 적합성으로 이어질 수 있습니다.
  4. 신호가 겹치는 위험: 두 체인에서 동시에 트리거가 발생하면 포지션 위험이 증가할 수 있습니다.

위험 관리 제안:

  • 합리적인 스톱 로스 레벨을 설정
  • 시장 특성에 따라 매개 변수를 조정
  • 라이브 거래 전에 철저한 백테스팅을 수행
  • 거래별로 제어 위치 크기

전략 최적화 방향

  1. 신호 필터링 최적화:
  • 볼륨 확인 메커니즘 추가
  • 변동성 지표를 포함합니다.
  • 트렌드 강도 확인을 포함합니다.
  1. 위험 관리 최적화:
  • 동적 스톱 로스 메커니즘 개발
  • 설계 위치 관리 시스템
  • 마감 제어 기능을 추가
  1. 시간 프레임 최적화:
  • 연구 최적의 기간 조합
  • 적응 가능한 시간 프레임 메커니즘을 개발
  • 시장 상태 인식 기능을 추가

요약

이중 체인 하이브리드 모멘텀 EMA 추적 거래 시스템은 장기 및 단기 이동 평균 전략의 혁신적인 조합을 통해 다차원 시장 분석을 달성합니다. 시스템 디자인은 유연하며 다른 시장 조건과 거래자 스타일에 따라 조정 할 수 있으며 강력한 실용성을 보여줍니다. 적절한 위험 통제 및 지속적인 최적화를 통해이 전략은 실제 거래에서 안정적인 수익을 얻을 수 있습니다. 거래자는 최적의 거래 결과를 달성하기 위해 실시간 구현 전에 철저한 백테스팅과 매개 변수 최적화를 수행하는 것이 좋습니다.


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

//@version=5
strategy(title='Dual Chain Strategy', shorttitle='DualChain', overlay=true)

// User inputs for enabling/disabling chains
enableChain1 = input.bool(true, title='Enable Chain 1')
enableChain2 = input.bool(true, title='Enable Chain 2')

// User inputs for the first chain
len1 = input.int(10, minval=1, title='Length Chain 1 EMA', group="Chain 1")
src1 = input(close, title='Source Chain 1', group="Chain 1")
tf1_entry = input.timeframe("W", title='Chain 1 Entry Timeframe', group="Chain 1")
tf1_exit = input.timeframe("D", title='Chain 1 Exit Timeframe', group="Chain 1")

// Weekly timeframe EMA for Chain 1
entryEMA1 = request.security(syminfo.tickerid, tf1_entry, ta.ema(src1, len1))

// Daily timeframe EMA for Chain 1
exitEMA1 = request.security(syminfo.tickerid, tf1_exit, ta.ema(src1, len1))

// User inputs for the second chain
len2 = input.int(9, minval=1, title='Length Chain 2 EMA', group="Chain 2")
src2 = input(close, title='Source Chain 2', group="Chain 2")
tf2_entry = input.timeframe("720", title='Chain 2 Entry Timeframe (12H)', group="Chain 2")  // 12 hours
tf2_exit = input.timeframe("540", title='Chain 2 Exit Timeframe (9H)', group="Chain 2")    // 9 hours

// Entry timeframe EMA for Chain 2
entryEMA2 = request.security(syminfo.tickerid, tf2_entry, ta.ema(src2, len2))

// Exit timeframe EMA for Chain 2
exitEMA2 = request.security(syminfo.tickerid, tf2_exit, ta.ema(src2, len2))

// Plotting Chain 1 EMAs
plot(enableChain1 ? entryEMA1 : na, title='Chain 1 Entry EMA', color=color.new(color.blue, 0))
plot(enableChain1 ? exitEMA1 : na, title='Chain 1 Exit EMA', color=color.new(color.yellow, 0))

// Plotting Chain 2 EMAs
plot(enableChain2 ? entryEMA2 : na, title='Chain 2 Entry EMA', color=color.new(color.green, 0))
plot(enableChain2 ? exitEMA2 : na, title='Chain 2 Exit EMA', color=color.new(color.red, 0))

// Backtesting period
startDate = input(timestamp('2015-07-27'), title="StartDate")
finishDate = input(timestamp('2026-01-01'), title="FinishDate")
time_cond = true

// Entry Condition (Chain 1)
bullishChain1 = enableChain1 and ta.crossover(src1, entryEMA1)
bearishChain1 = enableChain1 and ta.crossunder(src1, entryEMA1)

// Exit Condition (Chain 1)
exitLongChain1 = enableChain1 and ta.crossunder(src1, exitEMA1)
exitShortChain1 = enableChain1 and ta.crossover(src1, exitEMA1)

// Entry Condition (Chain 2)
bullishChain2 = enableChain2 and ta.crossover(src2, entryEMA2)
bearishChain2 = enableChain2 and ta.crossunder(src2, entryEMA2)

// Exit Condition (Chain 2)
exitLongChain2 = enableChain2 and ta.crossunder(src2, exitEMA2)
exitShortChain2 = enableChain2 and ta.crossover(src2, exitEMA2)

// Debugging: Plot entry signals for Chain 1
plotshape(bullishChain1, color=color.new(color.green, 0), style=shape.labelup, text='BUY C1', location=location.belowbar)
plotshape(bearishChain1, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C1', location=location.abovebar)

// Debugging: Plot entry signals for Chain 2
plotshape(bullishChain2, color=color.new(color.green, 0), style=shape.labelup, text='BUY C2', location=location.belowbar)
plotshape(bearishChain2, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C2', location=location.abovebar)

// Trade Execution for Chain 1
if bullishChain1 and time_cond
    strategy.entry('BUY_Chain_1', strategy.long)

if bearishChain1 and time_cond
    strategy.entry('SELL_Chain_1', strategy.short)

// Exit trades based on daily conditions for Chain 1
if exitLongChain1 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_1', when=exitLongChain1)

if exitShortChain1 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_1', when=exitShortChain1)

// Trade Execution for Chain 2
if bullishChain2 and time_cond
    strategy.entry('BUY_Chain_2', strategy.long)

if bearishChain2 and time_cond
    strategy.entry('SELL_Chain_2', strategy.short)

// Exit trades based on daily conditions for Chain 2
if exitLongChain2 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_2', when=exitLongChain2)

if exitShortChain2 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_2', when=exitShortChain2)

// Close all positions outside the backtesting period
if not time_cond
    strategy.close_all()


관련

더 많은