Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch đột phá Multi-MA

Tác giả:ChaoZhang, Ngày: 2025-01-10 15:27:53
Tags:SMMAZLEMAEMAMASMA

 Adaptive Multi-MA Momentum Breakthrough Trading Strategy

Tổng quan

Đây là một chiến lược giao dịch dựa trên nhiều đường trung bình động và đột phá động lực. Chiến lược kết hợp các chỉ số kỹ thuật như SMMA (Smoothed Moving Average) và ZLEMA (Zero-Lag Exponential Moving Average) để xác định các cơ hội giao dịch bằng cách nắm bắt các tín hiệu chéo giữa giá và đường trung bình động. Chiến lược sử dụng một cơ chế thích nghi điều chỉnh độ nhạy tín hiệu dựa trên sự biến động của thị trường để cải thiện độ chính xác giao dịch.

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

Chiến lược này sử dụng bốn mức trung bình động chính: src (SMMA dựa trên HLC3), hi (SMMA dựa trên cao), lo (SMMA dựa trên thấp) và mi (ZLEMA dựa trên src). Các tín hiệu giao dịch chủ yếu dựa trên các mối quan hệ chéo và vị trí tương đối giữa các mức trung bình động này. Sự kết hợp của nhiều điều kiện tín hiệu đảm bảo độ tin cậy của các tín hiệu giao dịch. Các tín hiệu mua bao gồm bốn sự kết hợp điều kiện khác nhau, và các tín hiệu bán cũng bao gồm bốn sự kết hợp điều kiện khác nhau. Các tín hiệu thoát dựa trên sự chéo giá với mức trung bình mi và các vị trí tương đối giữa các mức trung bình động.

Ưu điểm chiến lược

  1. Cơ chế xác nhận nhiều tín hiệu cải thiện độ chính xác giao dịch
  2. Các tính năng thích nghi cho phép chiến lược thích nghi với môi trường thị trường khác nhau
  3. Sử dụng SMMA và ZLEMA làm giảm tác động của tín hiệu sai
  4. Hệ thống tín hiệu lớp cung cấp nhiều cơ hội giao dịch hơn
  5. Các điều kiện thoát rõ ràng giúp kiểm soát rủi ro

Rủi ro chiến lược

  1. Crossover trung bình động có thể tạo ra sự chậm trễ, ảnh hưởng đến thời gian nhập cảnh
  2. Nhiều điều kiện có thể bỏ lỡ một số cơ hội giao dịch quan trọng
  3. Có thể tạo ra tín hiệu sai quá mức trong thị trường hỗn loạn
  4. Cài đặt tham số không chính xác có thể ảnh hưởng đến hiệu suất chiến lược
  5. Cần phải xem xét tác động của chi phí giao dịch đối với lợi nhuận chiến lược

Hướng dẫn tối ưu hóa chiến lược

  1. Thiết lập các bộ lọc biến động để điều chỉnh các tham số chiến lược trong thời gian biến động cao
  2. Thêm phân tích âm lượng để cải thiện độ tin cậy tín hiệu
  3. Tối ưu hóa cơ chế thích nghi của các thông số trung bình động
  4. Thêm các chỉ số sức mạnh xu hướng để cải thiện độ chính xác đánh giá xu hướng
  5. Phát triển các cơ chế dừng lỗ năng động để tăng cường kiểm soát rủi ro

Tóm lại

Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh thông qua sự kết hợp của nhiều đường trung bình động và các chỉ số động lực. Các tính năng thích nghi của chiến lược và nhiều cơ chế xác nhận cải thiện độ tin cậy giao dịch. Thông qua tối ưu hóa và tinh chỉnh, chiến lược có tiềm năng duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Các nhà giao dịch được khuyên nên tiến hành kiểm tra kỹ lưỡng và tối ưu hóa tham số trước khi giao dịch trực tiếp.


/*backtest
start: 2024-01-10 00:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6

//study("Limit order strategy", overlay=true)
strategy('Limit order strategy', overlay = true)

lengthMA = input(1)
lengthmi = input(14)
lengthhigh = input(14)
lengthlow = input(14)

calc_smma(src, len) =>
    smma = 0.0
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d


src = calc_smma(hlc3, lengthMA)
hi = calc_smma(high, lengthhigh)
lo = calc_smma(low, lengthlow)
mi = calc_zlema(src, lengthmi)

plot(src, color = color.new(#FF1493, 0), linewidth = 2, title = 'src')
plot(hi, color = color.new(#7CFC00, 0), linewidth = 2, title = 'hi')
plot(lo, color = color.new(#FF0000, 0), linewidth = 2, title = 'lo')
plot(mi, color = color.new(#00FFFF, 0), linewidth = 2, title = 'mi')


//strategy.order("buy", true, 1, stop = na, when = openbuy) // buy by market if current open great then previous high
//strategy.order("sell", false, 1, stop = na, when = opensell) // sell by market if current open less then previous low
//if src >= mi and src[1] <= mi[1] and src[1] <= lo[1]
//	strategy.entry("buy 1", strategy.long, qty = 15)
sigorderbuy1 = src > mi and src[1] < mi[1] and src < lo and mi < lo
sigorderbuy2 = src > lo and src[1] < lo[1] and mi < lo
sigorderbuy3 = src > hi and src[1] < hi[1] and mi < hi
sigorderbuy4 = src > mi and src[1] < mi[1] and src > hi and mi > hi
//sigorderbuy5 = mi > hi and  src > hi  and src > mi and src[1] < mi[1] 
//sigorderbuy6 = mi < hi and src > hi and src[1] < hi[1]
sigclosebuy = src < mi and src[1] > mi[1] or mi < lo and src < lo and src[1] > lo[1]

sigordersell1 = src < mi and src[1] > mi[1] and src > hi and mi > hi
sigordersell2 = src < hi and src[1] > hi[1] and mi > hi
sigordersell3 = src < lo and src[1] > lo[1] and mi > lo
sigordersell4 = src < mi and src[1] > mi[1] and src < lo and mi < lo
//sigordersell5 = mi < lo and  src < lo  and src < mi and src[1] > mi[1] 
//sigordersell6 = mi > lo and src < lo and src[1] > lo[1]
sigclosesell = src > mi and src[1] < mi[1] or mi > hi and src > hi and src[1] < hi[1]

plot(sigorderbuy1 ? 1 : 0, 'sigorderbuy1')
plot(sigorderbuy2 ? 1 : 0, 'sigorderbuy2')
plot(sigorderbuy3 ? 1 : 0, 'sigorderbuy3')
plot(sigorderbuy4 ? 1 : 0, 'sigorderbuy4')
//plot(sigorderbuy5 ? 1 : 0,"sigorderbuy5") 
//plot(sigorderbuy6 ? 1 : 0,"sigorderbuy6") 

plot(sigordersell1 ? 1 : 0, 'sigordersell1')
plot(sigordersell2 ? 1 : 0, 'sigordersell2')
plot(sigordersell3 ? 1 : 0, 'sigordersell3')
plot(sigordersell4 ? 1 : 0, 'sigordersell4')
//plot(sigordersell5 ? 1 : 0,"sigordersell5") 
//plot(sigordersell6 ? 1 : 0,"sigordersell6")

plot(sigclosebuy ? 1 : 0, 'sigclosebuy')
plot(sigclosesell ? 1 : 0, 'sigclosesell')


openbuy = sigorderbuy1 or sigorderbuy2 or sigorderbuy3 or sigorderbuy4 // or sigorderbuy5 or sigorderbuy6
opensell = sigordersell1 or sigordersell2 or sigordersell3 or sigordersell4 //or sigordersell5 or sigordersell6
openclosebuy = sigclosebuy
openclosesell = sigclosesell

alertcondition(condition = openbuy, title = 'sigorderbuy all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Buy {{ticker}} sig_b1={{plot("sigorderbuy1")}} sig_b2={{plot("sigorderbuy2")}} sig_b3={{plot("sigorderbuy3")}} sig_b4={{plot("sigorderbuy4")}}"}')
alertcondition(condition = opensell, title = 'sigordersell all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Sell {{ticker}} sig_s1={{plot("sigordersell1")}} sig_ss={{plot("sigordersell2")}} sig_s3={{plot("sigordersell3")}} sig_s4={{plot("sigordersell4")}} sig_s5={{plot("sigordersell5")}} sig_61={{plot("sigordersell6")}}"}')

alertcondition(condition = sigclosebuy, title = 'Close buy', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=short"}')
alertcondition(condition = sigclosesell, title = 'Close sell', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=long"}')

if sigorderbuy1
    strategy.order('Buy 1', strategy.long, 1)
if sigorderbuy2
    strategy.order('Buy 2', strategy.long, 1)
if sigorderbuy3
    strategy.order('Buy 3', strategy.long, 1)
if sigorderbuy4
    strategy.order('Buy 4', strategy.long, 1)


if sigordersell1
    strategy.order('sell 1', strategy.short, 1)
if sigordersell2
    strategy.order('sell 2', strategy.short, 1)
if sigordersell3
    strategy.order('sell 3', strategy.short, 1)
if sigordersell4
    strategy.order('sell 4', strategy.short, 1)
//strategy.order("sell 5", false, 1, when = sigordersell5)
//strategy.order("sell 6", false, 1, when = sigordersell6)


Có liên quan

Thêm nữa