지수 이동 평균 및 MACD 지표를 기반으로 한 양적 거래 전략


생성 날짜: 2023-12-08 16:58:01 마지막으로 수정됨: 2023-12-08 17:04:03
복사: 0 클릭수: 706
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

지수 이동 평균 및 MACD 지표를 기반으로 한 양적 거래 전략

개요

이 전략은 지수 이동 평균과 MACD 지표의 브레이크 신호를 결합하여 두 개의 긴 포지션 주기를 설정하고, 트렌드 추적과 반전 거래를 통해 수익을 얻습니다.

전략 원칙

이 전략은 다음과 같은 원칙에 기초하고 있습니다.

  1. 200일 지수 이동 평균을 계산하여 큰 트렌드 방향을 판단한다. closes 가격은 이 평균보다 높으면 부양이며, 낮으면 하향이다.

  2. 최고 가격, 최저 가격, 종전 가격에 기반한 평균 가격의 지수 이동 평균을 그리고, 그 평균과 최고 가격, 최저 가격의 차이를 계산하여 MACD 기둥 모양의 도표를 구성한다.

  3. MACD 기둥 그래프의 9일 이동 평균을 계산하여 MACD 신호선을 구성한다.

  4. MACD는 아래로 올라가는 신호선을 돌파할 때 구매 신호를 생성하고, 위로 내려가는 신호선을 돌파할 때 판매 신호를 생성한다.

  5. 큰 트렌드 방향과 함께, 더 긴 트렌드에 진입하거나 짧은 선의 반전을 판단한다.

전략적 이점

이 전략은 추세와 반전 거래를 결합하여 더 긴 기간의 추세를 추적할 수 있고, 짧은 선에서의 반전 기회를 잡을 수 있으며, 다양한 시장 상황에 대해 유연하게 대응할 수 있다.

구체적인 장점은 다음과 같습니다.

  1. 200일 이동 평균을 사용하여 주요 트렌드 방향을 판단하고 역경 조작을 피하십시오.

  2. MACD 지표는 단기 가격 변화에 더 민감하며, 역전 기회를 더 효과적으로 잡을 수 있다.

  3. 다양한 파라미터 설정의 MACD 조합으로, 여러 시간 프레임의 거래 신호를 구현할 수 있다.

  4. 단독 손실을 효과적으로 통제할 수 있는 전략이다.

전략적 위험

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 단기주기 지표가 거래 신호를 발산할 때, 일정 시간 차이가 있을 수 있으며, 종합적으로 큰 흐름을 판단해야 한다.

  2. MACD는 역전 지표로서, 급격한 상황이 발생했을 때 지표의 해석력이 감소한다.

  3. 스톱포인트가 잘못 설정되어 너무 일찍 또는 너무 많이 스톱포인트가 발생할 수 있습니다.

  4. 파격 신호가 너무 자주 발생하여 더 많은 가짜 신호가 발생할 수 있습니다.

대응방법:

  1. MACD 파라미터를 최적화하고 지표의 민감성을 조정한다.

  2. MACD 신호를 맹목적으로 추적하는 것을 피하기 위해 다른 지표의 판단 단계와 결합하십시오.

  3. 테스트 및 최적화 중지 손실 전략 매개 변수.

  4. 필터링 조건을 추가하여 너무 많은 가짜 신호를 방지하십시오.

전략 최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 이동 평균과 MACD의 매개 변수를 최적화하여 더 효과적인 거래 신호를 얻습니다.

  2. 다른 몇 가지 표시를 추가하여 전략의 효과를 향상시킵니다.

  3. 각 거래에 대한 고정 롯이 아닌 위치 사이징 전략을 설정하십시오.

  4. 더 진보된 출구 규칙을 추가하는 것이 아니라 그냥 중지 손실. Such as profit target, trailing stops etc.

  5. Backtest with more complex fee settings to better simulate real trading environoment. 실제 거래 환경을 더 잘 모의하기 위해 더 복잡한 수수료 설정을 사용하여 백테스트하십시오.

  6. Walk forward analysis, robustness test among multiple products to enhance reliability. 걸음걸이 분석을 구현하고, 안정성을 높이기 위해 다양한 제품의 안정성 테스트를 수행한다.

요약하다

이 전략은 트렌드와 역거래를 동시에 고려하며, 지표 파라미터의 설정과 큰 트렌드를 이해하는 정확성이 핵심이다. 계속적으로 파라미터 설정을 최적화하고, 파동 조건을 증가시키는 등의 수단으로 전략은 시장 상황 신호 판단을 더 정확하게하고, 수익을 더 안정적으로 만들 수 있다. 전반적으로 이 전략은 통합도가 높으며, 좋은 적용 전망을 가지고 있다.

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

//@version=4
strategy("Strategia EMA + Impulse MACD", shorttitle="EMA+IMACD", overlay=true)

// Impostazioni
ema_length = input(200, title="Periodo EMA a 200", type=input.integer)
lengthMA = input(34, title="Periodo EMA", type=input.integer)
lengthSignal = input(9, title="Periodo Signal", type=input.integer)
lengthImpulseMACD = input(12, title="Periodo Impulse MACD", type=input.integer)
lengthImpulseMACDSignal = input(9, title="Periodo Impulse MACD Signal", type=input.integer)
stopLossPeriod = input(20, title="Periodo Stop Loss", type=input.integer)

var float ema200 = na
if bar_index >= ema_length
    ema200 := ema(close, ema_length)

// Impulse MACD
var float hi = na
var float lo = na
var float mi = na
var float impulseMACD = na
var float impulseMACDSignal = na

calc_smma(src, len) =>
    var float smma = na
    if na(smma)
        smma := sma(src, len)
    else
        smma := (smma[1] * (len - 1) + src) / len
    smma

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

if bar_index >= lengthMA
    src = hlc3
    hi := calc_smma(high, lengthMA)
    lo := calc_smma(low, lengthMA)
    mi := calc_zlema(src, lengthMA)

    impulseMACD := (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
    impulseMACDSignal := sma(impulseMACD, lengthSignal)

// Calcolo dello stop loss
var float stopLossLong = na
var float stopLossShort = na

stopLossLong := lowest(low, stopLossPeriod)
stopLossShort := highest(high, stopLossPeriod)

// Calcolo del take profit
var float takeProfitLong = na
var float takeProfitShort = na

if not na(stopLossLong)
    takeProfitLong := close + (close - stopLossLong) * 1.5
if not na(stopLossShort)
    takeProfitShort := close - (stopLossShort - close) * 1.5

// Condizioni per aprire una posizione long
longCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close > ema200 and impulseMACD < 0 and impulseMACDSignal < 0 and crossover(impulseMACD, impulseMACDSignal)

// Condizioni per aprire una posizione short
shortCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close < ema200 and impulseMACD > 0 and impulseMACDSignal > 0 and crossunder(impulseMACD, impulseMACDSignal)

// Disegna l'EMA 200 sul grafico
plot(ema200, color=color.blue, title="EMA 200")

// Imposta lo stop loss e il take profit
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Impulse MACD
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(impulseMACD, color=color.red, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(impulseMACDSignal, color=color.blue, linewidth=2, title="ImpulseMACDSignal", style=plot.style_histogram)

// Disegna le operazioni long e short sul grafico
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, title="Long Entry")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, title="Short Entry")