
이 전략은 두 개의 이동 평균을 교차하는 MACD 기술 지표를 기반으로 구현하는 자동 거래 전략이다. MACD 지표의 빠른 느린 선 교차 신호를 사용하여 트렌드 방향을 판단하고 트렌드 추적을 구현한다.
이 전략은 먼저 MACD 지표의 세 개의 곡선을 계산한다: 빠른 선, 느린 선, 그리고 오차 선. 빠른 선은 일정한 주기 내의 더 빠른 이동 평균이며, 느린 선은 더 긴 주기 내의 이동 평균이다. 오차 선은 빠른 선과 느린 선의 차이다. 빠른 선에서 느린 선을 통과하면 금 포크 신호가 있고, 구매 신호를 나타냅니다. 빠른 선 아래에서 느린 선을 통과하면 사다 신호가 있으며, 판매 신호를 나타냅니다.
이 전략은 이 원리를 활용하여, 골드 포크 때 더 많이 하고, 데드 포크 때 평소; 또는 데드 포크 때 공백하고, 골드 포크 때 평소, 자동으로 트렌드를 추적한다. 동시에, 전략은 MACD 선의 절대값을 긍정 부정으로 판단하고, 가짜 신호를 피하고, 트렌드 전환점을 진정으로 잡는 것을 보장한다.
위험 해결 방법:
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
다른 지표 확인 신호와 결합하여, 예를 들어, KDJ 지표, 브린 밴드 지표 등, 가짜 신호를 필터링
출전 메커니즘의 변경, 예를 들어, 예상보다 일찍 또는 늦게 출전을 방지하기 위해 돌파구 필터를 추가합니다.
최적화 매개 변수 설정, 다른 주기 및 시장 환경에 따라 빠른 라인 느린 라인 주기를 조정, 시장에 적응
단독 손실을 통제하기 위한 HAL 전략에 참여하세요.
외환, 디지털 화폐 등으로 확장할 수 있습니다.
이 이중 이동 평균 교차 MACD 트렌드 추적 전략은 MACD 지표를 사용하여 트렌드 방향을 판단하고, 느리고 느린 선 교차 필터 신호와 함께, 트렌드 전환을 효과적으로 포착하고, 트렌드를 자동으로 추적할 수 있습니다. 전략의 장점은 트렌드를 정확하게 판단하고, 매개 변수를 조정할 수 있으며, 시장 환경에 따라 최적화 할 수 있습니다.
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © DeMindSET
//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
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)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
if LSB == "Long only" and Green
strategy.entry("L",true)
if LSB == "Long only" and Red
strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
strategy.entry("L",true)
if LSB == "Both" and Red
strategy.entry("S",false)
if LSB == "Short only" and Red
strategy.entry("S",false)
if LSB == "Short only" and Green
strategy.close("S",qty_percent=100,comment="TP Short")