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.
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.
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.
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.
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.
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)