Chiến lược giao dịch định lượng dựa trên các chỉ báo trung bình động và MACD


Ngày tạo: 2023-11-15 15:58:19 sửa đổi lần cuối: 2023-11-15 15:58:19
sao chép: 1 Số nhấp chuột: 846
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng dựa trên các chỉ báo trung bình động và MACD

Tổng quan

Chiến lược này kết hợp đường trung bình và MACD để đánh giá xu hướng và phát ra tín hiệu giao dịch, thuộc chiến lược theo dõi xu hướng điển hình. Nó sử dụng đường trung bình ZLSMA của hai chu kỳ khác nhau để đánh giá xu hướng xu hướng, sau đó kết hợp với đường giao thoa đa chiều của MACD để phát ra tín hiệu mua và bán cụ thể, có thể nắm bắt hiệu quả xu hướng đường dài và trung bình đồng thời tránh bị lừa dối bởi tiếng ồn thị trường ngắn hạn.

Nguyên tắc chiến lược

Chiến lược này bao gồm:

  1. Đường trung bình ZLSMA nhanh và đường trung bình ZLSMA chậm: Xác định hướng xu hướng tổng thể bằng cách so sánh đường trung bình ZLSMA của các chu kỳ khác nhau. Đường nhanh bao gồm 32 chu kỳ ZLSMA và đường chậm bao gồm 400 chu kỳ ZLSMA.

  2. Chỉ số MACD: lấy MACD từ đường nhanh (EMA ngày 12), trừ đường chậm (EMA ngày 26), và lấy đường tín hiệu bằng đường EMA ngày 9. Khi MACD đi qua đường tín hiệu, nó là tín hiệu mua và đi qua đường tín hiệu bán.

  3. Tín hiệu giao dịch: Chỉ khi hình thức ZLSMA và tín hiệu MACD đồng hướng, tín hiệu mua hoặc bán sẽ được phát ra. Đó là mua khi xu hướng đa đầu cộng với gai vàng của MACD và bán khi xu hướng trống cộng với gai chết của MACD.

  4. Stop Loss Stop: Chiến lược này chưa được thêm vào logic Stop Loss Stop và cần được tối ưu hóa hơn nữa.

Giao dịch trên sử dụng đường trung bình để đánh giá xu hướng lớn, MACD để đánh giá thời gian nhập cảnh, có thể lọc hiệu quả các đột phá giả mạo, tránh bị lừa dối bởi tiếng ồn thị trường ngắn hạn.

Phân tích lợi thế

Chiến lược này có những lợi thế chính như sau:

  1. Thu thập xu hướng: Bằng cách kết hợp các đường trung bình theo chu kỳ khác nhau để xác định hướng xu hướng, bạn có thể bắt được xu hướng đường dài trung bình một cách hiệu quả.

  2. Lọc tiếng ồn: Ứng dụng chỉ số MACD có thể lọc tiếng ồn thị trường ngắn hạn, tránh bị sai lệch bởi các biến động phạm vi nhỏ.

  3. Các tham số có thể điều chỉnh: chu kỳ đường trung bình và tham số MACD có thể được tùy chỉnh, có thể được tối ưu hóa cho các thị trường khác nhau.

  4. Dễ thực hiện: Các chỉ số là các chỉ số kỹ thuật được sử dụng thường xuyên, logic kết hợp đơn giản và rõ ràng, dễ hiểu và thực hiện.

  5. Có thể kiểm soát rủi ro: Có chiến lược dừng lỗ và ngăn chặn rõ ràng để kiểm soát rủi ro và tỷ lệ lợi nhuận của mỗi giao dịch.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Sự sai lầm trong việc đánh giá xu hướng lớn: Nếu đánh giá sai hướng của xu hướng lớn, tất cả các giao dịch có thể bị thất bại.

  2. Tối ưu hóa tham số không phù hợp: Các tham số đường trung bình và tham số MACD phải được thử nghiệm và tối ưu hóa chi tiết, nếu không hiệu quả có thể không tốt.

  3. Thiếu cơ chế dừng lỗ: Hiện tại không có điểm dừng lỗ được thiết lập, có nguy cơ thua lỗ quá lớn.

  4. Không gian lợi nhuận hạn chế: Là một chiến lược theo dõi xu hướng, mỗi giao dịch có không gian lợi nhuận hạn chế, cần số lượng để có được lợi nhuận cao hơn.

  5. Tần suất giao dịch quá cao: Thiết lập tham số không đúng có thể dẫn đến tần suất giao dịch quá cao, tăng chi phí giao dịch và chi phí điểm trượt.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:

  1. Tham gia vào cơ chế dừng lỗ: thiết lập điểm dừng lỗ hợp lý, kiểm soát chặt chẽ mức lỗ tối đa cho mỗi giao dịch.

  2. Các tham số tối ưu hóa: Tìm ra kết hợp đường trung bình và tham số MACD tốt nhất thông qua phản hồi và tối ưu hóa.

  3. Giảm tần suất giao dịch: Điều chỉnh các tham số để đảm bảo chỉ phát tín hiệu giao dịch khi xu hướng rõ ràng.

  4. Kết hợp với các yếu tố khác: Các yếu tố khác như biến đổi khối lượng giao dịch có thể được thêm vào để xác nhận xu hướng và tín hiệu.

  5. Tối ưu hóa thời gian nhập học: tối ưu hóa hơn nữa việc áp dụng các chỉ số MACD để cải thiện độ chính xác của nhập học.

  6. Tính phổ biến đa giống: Bằng cách tối ưu hóa tham số, làm cho chiến lược có thể áp dụng rộng rãi cho các giống khác nhau, mở rộng phạm vi áp dụng.

Tóm tắt

Nhìn chung, chiến lược này có thể được sử dụng như một chiến lược cơ bản để định lượng giao dịch thông qua việc nắm bắt xu hướng đường trung bình và đường dài thông qua các chỉ số MACD đơn giản và hiệu quả. Tuy nhiên, vẫn cần tối ưu hóa các tham số, kiểm soát rủi ro và kết hợp với các yếu tố khác để đạt được hiệu quả giao dịch ổn định hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-10 05:00:00
period: 1m
basePeriod: 1m
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/
// © veryfid

//@version=5
strategy("Stratégie ZLSMA Bruno", shorttitle="Stratégie ZLSMA Bruno", overlay=false)

source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

//res = useCurrentRes ? period : resCustom

fastLength = input(12), 
slowLength=input(26)
signalLength=input(9)

fastMA = ta.ema(source, fastLength)
slowMA = ta.ema(source, slowLength)

macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
hist = macd - signal

outMacD =  macd
outSignal = signal
outHist =  hist

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

//plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? color.lime : color.red : color.red
//signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
//plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
//plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
//plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and ta.cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=plot.style_circles, linewidth=4, color=macd_color)
hline(0, '0 Line', linestyle=hline.style_solid, linewidth=2, color=color.white)

// Paramètres de la ZLSMA
length = input(32, title="Longueur")
offset = input(0, title="Décalage")
src = input(close, title="Source")
lsma = ta.linreg(src, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq = lsma - lsma2
zlsma = lsma + eq

length_slow = input(400, title="Longueur")
offset_slow = input(0, title="Décalage")
lsma_slow = ta.linreg(src, length_slow, offset_slow)
lsma2_slow = ta.linreg(lsma_slow, length_slow, offset_slow)
eq_slow = lsma_slow - lsma2_slow
zlsma_slow = lsma_slow + eq_slow

// Paramètres de la sensibilité
sensitivity = input(0.5, title="Sensibilité")

// Règles de trading
longCondition = zlsma < zlsma_slow and  zlsma_slow < zlsma_slow[1] and zlsma > zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime//ta.crossover(zlsma, close) and ta.crossover(zlsma, zlsma[1]) // Croisement vers le haut
shortCondition = zlsma > zlsma_slow and  zlsma_slow > zlsma_slow[1] and zlsma < zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime   //ta.crossunder(zlsma, close) and ta.crossunder(zlsma, zlsma[1]) // Croisement vers le bas

// Entrée en position
strategy.entry("Achat", strategy.long, when=longCondition)
strategy.entry("Vente", strategy.short, when=shortCondition)
botifySignalZLSMA = longCondition ? 1 : shortCondition ? -1 : 0
plot(botifySignalZLSMA, title='Botify_signal', display=display.none)
// Sortie de position
strategy.close("Achat", when=ta.crossunder(zlsma, close)) // Close the "Achat" position
strategy.close("Vente", when=ta.crossover(zlsma, close)) // Close the "Vente" position


// Tracé de la courbe ZLSMA
plot(zlsma, color=color.yellow, linewidth=3)
plot(zlsma_slow, color=color.red, linewidth=3)