Эта стратегия сочетает в себе несколько сильных индикаторов с различными периодами, такими как Aroon, MA, BB, Williams, %R, ADX, чтобы сформировать многомерную мощную систему индикаторов открытых позиций, которая может эффективно открывать позиции, когда тенденция очевидна.
Стратегия в основном использует комбинацию следующих показателей для получения сильных сигналов открытия:
Индикатор Аруна: рассчитывает самые высокие и самые низкие цены за определенный период, чтобы сформировать колеблющийся индикатор.
MA: Вычисляется перекресток краткосрочного и долгосрочного MA для определения поворотных точек тенденции.
BB-диапазон: когда цена проходит через верхний рельс BB-диапазона, это сигнал продажи.
Индикатор Williams %R: Формирование дивергенции в перекупленных и перепроданных зонах в качестве сигналов открытия.
ADX: оценивает силу тренда.
Вышеуказанные показатели с различными параметрами длины цикла формируют многомерную систему оценки, которая может генерировать сильные сигналы открытия, когда тенденция очевидна.
В частности, условия покупки:
Когда 3 из 5 условий покупки выполнены, генерируется сильный сигнал покупки.
Условия продажи аналогичны, с 5 условиями продажи. Когда 3 из них выполнены, генерируется сигнал продажи.
Таким образом, эта стратегия может дать высокую уверенность сильные сигналы открытия, когда тенденция очевидна, через комбинацию различных индикаторов.
Наибольшее преимущество этой стратегии заключается в многомерном сочетании сигналов индикатора, что значительно снижает вероятность ошибочных сигналов, вызванных одним индикатором, тем самым позволяя генерировать высококачественные сигналы открытия, когда тенденция очевидна.
Другие преимущества включают:
Параметры могут быть адаптированы к различным характеристикам рынка
Настройки параметров показателей научно обоснованны и очень надежны
Комбинация нескольких временных циклов реализована для улучшения точности суждения
Структура кода ясна и легко понятна, и второстепенное развитие
Эта стратегия также сопряжена с некоторыми рисками:
Хотя сочетание нескольких показателей может улучшить качество суждения, оно также увеличивает сложность стратегии и увеличивает риск чрезмерной оптимизации.
Настройки параметров не на 100% идеальны и могут не работать при определенных рыночных условиях.
В сочетании методов показателей все еще есть возможности для оптимизации.
Возможно, вы упустите возможность краткосрочной адаптации.
Соответствующие решения:
Увеличить обратное тестирование выборки для проверки надежности параметров
Корректировка некоторых параметров для адаптации к большему количеству рынков
Оптимизировать метод интеграции показателей для улучшения качества суждений
Соответственно сократить некоторые параметры показателей, чтобы увеличить учет краткосрочных корректировок
Основным направлением оптимизации данной стратегии является оптимизация метода интеграции показателей, который в основном включает:
Добавить больше различных типов индикаторов для формирования индикаторного леса для дальнейшего улучшения точности суждения
Оптимизировать настройки параметров показателей для автоматической адаптации к изменениям рынка
Использование машинного обучения и других методов для автоматического поиска оптимальных решений интеграции индикаторов
Увеличение стратегий стоп-лосса для контроля рисков
Объединяйте показатели настроения, оценивайте рыночную жару и динамически регулируйте параметры
В качестве оценки и надежности этой стратегии еще есть много возможностей для улучшения путем интеграции большего количества показателей, автоматической оптимизации параметров и схем интеграции.
Наиболее важным моментом этой стратегии является научная интеграция нескольких индикаторов для формирования мощного открывающегося сигнала, который оказывает значительную эффективность, когда тренд очевиден.
/*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))))