Aroon + Williams + MA + BB + ADX Chiến lược đa chỉ số mạnh mẽ

Tác giả:ChaoZhang, Ngày: 2024-01-19 14:55:03
Tags:

img

Tổng quan

Chiến lược này kết hợp nhiều chỉ số mạnh với các giai đoạn khác nhau như Aroon, MA, BB, Williams, %R, ADX để tạo thành một hệ thống chỉ số vị trí mở đa chiều mạnh mẽ có thể mở các vị trí hiệu quả khi xu hướng rõ ràng.

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

Chiến lược chủ yếu sử dụng sự kết hợp của các chỉ số sau đây để tạo ra các tín hiệu mở đầu mạnh mẽ:

  1. Chỉ số Aroon: Tính toán giá cao nhất và thấp nhất trong một khoảng thời gian nhất định để tạo thành một chỉ số dao động.

  2. MA: Tính toán đường chéo của MA ngắn hạn và dài hạn để xác định các điểm chuyển đổi của xu hướng.

  3. BB Band: Khi giá vượt qua đường ray trên của BB Band, đó là tín hiệu bán.

  4. Chỉ số Williams %R: Tạo sự khác biệt trong các khu vực mua quá mức và bán quá mức như là tín hiệu mở đầu.

  5. ADX: đánh giá sức mạnh của xu hướng. ADX trên một vị trí nhất định tạo ra tín hiệu mở.

Các chỉ số trên, với các tham số độ dài chu kỳ khác nhau, tạo thành một hệ thống đánh giá đa chiều có thể tạo ra các tín hiệu mở đầu mạnh mẽ khi xu hướng rõ ràng.

Cụ thể, các điều kiện mua là:

  1. Khi MA hình thành một thập tự vàng
  2. Khi Williams % R thấp hơn -99
  3. Khi ADX cao hơn 14

Khi 3 trong số 5 điều kiện mua được đáp ứng, một tín hiệu mua mạnh được tạo ra.

Vì vậy, chiến lược này có thể tạo ra tín hiệu mở đầu mạnh mẽ có độ chắc chắn cao khi xu hướng là rõ ràng, thông qua sự kết hợp của các chỉ số khác nhau.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là sự kết hợp đa chiều của các tín hiệu chỉ số, làm giảm đáng kể khả năng các tín hiệu sai do một chỉ số duy nhất gây ra, do đó có thể tạo ra các tín hiệu mở đầu chất lượng cao khi xu hướng rõ ràng.

Những lợi thế khác bao gồm:

  1. Các thông số có thể được điều chỉnh để thích nghi với các đặc điểm thị trường khác nhau

  2. Sự kết hợp của nhiều chu kỳ thời gian được thực hiện để cải thiện độ chính xác của phán đoán

  3. Cấu trúc mã là rõ ràng và dễ hiểu và phát triển thứ cấp

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Mặc dù sự kết hợp của nhiều chỉ số có thể cải thiện chất lượng đánh giá, nó cũng làm tăng sự phức tạp của chiến lược và mở rộng nguy cơ tối ưu hóa quá mức.

  2. Các thiết lập tham số không hoàn hảo 100% và có thể thất bại trong điều kiện thị trường cụ thể.

  3. Vẫn còn chỗ để tối ưu hóa trong việc kết hợp các phương pháp chỉ số.

  4. Những cơ hội điều chỉnh ngắn hạn có thể bị bỏ lỡ.

Các giải pháp tương ứng:

  1. Tăng thử nghiệm ngược mẫu để kiểm tra độ bền của các thông số

  2. Điều chỉnh một số thông số để thích nghi với nhiều thị trường hơn

  3. Tối ưu hóa phương pháp tích hợp các chỉ số để cải thiện chất lượng đánh giá

  4. Tóm tắt một số tham số chỉ số để tăng số liệu về điều chỉnh ngắn hạn

Hướng dẫn tối ưu hóa

Hướng tối ưu hóa chính của chiến lược này là tối ưu hóa phương pháp tích hợp chỉ số, chủ yếu bao gồm:

  1. Thêm nhiều loại chỉ số khác nhau để tạo thành một rừng chỉ số để tiếp tục cải thiện độ chính xác phán đoán

  2. Tối ưu hóa cài đặt tham số chỉ số để tự động thích nghi với những thay đổi trên thị trường

  3. Sử dụng máy học và các phương pháp khác để tự động tìm kiếm các giải pháp tích hợp chỉ số tối ưu

  4. Tăng các chiến lược dừng lỗ để kiểm soát rủi ro

  5. Kết hợp các chỉ số tâm lý, đánh giá nhiệt độ thị trường và điều chỉnh các thông số một cách năng động

Vẫn còn rất nhiều chỗ để cải thiện chất lượng đánh giá và độ bền của chiến lược này bằng cách tích hợp nhiều chỉ số hơn, tối ưu hóa các tham số và các chương trình tích hợp tự động.

Tóm lại

Điểm nổi bật nhất của chiến lược này là sự tích hợp khoa học của nhiều chỉ số để tạo thành một tín hiệu mở mạnh mẽ hoạt động đáng kể khi xu hướng là rõ ràng. Có rất nhiều không gian tối ưu hóa trong các phương pháp tích hợp của chiến lược này. Bằng cách giới thiệu nhiều chỉ số và tối ưu hóa thông minh các thông số và phương pháp tích hợp, chiến lược này có thể trở thành một chiến lược giao dịch định lượng rất mạnh.


/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Aroon+Williams+MA2+ADX+Aroon Str.", shorttitle="Aroon+Williams+MA2+ADX+Aroon Str.", overlay=true)
//https://cafe.naver.com/watchbot/1945
//<<빙썸 매각 기념>> 바이낸스 이오스 복합지표	

//Aroon_1
length_1 = input(264, minval=1, title="Length Aroon_1")
upper_1 = 100 * (highestbars(high, length_1+1) + length_1)/length_1
lower_1 = 100 * (lowestbars(low, length_1+1) + length_1)/length_1
midp_1 = 0
oscillator_1 = upper_1 - lower_1
//osc_1 = plot(oscillator_1, color=red)

//Aroon_2
length_2 = input(72, minval=1, title="Length Aroon_2")
upper_2 = 100 * (highestbars(high, length_2+1) + length_2)/length_2
lower_2 = 100 * (lowestbars(low, length_2+1) + length_2)/length_2
midp_2 = 0
oscillator_2 = upper_2 - lower_2
//osc_2 = plot(oscillator_2, color=red)

//Aroon_3
length_3 = input(137, minval=1, title="Length Aroon_3")
upper_3 = 100 * (highestbars(high, length_3+1) + length_3)/length_3
lower_3 = 100 * (lowestbars(low, length_3+1) + length_3)/length_3
midp_3 = 0
oscillator_3 = upper_3 - lower_3
//osc_3 = plot(oscillator_3, color=red)

//Aroon_4
length_4 = input(62, minval=1, title="Length Aroon_4")
upper_4 = 100 * (highestbars(high, length_4+1) + length_4)/length_4
lower_4 = 100 * (lowestbars(low, length_4+1) + length_4)/length_4
midp_4 = 0
oscillator_4 = upper_4 - lower_4
//osc_4 = plot(oscillator_4, color=red)

//Ma double
short_ma_1 = sma(close, 9)
long_ma_1 = sma(close, 21)
// plot(short_ma_1, color = red)
// plot(long_ma_1, color = green)
// plot(cross(short_ma_1, long_ma_1) ? short_ma_1 : na, style = cross, linewidth = 4)

short_ma_2 = sma(close, 9)
long_ma_2 = sma(close, 21)
// plot(short_ma_2, color = red)
// plot(long_ma_2, color = green)
plot(cross(short_ma_2, long_ma_2) ? short_ma_2 : na, transp= 100, title = "ma cross_2", style = cross, linewidth = 4)

//BB
length_bb = input(270, minval=1, title="BB length")
src_bb = input(close, title="Source")
mult_bb = input(2.0, minval=0.001, maxval=50, title="BB mult")
basis_bb = sma(src_bb, length_bb)
dev_bb = mult_bb * stdev(src_bb, length_bb)
upper_bb = basis_bb + dev_bb
lower_bb = basis_bb - dev_bb
// plot(basis_bb, color=red)
// p1 = plot(upper_bb, color=blue)
// p2 = plot(lower_bb, color=blue)
// fill(p1, p2)

//Williams
length_wil = input(130, minval=1, title="Length Williams %R")
upper_wil = highest(length_wil)
lower_wil = lowest(length_wil)
out_wil = 100 * (close - upper_wil) / (upper_wil - lower_wil)
// plot(out_wil)
// band1 = hline(-20)
// band0 = hline(-80)
// fill(band1, band0)



//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(145, title="DI Length")
dirmov(len) =>
	up_adx = change(high)
	down_adx = -change(low)
	plusDM = na(up_adx) ? na : (up_adx > down_adx and up_adx > 0 ? up_adx : 0)
    minusDM = na(down_adx) ? na : (down_adx > up_adx and down_adx > 0 ? down_adx : 0)
	truerange = rma(tr, len)
	plus_adx = fixnan(100 * rma(plusDM, len) / truerange)
	minus_adx = fixnan(100 * rma(minusDM, len) / truerange)
	[plus_adx, minus_adx]

adx(dilen, adxlen) =>
	[plus_adx, minus_adx] = dirmov(dilen)
	sum_adx = plus_adx + minus_adx
	adx = 100 * rma(abs(plus_adx - minus_adx) / (sum_adx == 0 ? 1 : sum_adx), adxlen)

sig_adx = adx(dilen, adxlen)

// plot(sig_adx, color=red, title="ADX")


//ADX 2
adxlen_2 = input(14, title="ADX Smoothing")
dilen_2 = input(150, title="DI Length")
dirmov_2(len) =>
	up_adx_2 = change(high)
	down_adx_2 = -change(low)
	plusDM_2 = na(up_adx_2) ? na : (up_adx_2 > down_adx_2 and up_adx_2 > 0 ? up_adx_2 : 0)
    minusDM_2 = na(down_adx_2) ? na : (down_adx_2 > up_adx_2 and down_adx_2 > 0 ? down_adx_2 : 0)
	truerange_2 = rma(tr, len)
	plus_adx_2 = fixnan(100 * rma(plusDM_2, len) / truerange_2)
	minus_adx_2 = fixnan(100 * rma(minusDM_2, len) / truerange_2)
	[plus_adx_2, minus_adx_2]

adx_2(dilen_2, adxlen_2) =>
	[plus_adx_2, minus_adx_2] = dirmov_2(dilen_2)
	sum_adx_2 = plus_adx_2 + minus_adx_2
	adx_2 = 100 * rma(abs(plus_adx_2 - minus_adx_2) / (sum_adx_2 == 0 ? 1 : sum_adx_2), adxlen_2)

sig_adx_2 = adx(dilen_2, adxlen_2)

// plot(sig_adx_2, color=red, title="ADX_2")

//Input Position
//buy position
pos_aroon1 = input(-85, title="Aroon_1 Position Index_Down")
pos_madouble1_short = input(117, title="ma double_1 wma_Short")
pos_madouble1_long =  input(86, title="ma double_1 sma_Long")
pos_wil = input(-99, title="Williams Position Index_Down")
pos_adx= input(14, title="ADX Position Index_Up")
pos_aroon2 = input(-39, title="Aroon_2 Position Index_Up")

//sell position
pos_bb = input(120, title="BB Position Index_Up")
pos_aroon_3 = input(99, title="Aroon_3 Position Index_Up")
pos_madouble2_short= input(88, title="ma double_2 ema_Short")
pos_madouble2_long= input(96, title="ma double_2 sma_Long")
pos_adx_2= input(9, title="ADX_2 Position Index_Up")
pos_aroon_4 = input(35, title="Aroon_4 Position Index_Down")

//Condition
longCondition_aroon_1 = (oscillator_1 <= pos_aroon1)
longCondition_ma2 = (pos_madouble1_short > pos_madouble1_long)
longCondition_wil = (out_wil <= pos_wil)
longCondition_adx = (sig_adx >= pos_adx)
longCondition_aroon_2 = (oscillator_2 >= pos_aroon2)

shortCondition_bb = (close > basis_bb)
shortCondition_aroon_3 = (oscillator_3 >= pos_aroon_3)
shortCondition_ma2 = (pos_madouble2_short < pos_madouble2_long)
shortCondition_adx = (sig_adx_2 >= pos_adx_2)
shortCondition_aroon_4 = (oscillator_4 <= pos_aroon_4)

vl_aroon_1 = 0
vl_ma2 = 0
vl_wil = 0
vl_adx = 0
vl_aroon_2 = 0

if longCondition_aroon_1
    vl_aroon_1 := 1
    
if longCondition_ma2
    vl_ma2 := 3

if longCondition_wil
    vl_wil := 1
    
if longCondition_adx
    vl_adx := -1

if longCondition_aroon_2
    vl_aroon_2 := -1
	

vs_bb = 0
vs_aroon_3 = 0
vs_ma2 = 0
vs_adx = 0
vs_aroon_4 = 0

if shortCondition_bb
    vs_bb := 1

if shortCondition_aroon_3
    vs_aroon_3 := 1
    
if shortCondition_ma2
    vs_ma2 := 3

if shortCondition_adx
    vs_adx := -2

if shortCondition_aroon_4
    vs_aroon_4 := -1

// plotshape(vl_aroon_1, title= "vl_aroon_1", location=location.belowbar, color=green, text="vl_aroon_1")
// plotshape(vl_ma2, title= "vl_ma2", location=location.belowbar, color=green, text="\nvl_ma2")
// plotshape(vl_wil, title= "vl_wil", location=location.belowbar, color=green, text="\n\nvl_wil")
// plotshape(vl_adx, title= "vl_adx", location=location.belowbar, color=green, text="\n\n\nvl_adx")
// plotshape(vl_aroon_2, title= "vl_aroon_2", location=location.belowbar, color=green, text="\n\n\n\nvl_aroon_2")

// plotshape(vs_bb, title= "vs_bb", location=location.abovebar, color=orange, text="vs_bb")
// plotshape(vs_aroon_3, title= "vs_aroon_3", location=location.abovebar, color=orange, text="vs_aroon_3\n")
// plotshape(vs_ma2, title= "vs_ma2", location=location.abovebar, color=orange, text="vs_ma2\n\n")
// plotshape(vs_adx, title= "vs_adx", location=location.abovebar, color=orange, text="vs_adx\n\n\n")
// plotshape(vs_aroon_4, title= "vs_aroon_4", location=location.abovebar, color=orange, text="vs_aroon_4\n\n\n\n")

longCondition = (vl_aroon_1 + vl_ma2 + vl_wil + vl_adx + vl_aroon_2) >= 3 ? true : na
shortCondition = (vs_bb + vs_aroon_3 + vs_ma2 + vs_adx + vs_aroon_4) >= 3 ? true : na

buy = longCondition == 1 ? longCondition : na
sell = shortCondition == 1? shortCondition : na

// plotshape(buy, title= "buy", location=location.bottom, color=green, text="buy")
// plotshape(sell, title= "sell", location=location.top, color=orange, text="sell")


// === BACKTEST RANGE ===
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2018, title = "To Year", minval = 2014)

strategy.entry("L", strategy.long, when=(buy))
strategy.close("L", when=(sell))
// strategy.entry("S", strategy.short, when=(sell and (time >= timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time <= timestamp(ToYear, ToMonth, ToDay, 23, 59))))
// strategy.close("S", when=(buy and (time <= timestamp(ToYear, ToMonth, ToDay, 23, 59))))

Thêm nữa