
Chiến lược này dựa trên các đặc điểm thay đổi động của MACD để đưa ra quyết định giao dịch. Cốt lõi của chiến lược là dự đoán xu hướng có thể xuất hiện bằng cách quan sát các biến động của MACD và Histogram để dự đoán các giao dịch có thể xuất hiện. Chiến lược này không chỉ tập trung vào tín hiệu giao chéo MACD truyền thống, mà còn tập trung vào các đặc điểm thay đổi động của biểu đồ cột để có được thời gian nhập cảnh tốt hơn bằng cách đoán trước tín hiệu giao chéo.
Chiến lược sử dụng hệ thống chỉ số MACD được cải tiến, bao gồm tính toán chênh lệch giữa trung bình di chuyển nhanh (EMA12) và trung bình di chuyển chậm (EMA26), và đường tín hiệu dựa trên 2 chu kỳ.
Chiến lược này cải tiến và tối ưu hóa hệ thống giao dịch MACD truyền thống bằng cách sử dụng một cách sáng tạo các đặc điểm thay đổi động của đồ thị MACD. Cơ chế phán đoán của chiến lược có thể cung cấp tín hiệu nhập cảnh sớm hơn, trong khi các điều kiện giao dịch nghiêm ngặt và các biện pháp kiểm soát rủi ro đảm bảo sự ổn định của chiến lược. Bằng cách tối ưu hóa và hoàn thiện hơn nữa, chiến lược này có khả năng hoạt động tốt hơn trong giao dịch thực tế.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Demo GPT - Moving Average Convergence Divergence", shorttitle="MACD", commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=2) // Set smoothing line to 2
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Date inputs
start_date = input(title="Start Date", defval=timestamp("2018-01-01T00:00:00"))
end_date = input(title="End Date", defval=timestamp("2069-12-31T23:59:59"))
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// Strategy logic
isInDateRange = true
// Calculate the rate of change of the histogram
hist_change = hist - hist[1]
// Anticipate a bullish crossover: histogram is negative, increasing, and approaching zero
anticipate_long = isInDateRange and hist < 0 and hist_change > 0 and hist > hist[1] and hist > hist[2]
// Anticipate an exit (bearish crossover): histogram is positive, decreasing, and approaching zero
anticipate_exit = isInDateRange and hist > 0 and hist_change < 0 and hist < hist[1] and hist < hist[2]
if anticipate_long
strategy.entry("Long", strategy.long)
if anticipate_exit
strategy.close("Long")
// Plotting
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist > hist[1] ? #26A69A : #B2DFDB) : (hist < hist[1] ? #FF5252 : #FFCDD2)))
plot(macd, title="MACD", color=#2962FF)
plot(signal, title="Signal", color=#FF6D00)
// Plotting arrows when anticipating the crossover
plotshape(anticipate_long, title="Long +1", location=location.belowbar, color=color.green, style=shape.arrowup, size=size.tiny, text="Long +1")
plotshape(anticipate_exit, title="Short -1", location=location.abovebar, color=color.red, style=shape.arrowdown, size=size.tiny, text="Short -1")