Эта стратегия является количественной торговой стратегией, основанной на индикаторе полос Боллинджера и индикаторе относительной силы (RSI). Эта стратегия использует методы машинного обучения для обратного тестирования и оптимизации параметров за почти 1 год исторических данных с использованием языка Python, находя оптимальную комбинацию параметров.
Торговые сигналы этой стратегии исходят из комбинированного суждения двойных полос Боллинджера и индикаторов RSI. Среди них индикатор полос Боллинджера - это канал волатильности, рассчитанный на основе стандартного отклонения цены. Он генерирует торговые сигналы, когда цена приближается или касается канала. Индикатор RSI оценивает ситуацию перекупки и перепродажи цены.
В частности, сигнал покупки генерируется, когда цена закрытия находится ниже нижней рельсы стандартных отклонений 1,0 и RSI превышает 42 одновременно. Сигнал продажи генерируется, когда цена закрытия находится выше верхней рельсы стандартных отклонений 1,0 и RSI превышает 70 одновременно. Кроме того, эта стратегия также устанавливает два набора параметров BB и RSI, которые используются для закрытия позиций входа и остановки потери соответственно. Эти параметры являются оптимальными значениями, полученными посредством обширного бэкстестинга и машинного обучения.
Наибольшее преимущество этой стратегии заключается в точности параметров. Благодаря методам машинного обучения каждый параметр получается путем комплексного бэкстестинга для достижения лучшего коэффициента Шарпа. Это обеспечивает как уровень возврата стратегии, так и контроль рисков. Кроме того, сочетание двойных индикаторов также улучшает точность и показатель победы сигналов.
Основной риск этой стратегии исходит из установки точек остановки потери. Если точка остановки потери установлена слишком высокой, она не будет эффективно контролировать потери. Кроме того, если точка остановки потери не правильно рассчитывает другие торговые издержки, такие как комиссии и скольжение, это также увеличит риски. Для снижения рисков рекомендуется корректировать параметр величины остановки потери для уменьшения частоты торговли, при этом рассчитывая разумную позицию остановки потери.
Например, вы можете попытаться изменить параметры длины полос Боллинджера или скорректировать пороги перекупа и перепродажи RSI. Вы также можете попытаться ввести другие индикаторы для создания комбинации мультииндикаторов. Это может увеличить пространство прибыли и стабильность стратегии.
Эта стратегия сочетает в себе двойные индикаторы BB и RSI и получает оптимальные параметры с помощью методов машинного обучения для достижения высокой доходности и контролируемого уровня риска.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Bunghole 2020 strategy(overlay=true, shorttitle="Flawless Victory Strategy" ) // Stoploss and Profits Inputs v1 = input(true, title="Version 1 - Doesn't Use SL/TP") v2 = input(false, title="Version 2 - Uses SL/TP") stoploss_input = input(6.604, title='Stop Loss %', type=input.float, minval=0.01)/100 takeprofit_input = input(2.328, title='Take Profit %', type=input.float, minval=0.01)/100 stoploss_level = strategy.position_avg_price * (1 - stoploss_input) takeprofit_level = strategy.position_avg_price * (1 + takeprofit_input) //SL & TP Chart Plots plot(v2 and stoploss_input and stoploss_level ? stoploss_level: na, color=color.red, style=plot.style_linebr, linewidth=2, title="Stoploss") plot(v2 and takeprofit_input ? takeprofit_level: na, color=color.green, style=plot.style_linebr, linewidth=2, title="Profit") // Bollinger Bands 1 length = 20 src1 = close mult = 1.0 basis = sma(src1, length) dev = mult * stdev(src1, length) upper = basis + dev lower = basis - dev // Bollinger Bands 2 length2 = 17 src2 = close mult2 = 1.0 basis2 = sma(src1, length2) dev2 = mult2 * stdev(src2, length2) upper2 = basis2 + dev2 lower2 = basis2 - dev2 // RSI len = 14 src = close up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) // Strategy Parameters RSILL= 42 RSIUL= 70 RSILL2= 42 RSIUL2= 76 rsiBuySignal = rsi > RSILL rsiSellSignal = rsi > RSIUL rsiBuySignal2 = rsi > RSILL2 rsiSellSignal2 = rsi > RSIUL2 BBBuySignal = src < lower BBSellSignal = src > upper BBBuySignal2 = src2 < lower2 BBSellSignal2 = src2 > upper2 // Strategy Long Signals Buy = rsiBuySignal and BBBuySignal Sell = rsiSellSignal and BBSellSignal Buy2 = rsiBuySignal2 and BBBuySignal2 Sell2 = rsiSellSignal2 and BBSellSignal2 if v1 == true strategy.entry("Long", strategy.long, when = Buy, alert_message = "v1 - Buy Signal!") strategy.close("Long", when = Sell, alert_message = "v1 - Sell Signal!") if v2 == true strategy.entry("Long", strategy.long, when = Buy2, alert_message = "v2 - Buy Signal!") strategy.close("Long", when = Sell2, alert_message = "v2 - Sell Signal!") strategy.exit("Stoploss/TP", "Long", stop = stoploss_level, limit = takeprofit_level)