Chiến lược giao dịch định lượng dựa trên ADX, BB %B, AO và EMA


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

Chiến lược giao dịch định lượng dựa trên ADX, BB %B, AO và EMA

Tổng quan

Chiến lược này được gọi là chiến lược theo dõi động lực bốn yếu tố. Chiến lược tổng hợp sử dụng chỉ số chuyển động đường trung bình ((ADX) để xác định hướng xu hướng, tỷ lệ phần trăm B của Brin để xác định các cổ phiếu tương đối mạnh, đường cân bằng thần kỳ ((AO) để xác định động lượng và chỉ số chuyển động trung bình của các chu kỳ khác nhau để xác định EMA, để theo dõi động thái của giá cổ phiếu, theo dõi hiệu quả của cổ phiếu mạnh, tránh cổ phiếu yếu.

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

Chiến lược này sử dụng bốn chỉ số kỹ thuật khác nhau để xác định thời gian mua và bán. Lý thuyết phán đoán cụ thể như sau:

Điều kiện nhập nhiều đầu: 5 ngày EMA trên 21 ngày EMA, 50 ngày EMA trên 200 ngày EMA, BB % B lớn hơn đường mua quá mức được đặt, AO lớn hơn giá trị tích cực được đặt, ADX lớn hơn giá trị được đặt.

Điều kiện đầu vào trống: 5 ngày EMA vượt qua 21 ngày EMA, 50 ngày EMA vượt qua 200 ngày EMA, BB % B nhỏ hơn so với đường bán tháo được đặt, AO nhỏ hơn so với giá trị âm được đặt, ADX lớn hơn so với giá trị được đặt.

Phân tích lợi thế chiến lược

Chiến lược này kết hợp nhiều chỉ số để xác định hướng xu hướng và sức mạnh tương đối của các cổ phiếu, có thể lọc hiệu quả các đột phá giả. Các ưu điểm cụ thể như sau:

  1. Chỉ số ADX có thể đánh giá hiệu quả sự tồn tại của xu hướng và mức độ của xu hướng, tránh thường xuyên mở các vị trí trong thị trường bất ổn;

  2. Chỉ số BB % B xác định xem một cổ phiếu đang ở mức cao hay thấp, có thể tránh hiệu quả việc theo đuổi đà tăng và giảm;

  3. Chỉ số AO đánh giá liệu có sự hỗ trợ động lực mạnh mẽ khi mua hay không, đảm bảo tính hiệu quả của đột phá;

  4. Các chỉ số EMA kết hợp các chỉ số vàng/đá chết để xác định xu hướng thị trường, tránh mở vị trí ngược.

Nhìn chung, chiến lược này có thể kiểm soát rủi ro giao dịch một cách hiệu quả, theo dõi các cổ phiếu mạnh mẽ trên thị trường.

Phân tích rủi ro

Mặc dù chiến lược này sử dụng nhiều chỉ số để kiểm soát rủi ro, nhưng vẫn có một số rủi ro:

  1. Sử dụng nhiều tổ hợp chỉ số theo dạng chỉ số, nhạy cảm với điều chỉnh tham số, tổ hợp tham số không phù hợp có thể không có hiệu quả.

  2. Quá theo đuổi động lực có thể bỏ lỡ thị trường thực sự thay đổi điểm. Bạn nên kiểm soát đúng chu kỳ nắm giữ và dừng lỗ kịp thời.

  3. Các chỉ số như EMA có tính chậm trễ và có thể không phản ánh kịp thời tác động của sự kiện bất ngờ. Các chỉ số khác nên được phối hợp thích hợp hoặc rút ngắn chu kỳ MA thích hợp.

  4. Các sự kiện lớn bất ngờ có thể gây ra sự phân tán của chỉ số, nên được kết hợp với phân tích cơ bản và có thể tạm thời tắt chiến lược nếu cần thiết.

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

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

  1. Sử dụng các phương pháp như học máy để tìm các tham số tốt nhất.

  2. Thêm các chỉ số xu hướng phán đoán khác, chẳng hạn như CCI, MACD, v.v., để tạo thành một nhóm chỉ số kim loại, tăng độ chính xác phán đoán.

  3. Tham gia chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ.

  4. Đặt thời gian nắm giữ để tránh tham lam.

Tóm tắt

Chiến lược này được gọi là chiến lược theo dõi động lực bốn yếu tố, sử dụng bốn chỉ số để xác định thời gian mua và bán ADX, BB % B, AO và EMA, để theo dõi động lực của các cổ phiếu mạnh. Chiến lược này có thể xác định hiệu quả hướng xu hướng và sức mạnh tương đối của cổ phiếu, kiểm soát rủi ro giao dịch. Bước tiếp theo có thể cải thiện thêm chiến lược bằng cách tối ưu hóa tham số, thêm các chỉ số khác và thiết lập thời gian giữ vị trí.

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

//@version=4

//ADX + BB %B + AO + EMA

strategy("ADX + BB %B + AO + EMA", overlay=true, initial_capital=10000)
take_profit_perc = input(title="Take Profit %", type=input.integer, defval=10, minval=1, maxval=100)
stop_loss_perc = input(title="Stop Loss %", type=input.integer, defval=5, minval=1, maxval=100)
bb_overbought = input(title="BB %B Overbought", type=input.integer, defval=75, minval=1, maxval=100)
bb_oversold = input(title="BB %B Oversold", type=input.integer, defval=25, minval=1, maxval=100)
ao_value = input(title="Awesome Oscillator", type=input.integer, defval=2)
adx_value = input(title="ADX", type=input.integer, defval=15)

startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2018, minval=2008, maxval=2200)

inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

ema5 = ema(close, 5)
ema21 = ema(close, 21)
ema50 = ema(close, 50)
ema200 = ema(close, 200)

//BB %B
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)

//Awesome Oscillator
ao = sma(hl2,5) - sma(hl2,34)

// ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)

long_strategy = ema5>ema21 and ema50>ema200 and bbr>(bb_overbought/100) and ao>ao_value and sig>adx_value
short_strategy = ema5<ema21 and ema50<ema200 and bbr<(bb_oversold/100) and ao<-ao_value and sig>adx_value

plot(ema5, color=color.blue)
plot(ema21, color=color.aqua)
plot(ema50, color=color.purple)
plot(ema200, color=color.red)
bgcolor(color=long_strategy ? color.green : na, transp=80)
bgcolor(color=short_strategy ? color.purple : na, transp=80)
    
if inDateRange and long_strategy
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop=close*(100-stop_loss_perc)/100, limit=close*(100+take_profit_perc)/100)
if inDateRange and short_strategy
    strategy.entry("short", strategy.short)
    strategy.exit("exit", "short", stop=close*(100+stop_loss_perc)/100, limit=close*(100-take_profit_perc)/100)