
Chiến lược này là một chiến lược giao dịch tự động dựa trên các chỉ số kỹ thuật MACD với hai đường trung bình di chuyển chéo. Nó sử dụng các tín hiệu chéo đường nhanh và chậm của chỉ số MACD để xác định hướng xu hướng và theo dõi xu hướng.
Chiến lược này đầu tiên tính ba đường cong của MACD: đường nhanh, đường chậm và đường chênh lệch. Đường nhanh là đường trung bình di chuyển nhanh hơn trong một chu kỳ nhất định, đường chậm là đường trung bình di chuyển dài hơn.
Chiến lược này sử dụng nguyên tắc này để thực hiện nhiều hơn khi giao dịch vàng và bán khi giao dịch vàng chết; hoặc làm trống khi giao dịch vàng và bán khi giao dịch vàng chết, để thực hiện xu hướng theo dõi tự động. Đồng thời, chiến lược này cũng đánh giá giá trị tuyệt đối của đường MACD là dương tính và âm tính, tránh tín hiệu giả, đảm bảo thực sự nắm bắt các bước ngoặt xu hướng.
Phương pháp giải quyết rủi ro:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Kết hợp với các chỉ số khác để xác nhận tín hiệu, chẳng hạn như chỉ số KDJ, chỉ số Brin và các chỉ số khác, để lọc tín hiệu giả
Thay đổi cơ chế vào sân, chẳng hạn như thêm bộ lọc đột phá, tránh dự kiến vào sân quá sớm hoặc quá muộn
Cài đặt tham số tối ưu hóa, điều chỉnh chu kỳ đường nhanh và đường chậm theo chu kỳ khác nhau và môi trường thị trường để phù hợp với thị trường
Tham gia chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ
Có thể mở rộng sang các loại khác, chẳng hạn như ngoại hối, tiền kỹ thuật số.
Chiến lược theo dõi xu hướng MACD chéo hai đường trung bình di chuyển, sử dụng chỉ số MACD để xác định hướng xu hướng, kết hợp với tín hiệu lọc chéo đường chậm và nhanh, có thể nắm bắt hiệu quả xu hướng, tự động theo dõi xu hướng. Ưu điểm của chiến lược là xác định xu hướng chính xác, điều chỉnh tham số linh hoạt, có thể được tối ưu hóa theo môi trường thị trường. Cần chú ý kiểm soát rủi ro, tránh phát sinh tín hiệu sai.
/*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")