Беспрецедентная стратегию количественной торговли на основе двойных BB-индикаторов и RSI

Автор:Чао Чжан, Дата: 2024-01-29 10:33:43
Тэги:

img

Обзор

Эта стратегия является количественной торговой стратегией, основанной на индикаторе полос Боллинджера и индикаторе относительной силы (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)


Больше