MACD 골든 크로스 데스 크로스 트렌드

저자:차오장, 날짜: 2023-12-22 11:45:54
태그:

img

전반적인 설명

이 전략은 트렌드 방향을 결정하기 위해 MACD 지표의 황금 십자가와 죽음의 십자가를 사용하고, 거래 후 트렌드를 구현하기 위해 스톱 손실 및 수익을 취하기 위해 ATR 지표를 사용합니다. 전략 이름은 MACD 지표의 황금 십자가 및 죽음의 십자가 신호의 사용을 강조합니다.

전략 논리

MACD 라인이 아래에서 신호 라인의 위를 넘어서 긍정적으로 변하면, 골든 크로스 신호라고 불리는 구매 신호가 생성되며, 주식 가격의 상승 추세를 나타냅니다. MACD 라인이 위에서 신호 라인의 아래를 넘어서 부정적으로 변하면, 주식 가격의 하향 추세를 나타내는 판매 신호가 생성됩니다.

이 전략은 단순히 금색 십자가에 장을 걸고 추세를 따르기 위해 죽음의 십자가에 짧습니다. 동시에 전략은 또한 거래 시스템을 구성하기 위해 스톱 로스를 계산하고 수익 수준을 취하기 위해 ATR 지표를 도입합니다.

구체적으로, 전략은 먼저 빠른 이동 평균, 느린 이동 평균, MACD 차이, 신호 라인 및 기타 표준 MACD 지표를 계산합니다. 그 다음, 다섯 가지 신호 유형 중 선택 된 하나 (계속 신호, 역전 신호, 히스토그램 신호, MACD 제로 크로스, 신호 라인 제로 크로스) 에 따라 황금 십자가와 죽음의 십자가가 결정됩니다. 마지막으로, 입출 논리를 완료하기 위해 ATR 지표에 따라 손실 중지 및 수익을 설정합니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트렌드 방향을 결정하기 위해 MACD 지표를 사용하는 것은 정확하고 신뢰할 수 있습니다. MACD 지표는 수년 동안 트렌드 결정에서 두드러지게 수행되었습니다.

  2. ATR 지표에 기반한 스톱 로스 및 수익 취득 설정은 단일 거래의 위험/이익 비율을 효과적으로 제어하고 손실의 가능성을 줄일 수 있습니다.

  3. 5가지 선택적 신호 유형을 제공함으로써 다양한 시장에 가장 적합한 신호를 사용할 수 있으며, 전략의 적응성을 향상시킵니다.

  4. 더 나은 거래 성능을 위해 최적화 할 수있는 많은 조정 가능한 입력 매개 변수가 있습니다.

위험 과 해결책

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

  1. MACD 지표는 쉽게 잘못된 신호를 생성하고 불필요한 손실을 일으킬 수 있습니다. 다른 지표는 신호를 필터링하는 데 사용할 수 있습니다.

  2. ATR 지표는 최근 기간의 변동만을 모델링하고 극단적인 시장 조건에서 손실을 정확하게 멈출 수 없습니다. 이 문제를 해결하기 위해 동적 중지가 도입 될 수 있습니다.

  3. 선택 된 신호의 성능은 안정적이지 않을 수 있습니다. 최적의 매개 변수를 결정하려면 광범위한 백테스팅이 필요합니다.

  4. 신호 매개 변수와 위험 관리 매개 변수는 함께 최적화되어야합니다. 그렇지 않으면 전 세계적으로 최적의 결과를 찾는 것이 어렵습니다. 단계적 최적화 방법이 권장됩니다.

최적화 제안

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

  1. MACD 신호를 필터하기 위해 TMA, Hull MA 등과 같은 다른 이동 평균을 시도하십시오.

  2. 극심한 시장 조건의 변동에 더 잘 대처할 수 있는 동적 정지 메커니즘을 시도해보세요.

  3. 더 나은 조합을 찾기 위해 전통적인 MACD 매개 변수를 완벽하게 최적화합니다.

  4. 더 나은 위험 관리를 위해 최적의 ATR 배수를 찾기 위해 기계 학습 방법을 사용하십시오.

  5. 최적의 신호를 결정하기 위해 다섯 가지 신호 유형 각각을 개별적으로 테스트합니다.

  6. 신호 품질을 판단하고 MACD를 기반으로 새로운 신호를 발견하는 신경 네트워크를 훈련합니다.

결론

MACD 황금 십자 죽음 십자 추세 전략은 추세 방향을 결정하고 ATR 지표로 스톱 손실을 설정하고 수익을 취하기 위해 MACD 지표를 활용하여 트렌드 거래 기회를 효과적으로 파악 할 수 있습니다. 전략은 조정 가능한 매개 변수, 완전한 스톱 메커니즘 및 선택 신호 유형과 같은 여러 장점을 가지고 있습니다. 다음 단계는 더 나은 백테스트 및 라이브 결과를 얻기 위해 신호 품질, 스톱 손실 메커니즘 및 매개 변수 선택 최적화를 개선하는 것입니다.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vuagnouxb

//@version=4
strategy("BV's MACD SIGNAL TESTER", overlay=true)

//------------------------------------------------------------------------
//----------            Confirmation Calculation              ------------ INPUT
//------------------------------------------------------------------------

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

// -- Trade entry signals

signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"])

continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 :
   signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : 
   signalChoice == "Histogram" ? crossover(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossover(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossover(signal, 0) :
   false
   
continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 :
   signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : 
   signalChoice == "Histogram" ? crossunder(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossunder(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossunder(signal, 0) :
   false

longCondition = continuationSignalLong

shortCondition = continuationSignalShort

//------------------------------------------------------------------------
//----------             ATR MONEY MANAGEMENT                 ------------
//------------------------------------------------------------------------

SLmultiplier = 1.5
TPmultiplier = 1

JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false)
pipAdjuster = JPYPair ? 1000 : 100000


ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000
SL = ATR * SLmultiplier
TP = ATR * TPmultiplier

//------------------------------------------------------------------------
//----------                  TIME FILTER                     ------------
//------------------------------------------------------------------------

YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3)

_time = 2020 - YearOfTesting

timeFilter = (year > _time) 

//------------------------------------------------------------------------
//---------                 ENTRY FUNCTIONS                    ----------- INPUT
//------------------------------------------------------------------------

if (longCondition and timeFilter)  
    strategy.entry("Long", strategy.long)

if (shortCondition and timeFilter) 
    strategy.entry("Short", strategy.short)
    
//------------------------------------------------------------------------
//---------                 EXIT  FUNCTIONS                    -----------
//------------------------------------------------------------------------


strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL)  

strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)  

더 많은