Stratégie de trading quantitative de victoire sans faille basée sur des indicateurs de double BB et RSI

Auteur:ChaoZhang est là., Date: 2024-01-29 10:33:43
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de trading quantitative basée sur l'indicateur Bollinger Bands et l'indicateur de force relative (RSI). Cette stratégie utilise des méthodes d'apprentissage automatique pour tester et optimiser les paramètres sur près d'un an de données historiques à l'aide du langage Python, en trouvant la combinaison optimale de paramètres.

Principes de stratégie

Les signaux de trading de cette stratégie proviennent du jugement combiné des deux bandes de Bollinger et des indicateurs RSI. Parmi eux, l'indicateur de bandes de Bollinger est le canal de volatilité calculé en fonction de l'écart-type du prix. Il génère des signaux de trading lorsque le prix s'approche ou touche le canal. L'indicateur RSI juge la situation de surachat et de survente du prix.

Plus précisément, un signal d'achat est généré lorsque le prix de clôture est inférieur au rail inférieur de 1,0 écarts types et que le RSI est supérieur à 42 en même temps. Un signal de vente est généré lorsque le prix de clôture est supérieur au rail supérieur de 1,0 écarts types et que le RSI est supérieur à 70 en même temps. En outre, cette stratégie définit également deux ensembles de paramètres BB et RSI, qui sont utilisés pour les positions de clôture d'entrée et de stop-loss respectivement. Ces paramètres sont des valeurs optimales obtenues grâce à un backtesting étendu et à l'apprentissage automatique.

Analyse des avantages

Le plus grand avantage de cette stratégie est l'exactitude des paramètres. Grâce à des méthodes d'apprentissage automatique, chaque paramètre est obtenu grâce à un backtesting complet pour atteindre le meilleur ratio Sharpe. Cela garantit à la fois le taux de rendement de la stratégie et contrôle les risques. En outre, la combinaison de deux indicateurs améliore également l'exactitude et le taux de gain des signaux.

Analyse des risques

Le principal risque de cette stratégie provient de la définition de points de stop-loss. Si le point de stop-loss est trop élevé, il ne contrôlera pas efficacement les pertes. En outre, si le point de stop-loss ne calcule pas correctement d'autres coûts de trading tels que les commissions et le glissement, il augmentera également les risques. Pour réduire les risques, il est recommandé d'ajuster le paramètre d'amplitude de stop-loss pour réduire la fréquence de trading, tout en calculant une position de stop-loss raisonnable.

Directions d'optimisation

Il y a encore de la place pour une optimisation supplémentaire de cette stratégie. Par exemple, vous pouvez essayer de changer les paramètres de longueur des bandes de Bollinger, ou ajuster les seuils de surachat et de survente du RSI. Vous pouvez également essayer d'introduire d'autres indicateurs pour construire une combinaison multi-indicateurs. Cela peut augmenter l'espace de profit et la stabilité de la stratégie.

Résumé

Cette stratégie combine les deux indicateurs BB et les indicateurs RSI, et obtient des paramètres optimaux grâce à des méthodes d'apprentissage automatique pour atteindre des rendements élevés et des niveaux de risque contrôlables.


/*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)


Plus de