가중화된 양적 이동평균 크로스오버 거래 전략

저자:차오장, 날짜: 2023-12-06 12:05:01
태그:

img

전반적인 설명

이 전략은가중화된 양적 이동 평균 크로스오버 전략기본 아이디어는 가격, 거래량 및 기타 지표에 기초하여 빠르고 느린 라인을 설계하고 골든 크로스와 데드 크로스가 발생하면 구매 및 판매 신호를 생성하는 것입니다.

전략 논리

이 전략의 핵심 지표는 양적 이동 평균 (QMA) 이다. QMA는 일정 기간 동안 중량 된 평균 가격을 계산하여 트렌드 방향을 측정한다. 일반 이동 평균과 달리 QMA의 가격의 무게 (중량 = 가격 * 거래량) 는 시간이 지남에 따라 감소 할 것이다. 따라서 최신 가격은 시장 변화에 더 빠르게 반응할 수 있는 더 큰 무게를 가지고 있다.

특히, 이 전략은 25일로 빠른 QMA 라인과 29일로 느린 QMA 라인을 구축한다. 빠른 라인이 느린 라인을 넘을 때 구매 신호를 생성하고 느린 라인을 넘을 때 판매 신호를 생성한다.

이점 분석

일반 이동 평균에 비해 이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 시장에 보다 신속히 대응하여 단기적 기회들을 포착할 수 있도록 해야 합니다.
  2. 가격과 거래량을 포함한 여러 차원을 결합하여 더 안정적입니다.
  3. 다양한 시장 환경에 적응할 수 있는 유연한 매개 변수 설정

위험 분석

이 전략에는 또한 몇 가지 위험이 있습니다.

  1. 단기 거래의 높은 거래 빈도, 이는 거래 비용과 미끄러짐을 증가시킬 수 있습니다.
  2. 과도한 매개 변수 최적화로 인한 과장
  3. 거래량이 충분하지 않을 때 지표 효과는 손상 될 수 있습니다.

위의 위험은 빈도를 적절히 조정하고, 엄격하게 앞으로의 분석을 수행하고, 다른 지표를 통합함으로써 완화 될 수 있습니다.

개선 방향

이 전략의 더 많은 최적화를 위한 여지가 있습니다.

  1. QMA의 매개 변수를 동적으로 조정하여 시장 변동에 스스로 적응하도록 합니다.
  2. 변동성과 거래량 같은 지표로 거래 기회를 필터링합니다.
  3. 단일 손실을 통제하기 위해 스톱 로스 전략을 추가합니다.

결론

일반적으로, 이것은 안정적인 단기 거래 전략이다. 단일 가격 평균에 비해, 그 지표는 시장의 수요와 공급 관계를 더 잘 반영할 수 있다. 적절한 매개 변수 조정과 위험 관리로, 이 전략은 장기적으로 안정적으로 작동하고 건전한 이익을 얻을 수 있다.


/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA


더 많은