Cet article présentera une stratégie de trading quantitative qui combine l'indicateur de période parabolique et l'indicateur de bande de Bollinger pour définir une stratégie de stop loss mobile.
En premier lieu, cette stratégie utilise l'indicateur parabolique pour juger de la tendance actuelle du marché. Lorsque le cours de clôture d'aujourd'hui dépasse la ligne de la période parabolique d'hier, on considère que le marché est passé à la hausse et peut aller long; lorsque le prix de clôture d'aujourd'hui dépasse la ligne de la période, les perspectives du marché sont baissières et peuvent aller court.
Deuxièmement, cette stratégie combine l'indicateur de la bande de Bollinger pour définir une position de stop-loss dynamique. Le rail supérieur de la bande de Bollinger peut être considéré comme une zone de surachat, et le rail inférieur est une zone de survente. Après avoir longé, si le prix tombe en dessous du rail inférieur de la bande de Bollinger, arrêtez la perte pour fermer la position; après avoir été court, si le prix dépasse à nouveau le rail supérieur, arrêtez la perte pour sortir. Ainsi, les rails supérieurs et inférieurs des bandes de Bollinger deviennent des lignes de stop-loss en mouvement.
Grâce aux principes ci-dessus, cette stratégie permet de juger de la direction du marché tout en établissant un mécanisme de stop loss dynamique pour suivre les bénéfices.
Comparée aux stratégies traditionnelles de stop loss qui ne fixent qu'une seule position de stop loss fixe, cette stratégie utilise l'indicateur de bande de Bollinger comme ligne de stop loss, de sorte que la ligne de stop loss puisse se déplacer avec les fluctuations de prix. Cela lui permet de verrouiller plus de profits dans des mouvements relativement importants.
Le principal risque de cette stratégie est que la tendance de l'indicateur parabolique ne soit pas forte. Dans les marchés oscillants, les prix peuvent traverser plusieurs fois les lignes périodiques paraboliques, ce qui entraîne des transactions fréquentes mais peu rentables pour la stratégie. À ce stade, les frais de transaction et les coûts de glissement peuvent représenter une grande proportion et réduire la rentabilité de la stratégie.
Pour faire face aux risques ci-dessus, les paramètres peuvent être ajustés pour augmenter le degré de changement de la ligne de période parabolique afin de réduire la probabilité d'erreur de jugement; ou envisager de combiner d'autres indicateurs pour filtrer le moment de l'entrée.
Cette stratégie peut être optimisée dans les aspects suivants:
Optimiser les paramètres de l'indicateur parabolique pour ajuster le taux de changement de l'indicateur afin de réduire la probabilité d'erreur de jugement
Augmenter le filtrage d'autres indicateurs techniques, tels que l'ajout de MACD, KD pour déterminer le type de marché, éviter l'arbitrage sur les marchés oscillants
Optimiser les paramètres des bandes de Bollinger pour ajuster les paramètres de bande passante afin de rendre les bandes de Bollinger plus proches des changements de prix
Augmenter les indicateurs de volume, tels que le volume des transactions, les positions pour aider à juger afin d'éviter les fausses ruptures
Combiner les fondamentaux des actions pour éviter les problèmes avec les bénéfices des actions
Cette stratégie combine le jugement de la direction et de la force de la tendance du marché avec un indicateur parabolique, puis utilise les rails supérieurs et inférieurs des bandes de Bollinger comme position de stop loss mobile pour définir une stratégie de stop loss, obtenant une combinaison de suivi de tendance et de contrôle des risques.
/*backtest start: 2024-01-02 00:00:00 end: 2024-02-01 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © maxencetajet //@version=5 strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25) closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("5 June 2022"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("5 July 2022"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingHighV = input.int(10, title="Swing High", group="number of past candles") swingLowV = input.int(10, title="Swing Low", group="number of past candles") emaV = input.int(200, title="Ema Period", group="EMA") rsiV = input.int(14, title="RSI Period", group="RSI") start = input(0.02, group="Parabolic SAR") increment = input(0.02, group="Parabolic SAR") maximum = input(0.2, "Max Value", group="Parabolic SAR") ema = ta.ema(closeHA, emaV) rsi = ta.rsi(closeHA, rsiV) SAR = ta.sar(start, increment, maximum) myColor = SAR < low?color.green:color.red longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1] float risk_long = na float risk_short = na float stopLoss = na float entry_price = na float takeProfit = na risk_long := risk_long[1] risk_short := risk_short[1] swingHigh = ta.highest(closeHA, swingHighV) swingLow = ta.lowest(closeHA, swingLowV) if strategy.position_size == 0 and longcondition and inTradeWindow risk_long := (close - swingLow) / close strategy.entry("long", strategy.long, comment="Buy") if strategy.position_size == 0 and shortcondition and inTradeWindow risk_short := (swingHigh - close) / close strategy.entry("short", strategy.short, comment="Sell") if strategy.position_size > 0 stopLoss := strategy.position_avg_price * (1 - risk_long) entry_price := strategy.position_avg_price strategy.exit("long exit", "long", stop = stopLoss) if strategy.position_size < 0 stopLoss := strategy.position_avg_price * (1 + risk_short) entry_price := strategy.position_avg_price strategy.exit("short exit", "short", stop = stopLoss) if closeHA[1] < SAR and close > strategy.position_avg_price strategy.close("long", comment="Exit Long") if closeHA[1] > SAR and close < strategy.position_avg_price strategy.close("short", comment="Exit Short") p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price') p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss') fill(p_sl, p_ep, color.new(color.red, transp=85)) plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1) plot(ema, color=color.white, linewidth=2, title="EMA")