
이 전략은 MACD 지표의 골드 포크 데드 포크를 통해 트렌드 방향을 판단하고, ATR 지표와 함께 스톱 로스트를 하고, 트렌드 추적 거래를 구현한다. 전략 이름의 ?? 골드 포크 데드 포크 ?? 은 MACD 지표의 골드 포크 데드 포크 신호를 사용하는 것을 강조한다.
MACD 라인이 Signal 라인을 위아래로 가로질러 마이너스 값으로 바뀌면 매수 신호가 발생한다. 이것은 금叉 신호이며, 상향 추세를 나타낸다. MACD 라인이 Signal 라인을 위아래로 가로질러 마이너스 값으로 바뀌면 매수 신호가 발생한다. 이것은 사다리 신호이며, 주가 하향 추세를 나타낸다.
이 전략은 이 원리를 이용해서 금포 때 더하고, 사포 때 공백을 하고, 트렌드 추적을 구현한다. 동시에, 전략은 ATR 지표 계산 스톱 로즈 스톱 포지션을 도입하여 거래 시스템의 구축을 완료한다.
구체적으로, 전략은 먼저 빠른 이동 평균, 느린 이동 평균, MACD 격차, 신호 라인 등 표준 MACD 지표를 계산한다. 그리고는 선택된 다섯 가지 신호에 따라 (계속 신호, 역전 신호, 기둥 도표 신호, MACD 소축 교차, 신호 소축 교차) 금색 사다리를 판단한다. 마지막으로 ATR 지표와 결합하여 스톱 로드를 설정하고, 진출 및 출구 논리를 완료한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
MACD 지표는 트렌드 방향을 정확하게 판단할 수 있으며, 수년 동안 MACD 지표는 트렌드 판단에서 두드러지게 나타났습니다.
ATR 지표와 결합된 스톱로스 스 설정은 단일 거래의 리스크 수익률을 효과적으로 제어하여 손실의 가능성을 줄일 수 있다.
다섯 가지 선택 가능한 신호를 제공하여 다양한 시장에 더 적합한 신호를 사용하여 전략의 적응성을 향상시킬 수 있습니다.
입력 가능한 매개 변수가 많아서 매개 변수 최적화를 통해 더 나은 거래 결과를 얻을 수 있다.
이 전략에는 몇 가지 위험도 있습니다.
MACD 지표는 잘못된 신호를 생성하기 쉽고 불필요한 손실을 초래할 수 있다. 다른 지표의 필터링 신호와 결합할 수 있다.
ATR 지표는 단지 최근 기간의 변동만을 모델링하고, 극단적인 상황에 대해 정확한 스톱 로드를 할 수 없습니다. 동적 스톱 로드를 도입하여 해결할 수 있습니다.
선택된 신호의 효과는 불안정할 수 있으며, 최적의 매개 변수를 결정하기 위해 많은 재검토가 필요하다.
신호 매개 변수와 위험 관리 매개 변수가 동시에 최적화되어야 합니다. 그렇지 않으면 최적의 결과를 얻는 것이 어렵습니다. 단계적 최적화 방법을 사용하는 것이 좋습니다.
이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
다른 이동 평균 (TMA, hullMA 등) 을 시도하고 MACD 신호를 필터링하십시오.
극한상황의 변동성을 더 잘 처리할 수 있는 역동적 상쇄장치를 시도한다.
MACD 지표의 전통적인 변수 조합에 대한 조기 최적화, 더 나은 변수를 찾아내기.
기계학습을 통해 최적의 ATR 곱수를 찾고, 더 나은 위험 관리를 수행합니다.
5가지 신호 유형에 대해 각각 재검토하여 최적의 신호를 결정한다.
뉴런 네트워크는 신호의 종류를 판단하여 새로운 MACD 기반의 신호를 찾도록 훈련한다.
이 MACD 골드 포크 사망 포크 트렌드 추적 전략은 MACD 지표를 사용하여 트렌드 방향을 판단하고, ATR 지표와 함께 스톱 스톱을 수행하여 트렌드 거래 기회를 효과적으로 얻을 수 있습니다. 전략은 지표 매개 변수를 최적화 할 수 있으며, 스톱 메커니즘이 완성되어 있으며, 신호 유형이 선택 될 수 있습니다. 다음 작업은 신호 품질을 향상시키고, 스톱 메커니즘을 개선하고, 매개 변수 선택 최적화를 위해 시작됩니다.
/*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)