Chiến lược theo dõi xu hướng trung bình động kép


Ngày tạo: 2023-12-21 11:45:35 sửa đổi lần cuối: 2023-12-21 11:45:35
sao chép: 0 Số nhấp chuột: 653
1
tập trung vào
1621
Người theo dõi

Chiến lược theo dõi xu hướng trung bình động kép

Tổng quan

Chiến lược theo dõi xu hướng trung bình di chuyển kép là một chiến lược giao dịch định lượng theo dõi xu hướng giá cổ phiếu. Chiến lược này sử dụng hệ thống trung bình di chuyển hai chỉ số để đánh giá xu hướng giá và kết hợp với cường độ đánh giá xu hướng của chỉ số ADX để nắm bắt xu hướng giá trên đường dài giữa.

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

Chiến lược này chủ yếu dựa trên hệ thống trung bình di chuyển hai chỉ số để xác định xu hướng giá. Chiến lược sử dụng EMA nhanh và chậm với hai tham số khác nhau, EMA1 nhanh phản ứng với sự thay đổi giá nhanh hơn, EMA2 chậm phản ứng với sự thay đổi giá chậm hơn.

Ngoài ra, chiến lược cũng đưa ra các chỉ số ADX để đánh giá cường độ của xu hướng. ADX đánh giá cường độ của xu hướng bằng cách tính toán biến động giá. Khi giá trị ADX tăng, cho thấy xu hướng đang tăng cường; Khi giá trị ADX giảm, cho thấy xu hướng đang suy yếu.

Cụ thể, các quy tắc tạo tín hiệu giao dịch của chiến lược là:

  1. Làm nhiều hơn khi đi qua đường dây chậm trên đường dây nhanh, làm trống khi đi qua đường dây chậm dưới đường dây nhanh
  2. ADX>25 là khoảng trống cho phép

Điều này có thể giúp lọc các tín hiệu không hiệu quả có sức mạnh xu hướng yếu hơn, giúp tăng cường sự ổn định của hệ thống giao dịch.

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

Chiến lược này có một số ưu điểm:

  1. Chụp xu hướng giá dây dài và trungHệ thống trung bình EMA kép có thể xác định hiệu quả xu hướng đường dài của giá, tránh bị nhiễu bởi tiếng ồn thị trường ngắn hạn.

  2. Bộ lọc giả vỡ: Xác định cường độ của xu hướng bằng chỉ số ADX, tránh tổn thất không cần thiết do các khe hở giả xuất hiện gần điểm biến xu hướng.

  3. Không gian tối ưu hóa tham số lớnCác tham số ADX có thể được tối ưu hóa để có hiệu quả giao dịch tốt hơn.

  4. Khả năng thích nghi caoChiến lược này có thể áp dụng cho hầu hết các loại cổ phiếu và các chu kỳ thời gian, và đã được chứng minh trên nhiều thị trường.

  5. Dễ thực hiệnChiến lược này chỉ cần chỉ số trung bình đơn giản, ít tốn kém, dễ lập trình và chi phí thực tế thấp.

Rủi ro chiến lược

Chiến lược này cũng có một số rủi ro, chủ yếu tập trung vào các khía cạnh sau:

  1. Rủi ro đảo ngược xu hướngKhông một chiến lược xu hướng nào có thể đánh giá chính xác được điểm đảo ngược, và sẽ phải chịu tổn thất lớn khi xu hướng thực sự đảo ngược.

  2. Các tham số tối ưu hóa rủi ro quá mứcCác tham số được tối ưu hóa đến mức cực đoan cũng có thể dẫn đến việc các chiến lược được phù hợp quá mức với dữ liệu lịch sử, làm giảm tính ổn định và hiệu quả của chiến lược trên thực tế.

  3. Rủi ro của sự kiện bất ngờSự kiện bất ngờ lớn sẽ phá vỡ mô hình xu hướng giá, trong đó chỉ số trung bình di động sẽ không hoạt động và cần can thiệp bằng tay hoặc thiết lập dừng để kiểm soát tổn thất.

Chúng ta có thể tối ưu hóa các rủi ro như sau:

  1. Thêm thêm các chỉ số để xác định điểm biến đổi giá. Ví dụ: đưa vào khối lượng giao dịch, khối lượng giao dịch sẽ tăng lên khi giá biến đổi.

  2. ADX tham số được nới lỏng một cách thích hợp, đảm bảo cơ hội được nắm bắt ngay khi xu hướng bắt đầu. Các chỉ số phán đoán phụ trợ như MACD cũng có thể được giới thiệu.

  3. Thử nghiệm tập luyện nhiều nhóm đối với các tham số, chọn các tham số có tính ổn định và hiệu quả thực tế. Tránh rủi ro tối ưu hóa quá mức của một tham số.

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

Chiến lược này cũng có một số hướng tối ưu hóa:

  1. Giới thiệu cơ chế dừng lỗThiết lập dừng di động hoặc dừng phần trăm, có thể chủ động dừng khi xu hướng đảo ngược, tránh giữ lỗ quá lớn.

  2. Kết hợp với chỉ số khối lượng giao dịchVí dụ: khối lượng giao dịch, có thể tránh được tín hiệu sai ở điểm biến giá khi khối lượng giao dịch tăng lên.

  3. Các tham số tự thích ứng tối ưu hóa: Cho phép các tham số của chỉ số có thể tự điều chỉnh để phù hợp với sự thay đổi của thị trường trong thời gian thực, thay vì các tham số tĩnh cố định, điều này có thể làm tăng đáng kể sự ổn định của chiến lược.

  4. Giới thiệu về học máy: Sử dụng thuật toán học máy để phân tích một lượng lớn dữ liệu lịch sử, xác định các tham số của moving average và ADX, thậm chí có thể dự đoán xu hướng tương lai của giá. Đây là một hướng phát triển của chiến lược moving average.

  5. Tối ưu hóa xuyên chu kỳCác thiết lập tham số có thể khác nhau trong các chu kỳ giao dịch khác nhau, có thể kiểm tra cấu hình tối ưu cho các tham số trong mỗi chu kỳ.

Tóm tắt

Chiến lược theo dõi xu hướng đường trung bình di chuyển kép là một chiến lược ổn định, ổn định. Chiến lược này nắm bắt xu hướng đường trung bình dài qua hệ thống đường trung bình EMA kép và có chỉ số ADX để lọc tín hiệu, có thể nắm bắt xu hướng giá cổ phiếu một cách hiệu quả và tránh bị nhiễu bởi tiếng ồn thị trường ngắn hạn. Đồng thời, chiến lược này cũng có một số rủi ro, cần tối ưu hóa các tham số kết hợp với phương pháp dừng lỗ, thậm chí có thể giới thiệu thêm các chỉ số hỗ trợ và thuật toán học máy để nâng cao sự ổn định của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing")
len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2")
len3=input(550)
src = close
ema1=ema(src, len)
ema2=ema(ema1, len2)
d=ema1-ema2
zlema=ema1+d

ema21=ema(src, (len/3)*2)
ema22=ema(ema21, (len2/3)*2)
d2=ema21-ema22
zlema2=ema21+d2

ema31=ema(src, len3)
ema32=ema(ema21, len3)
d3=ema31-ema32
zlema3=ema31+d2

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
//ma1 = security(tickerid, "60", vwma(src, len)[1])
//ma2 = security(tickerid, "120", vwma(src, len)[1])
//plot(ma1, linewidth = 2, color = blue, title = "MA")
//plot(ma2, linewidth = 2, color = red, title = "MA2")

// ADX
lenadx = 14
lensig = 14
limadx = 18

up = change(high)
down = -change(low)
trur = rma(tr, lenadx)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur)
sum = plus + minus 
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adx2 = ema(adx, 14)
adx2i = ema(adx2,14)
dadx2 = adx2 - adx2i
zladx2 = adx2 + dadx2
plus2 = ema(plus, 14)
plus2i = ema (plus2, 14)
dplus2 = plus2 - plus2i
zlplus2 = plus2 + dplus2

minus2 = ema(minus, 14)
minus2i = ema (minus2, 14)
dminus2 = minus2 - minus2i
zlminus2 = minus2 + dminus2

vwma = vwma(close, 150)
vwma2 = ema(vwma, 9)
vwma2i = ema(vwma2, 9)
dvwma2 = vwma2 - vwma2i
zlvwma2 = vwma2 + dvwma2


rmax=rma(src, len)
rmax2=rma(rmax, len2)
rmd=rmax-rmax2
zlrmax=rmax+rmd
rmaxz=rma(src, (len/3)*2)
rmaxz2=rma(rmaxz, (len2/3)*2)
rmzd=rmaxz-rmaxz2
zlrmaxz=rmaxz+rmzd
rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime
rmaxcol= zlrmax[1] > zlema[1] ? red:lime


rmazlema3=rma(zlema3, 100)
plot(rmazlema3, color=gray, linewidth=2)
plot(zlema, color=green)
plot(zlema2, color=yellow)
plot(zlema3, color=teal, linewidth=2)
plot(ema2, color=na)
plot(rmax, color=rmaxcol2, linewidth=3)
plot(zlrmax, color=rmaxcol, linewidth=3)


//Trading
size = strategy.position_size
lot = 0.0 
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if zlrmax[1] < zlema[1]
    strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if zlrmax[1] > zlema[1]
    strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))