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.
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ẽ:
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.
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.
BB Band: Khi giá vượt qua đường ray trên của BB Band, đó là tín hiệu bán.
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.
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à:
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.
Ư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:
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
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
Cấu trúc mã là rõ ràng và dễ hiểu và phát triển thứ cấp
Chiến lược này cũng có một số rủi ro:
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.
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ể.
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ố.
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:
Tăng thử nghiệm ngược mẫu để kiểm tra độ bền của các thông số
Điều chỉnh một số thông số để thích nghi với nhiều thị trường hơn
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á
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 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:
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
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
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
Tăng các chiến lược dừng lỗ để kiểm soát rủi ro
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.
Đ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))))