골든 크로스 데드 크로스 이중 이동 평균 MACD 트렌드 추적 전략

저자:차오장날짜: 2023-12-22 14:17:34
태그:

img

전반적인 설명

이 전략은 빠른 이동 평균, 느린 이동 평균 및 MACD 지표를 계산하여 가격 트렌드를 판단하고, 골든 크로스 및 데드 크로스 거래 신호를 구성합니다. 이 또한 이익을 잠금하고 지속적으로 트렌드를 추적하기 위해 수익을 취하고 손실을 멈추고 손실을 멈추는 것을 결합합니다.

전략 논리

이 전략은 주로 세 가지 지표에 기반합니다.

먼저, 빠른 이동 평균과 두 느린 이동 평균을 계산합니다. 빠른 MA가 두 느린 MA보다 높을 때 구매 신호가 생성됩니다. 빠른 MA가 두 느린 MA보다 낮을 때 판매 신호가 생성됩니다. 이것은 골든 크로스 및 데드 크로스 거래를 실현하기 위해 단기 및 장기 트렌드 사이의 관계를 판단합니다.

두 번째로, MACD 라인, 신호 라인 및 히스토그램을 포함한 MACD 지표를 계산합니다. MACD 히스토그램이 > 0이면 상승 지표이며 MACD 히스토그램이 < 0일 경우 하락 지표입니다. 이것은 황금 십자 및 죽은 십자 신호의 신뢰성을 판단하는 데 도움이됩니다.

마지막으로, 이윤을 취하고, 손실을 멈추고, 손실을 멈추는 메커니즘을 포함합니다. 이윤을 취하고 손실을 멈추는 포인트는 이익을 잠금하고 위험을 제어하는 데 사용됩니다. 손실을 멈추는 지점은 이익을 추적하는 데 사용됩니다.

장점

이 전략의 장점은 다음과 같습니다.

  1. 황금 십자, 죽은 십자 MACD와 결합하여 가격 추세를 신뢰할 수 있습니다.
  2. 손해를 막는 지점은 더 큰 손실을 방지합니다.
  3. 트레이닝 스톱 로스는 자동으로 움직여 수익을 지속적으로 차단하고 트렌드 수익을 극대화합니다.
  4. 유연한 매개 변수 설정, 사용자 정의 이동 평균 기간.

위험성

또한 몇 가지 위험이 있습니다.

  1. 가격 충격은 스톱 로스 포인트를 유발할 수 있습니다.
  2. 트레일링 스톱 로스의 장기적인 실행은 지속적인 모니터링과 적절한 조정을 필요로 합니다.
  3. 부적절한 매개 변수 설정으로 인해 거래가 과잉되거나 실패할 수 있습니다.

해결책은 다음과 같습니다.

  1. 불필요한 스톱 손실을 방지하기 위해 적절한 스톱 손실 지점을 설정합니다.
  2. 매개 변수 설정을 정기적으로 확인하고 최적화하십시오.
  3. 수동 개입 및 상태 모니터링

최적화 방향

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

  1. RSI와 같은 더 많은 지표를 추가하여 신호를 더 신뢰할 수 있습니다.
  2. 이동 평균 매개 변수를 다양한 거래 도구에 맞게 최적화합니다.
  3. 동적 트레일링 스톱 알고리즘을 추가하여 시장에 따라 스톱 포인트를 변경합니다.
  4. 포지션 크기와 리스크 관리 모듈을 추가합니다.

요약

요약하자면, 이것은 트렌드를 판단하고 트레일링 스톱 로스를 실현하기 위해 골든 크로스, 데드 크로스 및 MACD를 사용하는 간단하지만 효과적인 전략입니다. 장점은 트렌드 추적 및 높은 사용자 정의성을 가진 이익 잠금입니다. 그것은 다양한 거래 도구에 적합한 보편적 매개 변수 최적화 전략입니다. 여전히 약간의 위험과 최적화 공간이 있지만 전반적으로 신뢰할 수 있고 실용적인 거래 전략입니다.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy('The Puria Method', shorttitle = 'Puria',overlay = true)

//=== GENERAL INPUTS ===

// short ma
maFastSource   = input(defval = close, title = "Fast MA Source")
maFastLength   = input(defval = 5, title = "Fast MA Period", minval = 1)

// long ma 1
maSlow1Source   = input(defval = low, title = "Slow MA1 Source")
maSlow1Length   = input(defval = 85, title = "Slow MA Period", minval = 1)

// long ma 2
maSlow2Source   = input(defval = low, title = "Slow MA2 Source")
maSlow2Length   = input(defval = 75, title = "Slow MA Period", minval = 1)

//macd
macdFastLength   = input(defval = 12, title = "Fast MACD Period", minval = 1)
macdSlowLength   = input(defval = 26, title = "Slow MACD Period", minval = 1)
macdSmaLength   = input(defval = 9, title = "SMA MACD Period", minval = 1)

// the risk management inputs
inpTakeProfit   = input(defval = 30, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 10, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 5, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
maFast = ema(maFastSource, maFastLength)
maSlow1 = wma(maSlow1Source, maSlow1Length)
maSlow2 = wma(maSlow2Source, maSlow2Length)
[_, signal, histLine] = macd(close, macdFastLength, macdSlowLength, macdSmaLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow1 = plot(maSlow1, title = "Slow MA1", color = red, linewidth = 2, style = line, transp = 50)
slow2 = plot(maSlow2, title = "Slow MA2", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
signalUp = crossover(maFast, maSlow1) and crossover(maFast, maSlow2) and histLine > 0
signalDown = crossunder(maFast, maSlow1) and crossunder(maFast, maSlow2) and histLine < 0

// ===STRATEGY===
strategy.entry(id = "Long", long = true, when = signalUp) 
strategy.entry(id = "Short", long = false, when = signalDown)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

더 많은