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

적응형 멀티-MA 모멘텀 돌파구 거래 전략

저자:차오장, 날짜: 2025-01-10 15:27:53
태그:SMMAZLEMAEMAMASMA

 Adaptive Multi-MA Momentum Breakthrough Trading Strategy

전반적인 설명

이 전략은 여러 이동 평균과 동력 돌파를 기반으로 하는 거래 전략이다. 이 전략은 가격과 이동 평균 사이의 크로스오버 신호를 캡처함으로써 거래 기회를 식별하기 위해 SMMA (슬라우드 이동 평균) 및 ZLEMA (제로-래그 기하급수적 이동 평균) 와 같은 기술적 지표를 결합합니다. 이 전략은 거래 정확성을 향상시키기 위해 시장 변동성에 따라 신호 민감도를 조정하는 적응 메커니즘을 사용합니다.

전략 원칙

이 전략은 src (HLC3에 기반한 SMMA), hi (high에 기반한 SMMA), lo (low에 기반한 SMMA), mi (src에 기반한 ZLEMA) 라는 네 가지 주요 이동 평균을 사용합니다. 거래 신호는 주로 이러한 이동 평균 사이의 교차 관계 및 상대적 위치에 기반합니다. 여러 신호 조건의 조합은 거래 신호의 신뢰성을 보장합니다. 구매 신호에는 네 가지 다른 조건 조합이 포함되며 판매 신호에는 또한 네 가지 다른 조건 조합이 포함됩니다. 출구 신호는 이동 평균과 mi 평균과 상대적 위치 사이의 가격 교차를 기반으로합니다.

전략적 장점

  1. 다중 신호 확인 메커니즘은 거래 정확성을 향상시킵니다.
  2. 적응성 기능으로 전략은 다른 시장 환경에 적응할 수 있습니다.
  3. SMMA 및 ZLEMA 사용은 잘못된 신호의 영향을 줄입니다.
  4. 계층 신호 시스템은 더 많은 거래 기회를 제공합니다.
  5. 명확한 출구 조건은 위험을 조절하는 데 도움이 됩니다.

전략 위험

  1. 이동 평균 크로스오버는 출입 시점에 영향을 미치는 지연을 일으킬 수 있습니다.
  2. 여러 조건이 중요한 거래 기회를 놓칠 수 있습니다.
  3. 불안한 시장에서 과도한 잘못된 신호를 생성 할 수 있습니다.
  4. 잘못된 매개 변수 설정은 전략 성능에 영향을 줄 수 있습니다.
  5. 전략 수익에 대한 거래 비용의 영향을 고려해야 합니다.

전략 최적화 방향

  1. 높은 변동성 기간 동안 전략 매개 변수를 조정하기 위해 변동성 필터를 도입합니다.
  2. 신호 신뢰성을 향상시키기 위해 볼륨 분석을 추가합니다.
  3. 이동 평균 매개 변수의 적응 메커니즘을 최적화
  4. 트렌드 판단 정확성을 향상시키기 위해 트렌드 강도 지표를 추가합니다.
  5. 위험 통제를 강화하기 위한 동적 스톱 로스 메커니즘 개발

요약

이 전략은 여러 이동 평균과 추진률 지표의 조합을 통해 비교적 완전한 거래 시스템을 구축합니다. 전략의 적응 기능과 여러 확인 메커니즘은 거래 신뢰성을 향상시킵니다. 최적화 및 정교화를 통해 전략은 다른 시장 환경에서 안정적인 성능을 유지할 수 있습니다. 거래자는 라이브 거래 전에 철저한 백테스팅과 매개 변수 최적화를 수행하는 것이 좋습니다.


/*backtest
start: 2024-01-10 00:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6

//study("Limit order strategy", overlay=true)
strategy('Limit order strategy', overlay = true)

lengthMA = input(1)
lengthmi = input(14)
lengthhigh = input(14)
lengthlow = input(14)

calc_smma(src, len) =>
    smma = 0.0
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d


src = calc_smma(hlc3, lengthMA)
hi = calc_smma(high, lengthhigh)
lo = calc_smma(low, lengthlow)
mi = calc_zlema(src, lengthmi)

plot(src, color = color.new(#FF1493, 0), linewidth = 2, title = 'src')
plot(hi, color = color.new(#7CFC00, 0), linewidth = 2, title = 'hi')
plot(lo, color = color.new(#FF0000, 0), linewidth = 2, title = 'lo')
plot(mi, color = color.new(#00FFFF, 0), linewidth = 2, title = 'mi')


//strategy.order("buy", true, 1, stop = na, when = openbuy) // buy by market if current open great then previous high
//strategy.order("sell", false, 1, stop = na, when = opensell) // sell by market if current open less then previous low
//if src >= mi and src[1] <= mi[1] and src[1] <= lo[1]
//	strategy.entry("buy 1", strategy.long, qty = 15)
sigorderbuy1 = src > mi and src[1] < mi[1] and src < lo and mi < lo
sigorderbuy2 = src > lo and src[1] < lo[1] and mi < lo
sigorderbuy3 = src > hi and src[1] < hi[1] and mi < hi
sigorderbuy4 = src > mi and src[1] < mi[1] and src > hi and mi > hi
//sigorderbuy5 = mi > hi and  src > hi  and src > mi and src[1] < mi[1] 
//sigorderbuy6 = mi < hi and src > hi and src[1] < hi[1]
sigclosebuy = src < mi and src[1] > mi[1] or mi < lo and src < lo and src[1] > lo[1]

sigordersell1 = src < mi and src[1] > mi[1] and src > hi and mi > hi
sigordersell2 = src < hi and src[1] > hi[1] and mi > hi
sigordersell3 = src < lo and src[1] > lo[1] and mi > lo
sigordersell4 = src < mi and src[1] > mi[1] and src < lo and mi < lo
//sigordersell5 = mi < lo and  src < lo  and src < mi and src[1] > mi[1] 
//sigordersell6 = mi > lo and src < lo and src[1] > lo[1]
sigclosesell = src > mi and src[1] < mi[1] or mi > hi and src > hi and src[1] < hi[1]

plot(sigorderbuy1 ? 1 : 0, 'sigorderbuy1')
plot(sigorderbuy2 ? 1 : 0, 'sigorderbuy2')
plot(sigorderbuy3 ? 1 : 0, 'sigorderbuy3')
plot(sigorderbuy4 ? 1 : 0, 'sigorderbuy4')
//plot(sigorderbuy5 ? 1 : 0,"sigorderbuy5") 
//plot(sigorderbuy6 ? 1 : 0,"sigorderbuy6") 

plot(sigordersell1 ? 1 : 0, 'sigordersell1')
plot(sigordersell2 ? 1 : 0, 'sigordersell2')
plot(sigordersell3 ? 1 : 0, 'sigordersell3')
plot(sigordersell4 ? 1 : 0, 'sigordersell4')
//plot(sigordersell5 ? 1 : 0,"sigordersell5") 
//plot(sigordersell6 ? 1 : 0,"sigordersell6")

plot(sigclosebuy ? 1 : 0, 'sigclosebuy')
plot(sigclosesell ? 1 : 0, 'sigclosesell')


openbuy = sigorderbuy1 or sigorderbuy2 or sigorderbuy3 or sigorderbuy4 // or sigorderbuy5 or sigorderbuy6
opensell = sigordersell1 or sigordersell2 or sigordersell3 or sigordersell4 //or sigordersell5 or sigordersell6
openclosebuy = sigclosebuy
openclosesell = sigclosesell

alertcondition(condition = openbuy, title = 'sigorderbuy all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Buy {{ticker}} sig_b1={{plot("sigorderbuy1")}} sig_b2={{plot("sigorderbuy2")}} sig_b3={{plot("sigorderbuy3")}} sig_b4={{plot("sigorderbuy4")}}"}')
alertcondition(condition = opensell, title = 'sigordersell all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Sell {{ticker}} sig_s1={{plot("sigordersell1")}} sig_ss={{plot("sigordersell2")}} sig_s3={{plot("sigordersell3")}} sig_s4={{plot("sigordersell4")}} sig_s5={{plot("sigordersell5")}} sig_61={{plot("sigordersell6")}}"}')

alertcondition(condition = sigclosebuy, title = 'Close buy', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=short"}')
alertcondition(condition = sigclosesell, title = 'Close sell', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=long"}')

if sigorderbuy1
    strategy.order('Buy 1', strategy.long, 1)
if sigorderbuy2
    strategy.order('Buy 2', strategy.long, 1)
if sigorderbuy3
    strategy.order('Buy 3', strategy.long, 1)
if sigorderbuy4
    strategy.order('Buy 4', strategy.long, 1)


if sigordersell1
    strategy.order('sell 1', strategy.short, 1)
if sigordersell2
    strategy.order('sell 2', strategy.short, 1)
if sigordersell3
    strategy.order('sell 3', strategy.short, 1)
if sigordersell4
    strategy.order('sell 4', strategy.short, 1)
//strategy.order("sell 5", false, 1, when = sigordersell5)
//strategy.order("sell 6", false, 1, when = sigordersell6)


관련

더 많은