경험적 모드 분해를 기반으로 한 양적 거래 전략


생성 날짜: 2023-12-22 14:41:34 마지막으로 수정됨: 2023-12-22 14:41:34
복사: 0 클릭수: 871
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

경험적 모드 분해를 기반으로 한 양적 거래 전략

개요

이 전략은 경험 모드 분해 (Empirical Mode Decomposition, EMD) 방법에 기초하여, 가격 서열을 분해하여, 서로 다른 파장의 특성을 추출하고, 평균값과 결합하여 거래 신호를 생성한다. 이 전략은 주로 중장선 지위를 보유하는 데 적합하다.

전략 원칙

  1. EMD 방법을 사용하여 가격에 대한 대역관리 필러링을 하여 가격의 변동 특성을 추출한다.
  2. 값과 값의 이동 평균을 계산합니다.
  3. 평균선이 피크라인과 밸리라인의 일정 비율을 초과할 때 거래 신호를 생성한다
  4. 트레이딩 신호에 따라 더 많은 헤드 또는 빈 헤드

우위 분석

  1. EMD 방식을 사용하여 가격 순서를 효과적으로 분해하여 유용한 특성을 추출할 수 있습니다.
  2. 피크 밸리 라인은 가격 변동이 특정 범위를 초과할 때만 거래하는 전략을 통제합니다.
  3. 평균선과 결합하여 가짜 돌파구를 효과적으로 제거할 수 있다.

위험 분석

  1. EMD 메소드 파라미터를 잘못 선택하면 오버매칭이 발생할 수 있습니다.
  2. 거래 신호를 형성하기 위해 더 긴 주기가 필요하며, 고주파 거래에 적응할 수 없습니다.
  3. 가격의 급격한 변동에 대처할 수 없는 시장 환경

최적화 방향

  1. EMD 모델의 매개 변수를 최적화하여 시장에 대한 적응력을 향상시킵니다.
  2. 다른 지표와 결합하여 스톱 스톱 신호로
  3. 전략적 입력으로 다른 가격 순서를 시도합니다.

요약하다

이 전략은 경험 모형 분해 방법을 사용하여 가격 서열에 특징을 추출하고 추출 된 특징을 기반으로 거래 신호를 생성하여 안정적인 중장선 거래 전략을 구현합니다. 이 전략의 장점은 가격의 주기적 특성을 효과적으로 식별하고 큰 변동에서 거래 지시를 발령하는 데 있습니다. 그러나 위험이 있지만 더 복잡한 시장 환경에 적응하기 위해 추가 최적화가 필요합니다.

전략 소스 코드
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/04/2017
// The related article is copyrighted material from Stocks & Commodities Mar 2010
// You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect...
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Empirical Mode Decomposition")
Length = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
xPrice = hl2
beta = cos(3.1415 * (360 / Length) / 180)
gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
alpha = gamma - sqrt(gamma * gamma - 1)
xBandpassFilter = 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
xMean = sma(xBandpassFilter, 2 * Length)
xPeak =  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
xValley =  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
xAvrPeak = sma(xPeak, 50)
xAvrValley = sma(xValley, 50)
nAvrPeak = Fraction * xAvrPeak
nAvrValley = Fraction * xAvrValley
pos = iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
	     iff(xMean < nAvrPeak and xMean < nAvrValley, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(xMean, color=red, title="Mean")
plot(nAvrPeak, color=blue, title="Peak")
plot(nAvrValley, color=blue, title="Valley")