Strategi ini menggabungkan beberapa penunjuk kuat dengan tempoh yang berbeza seperti Aroon, MA, BB, Williams, %R, ADX untuk membentuk sistem penunjuk kedudukan terbuka berbilang dimensi yang kuat yang dapat membuka kedudukan dengan cekap apabila trend jelas.
Strategi ini terutamanya menggunakan gabungan penunjuk berikut untuk menjana isyarat pembukaan yang kuat:
Penunjuk Aroon: Mengira harga tertinggi dan terendah dalam tempoh tertentu untuk membentuk penunjuk berayun. Menghakimi arah trend melalui gabungan penunjuk Aroon dengan panjang kitaran berbilang.
MA: Hitung persilangan MA jangka pendek dan jangka panjang untuk menentukan titik perubahan trend.
BB Band: Apabila harga memecahkan rel atas BB band, ia adalah isyarat jual.
Penunjuk Williams %R: Membentuk perbezaan di kawasan overbought dan oversold sebagai isyarat pembukaan.
ADX: menilai kekuatan trend. ADX di atas kedudukan tertentu menghasilkan isyarat pembukaan.
Penunjuk di atas, dengan parameter panjang kitaran yang berbeza, membentuk sistem penilaian pelbagai dimensi yang boleh menghasilkan isyarat pembukaan yang kuat apabila trend jelas.
Khususnya, syarat pembelian adalah:
Apabila 3 daripada 5 syarat beli dipenuhi, isyarat beli yang kuat dihasilkan.
Syarat jual adalah sama, dengan 5 syarat jual. Apabila 3 daripadanya dipenuhi, isyarat jual dihasilkan.
Jadi strategi ini boleh menghasilkan tanda pembukaan yang kuat dengan kepastian tinggi apabila trendnya jelas, melalui gabungan penunjuk yang berbeza.
Kelebihan terbesar strategi ini adalah gabungan isyarat penunjuk pelbagai dimensi, yang sangat mengurangkan kebarangkalian isyarat yang salah yang disebabkan oleh satu petunjuk, dengan itu dapat menghasilkan isyarat pembukaan berkualiti tinggi apabila trend jelas.
Kelebihan lain termasuk:
Parameter boleh diselaraskan untuk menyesuaikan diri dengan ciri pasaran yang berbeza
Tetapan parameter penunjuk adalah saintifik dan sangat kukuh
Gabungan pelbagai kitaran masa diwujudkan untuk meningkatkan ketepatan penghakiman
Struktur kod adalah jelas dan mudah difahami dan pembangunan sekunder
Strategi ini juga mempunyai beberapa risiko:
Walaupun gabungan beberapa penunjuk boleh meningkatkan kualiti penilaian, ia juga meningkatkan kerumitan strategi dan memperluaskan risiko terlalu optimum.
Tetapan parameter tidak sempurna 100% dan mungkin gagal dalam keadaan pasaran tertentu.
Masih ada ruang untuk pengoptimuman dalam gabungan kaedah penunjuk. Logik gabungan boleh disempurnakan.
Peluang penyesuaian jangka pendek mungkin terlewat.
Penyelesaian yang sepadan:
Meningkatkan ujian semula sampel untuk menguji ketahanan parameter
Sesuaikan beberapa parameter untuk menyesuaikan diri dengan lebih banyak pasaran
Mengoptimumkan kaedah integrasi penunjuk untuk meningkatkan kualiti penilaian
Memendekkan beberapa parameter penunjuk dengan sewajarnya untuk meningkatkan pencatatan penyesuaian jangka pendek
Arah pengoptimuman utama strategi ini adalah pengoptimuman kaedah integrasi penunjuk, yang terutamanya termasuk:
Tambah lebih banyak jenis penunjuk yang berbeza untuk membentuk hutan penunjuk untuk meningkatkan lebih lanjut ketepatan penilaian
Mengoptimumkan tetapan parameter penunjuk untuk menyesuaikan diri secara automatik dengan perubahan pasaran
Menggunakan pembelajaran mesin dan kaedah lain untuk mencari penyelesaian integrasi penunjuk yang optimum secara automatik
Meningkatkan strategi stop-loss untuk mengawal risiko
Gabungkan penunjuk sentimen, menilai panas pasaran, dan menyesuaikan parameter secara dinamik
Masih banyak ruang untuk meningkatkan kualiti penilaian dan ketahanan strategi ini dengan mengintegrasikan lebih banyak penunjuk, mengoptimumkan parameter secara automatik dan skim integrasi.
Kemuncak terbesar strategi ini adalah integrasi saintifik pelbagai penunjuk untuk membentuk isyarat pembukaan yang kuat yang berfungsi dengan ketara apabila trend jelas. Terdapat banyak ruang untuk pengoptimuman dalam kaedah integrasi strategi ini. Dengan memperkenalkan lebih banyak penunjuk dan pengoptimuman cerdas parameter dan kaedah integrasi, strategi ini boleh menjadi strategi perdagangan kuantitatif yang sangat kuat.
/*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))))