
Cet article présente une stratégie de trading quantitative qui combine les indicateurs cycliques parobéliens et les indicateurs des bandes de Brin pour définir une stratégie de stop-loss mobile. Cette stratégie utilise la ligne cyclique parobélienne pour déterminer la direction de la tendance du marché, puis utilise la dynamique ascendante et descendante des bandes de Brin pour définir des points de perte, permettant ainsi un stop-loss mobile pour bloquer les bénéfices.
Tout d’abord, la stratégie utilise l’indicateur parobel pour déterminer la tendance actuelle du marché. Lorsque le cours de clôture d’aujourd’hui est supérieur à la ligne cyclique parobélienne d’hier, on peut faire plus en pensant que la tendance est inversée et pessimiste; lorsque le cours de clôture d’aujourd’hui est inférieur à la ligne cyclique d’hier, la tendance est à la baisse et on peut faire moins.
Deuxièmement, la stratégie est combinée avec un stop loss qui définit la dynamique de l’indicateur de la ceinture de Brin. La ligne supérieure de la ceinture de Brin peut être considérée comme une zone de survente et la ligne inférieure comme une zone de survente.
Grâce aux principes ci-dessus, la stratégie permet de déterminer la direction du marché tout en mettant en place un mécanisme de stop-loss dynamique pour suivre les bénéfices. Cela lui permet de capturer des fluctuations partielles dans les grandes tendances, tout en bloquant les bénéfices et en évitant les risques par stop-loss.
La stratégie utilise l’indicateur de la ceinture de Brin comme une ligne de stop-loss, ce qui lui permet de se déplacer avec les fluctuations de prix. Cela lui permet de verrouiller plus de bénéfices dans des conditions de marché plus importantes. En outre, la stratégie utilise l’indicateur de la ceinture de Brin pour déterminer plus précisément les zones de survente par rapport à la seule utilisation de la ligne cyclique de Parobel.
Le principal risque de cette stratégie est que les paramètres de Parobel ne soient pas très tendancieux. Dans des conditions de choc, les prix peuvent traverser la ligne cyclique de Parobel à plusieurs reprises, ce qui permet à la stratégie de générer des transactions fréquentes mais peu rentables.
Pour faire face aux risques mentionnés ci-dessus, il est possible d’ajuster les paramètres, d’amplifier les variations de la ligne périodique de Parobel, de réduire la probabilité d’erreurs de jugement; ou de filtrer le moment d’entrée en jeu en combinaison avec d’autres indicateurs. Par exemple, des indicateurs de choc peuvent être ajoutés pour juger si la situation est tendancielle ou choc, afin de réduire les transactions inutiles.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimiser les paramètres de l’indicateur parobélien, ajuster la vitesse de variation des paramètres de l’indicateur, réduire la probabilité d’erreur de jugement
Ajout de filtres sur d’autres indicateurs techniques, par exemple l’ajout de MACD, KD et autres pour juger du type de transaction, afin d’éviter l’effet de levier sur les marchés en crise
Optimiser les paramètres de la bande de Boolin, en ajustant les paramètres de la bande de Boolin pour les rendre plus proches des variations de prix
Augmentation des indicateurs de capacité, tels que le volume des transactions, le volume des positions, etc. pour aider à éviter les fausses percées
En combinant les informations de base sur les actions, éviter les problèmes qui affectent les résultats des actions de détention stratégique
Cette stratégie permet de déterminer la direction et la force de la tendance du marché à l’aide de l’indicateur parobel, puis d’utiliser la courbe de Brin en amont et en aval pour définir une stratégie de stop loss en tant que point de perte mobile. Comparée à la stratégie de stop loss fixe traditionnelle, cette stratégie permet de réaliser des rendements plus élevés dans des situations plus importantes.
/*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")