Chiến lược giao dịch đột phá trung bình động thích ứng nhiều lần

SMMA ZLEMA EMA MA SMA
Ngày tạo: 2025-01-10 15:27:53 sửa đổi lần cuối: 2025-01-10 15:27:53
sao chép: 0 Số nhấp chuột: 433
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đột phá trung bình động thích ứng nhiều lần

Tổng quan

Đây là chiến lược giao dịch dựa trên nhiều đường trung bình động và sự đột phá về động lượng. Chiến lược này kết hợp nhiều chỉ báo kỹ thuật như SMMA (đường trung bình động làm mịn) và ZLEMA (đường trung bình động hàm mũ không có độ trễ) để xác định cơ hội giao dịch bằng cách nắm bắt các tín hiệu giao nhau giữa giá và đường trung bình động. Chiến lược này áp dụng cơ chế thích ứng có thể điều chỉnh độ nhạy của tín hiệu theo biến động của thị trường và cải thiện độ chính xác của giao dịch.

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

Chiến lược này sử dụng bốn đường 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 mối quan hệ giao nhau và vị trí giữa các đường 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 tín hiệu giao dịch. Tín hiệu mua bao gồm bốn tổ hợp điều kiện khác nhau và tín hiệu bán cũng bao gồm bốn tổ hợp điều kiện khác nhau. Tín hiệu đóng cửa dựa trên sự giao nhau giữa giá và đường trung bình động mi và mối quan hệ vị trí giữa các đường trung bình động.

Lợi thế chiến lược

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

Rủi ro chiến lược

  1. Đường trung bình động giao nhau có thể gây ra độ trễ, ảnh hưởng đến thời điểm vào lệ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 quá nhiều tín hiệu sai trong một thị trường biến động
  4. Cài đặt tham số không phù hợp có thể ảnh hưởng đến hiệu suất chiến lược
  5. Cần xem xét tác động của chi phí giao dịch đến lợi nhuận chiến lược

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

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

Tóm tắt

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ỉ báo động lượng. Bản chất thích ứng của chiến lược và cơ chế xác nhận nhiều lần giúp cải thiện độ tin cậy của giao dịch. Thông qua việc tối ưu hóa và cải tiến, chiến lược này dự kiến ​​sẽ duy trì hiệu suất ổn định trong nhiều môi trường thị trường khác nhau. Các nhà giao dịch được khuyến nghị nên tiến hành kiểm tra ngược và tối ưu hóa tham số đầy đủ trước khi sử dụng theo thời gian thực.

Mã nguồn chiến lược
/*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)