MACD를 기반으로 한 복합 양적 거래 전략

저자:차오장, 날짜: 2023-12-13 16:44:46
태그:

img

전반적인 설명

이것은 MACD 지표에 기반한 복합 양적 거래 전략입니다. MACD 및 KDJ와 같은 여러 지표를 결합하여 지표의 조합을 통해 거래 신호를 생성합니다.

전략 원칙

이 전략의 핵심 지표는 MACD이다. MACD는 트렌드를 따르는 지표인 이동 평균 컨버전스 디버전스를 의미합니다. 그것은 빠른 이동 평균 (EMA) 과 느린 이동 평균 (EMA) 으로 구성됩니다. 기본 매개 변수는 빠른 라인에는 12 개, 느린 라인에는 26 개입니다. 전략은 DIF라고 불리는 두 EMA 라인 사이의 차이를 계산합니다. 그 다음 DEA 지표를 얻기 위해 DIF에서 9 일 EMA가 계산됩니다. DIF가 DEA 위에 넘을 때 구매 신호가 생성됩니다. 아래에 넘을 때 판매 신호가 생성됩니다.

이 전략에는 KDJ 지표도 포함되어 있습니다. KDJ 지표에는 K 값, D 값, J 값이 포함되어 있습니다. 그 중 K 값은 무작위 값을 가리키고, D 값은 K 값의 이동 평균이며, J 값은 결정적 값을 가리키고 있습니다. KDJ 지표는 시장의 과잉 구매 및 과잉 판매 수준을 반영합니다. J 값이 100보다 크면 과잉 구매 조건을 나타냅니다. 10 미만이면 과잉 판매 조건을 나타냅니다. 전략은 시장 전환점에 잘못된 신호를 생성하지 않도록 KDJ 지표를 결합합니다.

전략 의 장점

이 전략은 MACD와 KDJ와 같은 여러 지표를 결합하여 시장 소음을 효과적으로 필터링하고 트렌드 방향을 식별 할 수 있습니다. MACD 지표는 단기 가격 변화를 적시에 파악 할 수 있으며 KDJ 지표는 중장기 트렌드를 확인 할 수 있습니다. 둘의 조합은 민첩성과 안정성을 추구하는 균형을 유지할 수 있습니다.

또한 전략에는 시간 범위 선택기가 포함되어 있어 전략 성과를 평가하는 데 더 많은 유연성을 제공합니다.

위험 과 해결책

  • 시장이 장기간 변동할 때 MACD는 여러 가지 잘못된 신호를 갖게됩니다. 이 시점에서 우리는 소음을 필터링하기 위해 EMA 라인의 매개 변수를 적절히 조정 할 수 있습니다.

  • 잘못된 KDJ 매개 변수 설정도 결과에 영향을 미칠 것입니다. 우리는 여러 매개 변수 그룹을 테스트하고 더 안정적인 매개 변수 조합을 선택할 수 있습니다.

  • 백테스트 시간 프레임의 부적절한 선택은 전략의 수익성을 과대평가하거나 과소평가 할 것입니다. 테스트를 위해 대표적인 시간 프레임이 선택되어야합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 스톱 로스 메커니즘을 추가합니다. 가격이 스톱 로스 라인을 트리거하면 스톱 로스 목적을 위해 포지션 출구를 강요합니다.

  2. 더 많은 지표 필터를 통합하여 RSI와 볼링거 밴드와 같은 지표를 결합하여 신호 정확도를 향상시킵니다.

  3. 지표 매개 변수를 최적화합니다. 최적의 설정을 찾기 위해 EMA와 KDJ 매개 변수 조합을 변경하십시오.

  4. 기계 학습 기술을 사용하여 자동으로 최적화합니다. 매개 변수 훈련과 최적화를 위해 신경망을 사용합니다.

결론

이는 주로 추세를 따르는 전형적인 양적 전략이며, 과잉 구매 및 과잉 판매 통제로 보완됩니다. 여러 지표의 장점을 결합하고 안정성과 감수성을 효과적으로 균형 잡습니다. 지속적인 최적화 및 조정으로 전략의 적용 가능성은 장기적으로 안정적인 이익을 얻기 위해 더욱 확장 될 수 있습니다.


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

//@version=4
strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000)

source = close

fastlength=input(12, minval=1)
slowlength=input(26,minval=1)
signallength=input(9,minval=1)

// === Defining the MACD oscillator
fastMA=ema(source,fastlength)
slowMA=ema(source,slowlength)
MACD=fastMA-slowMA
signal=sma(MACD,signallength)
delta=MACD-signal

// === Buy and Sell Signals ===
buy=crossover(MACD, signal)
sell=crossunder(MACD, signal)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2018, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2020, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

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

더 많은