La stratégie d'inversion des pertes par suivi de tendance SAR parabolique est une stratégie qui utilise l'indicateur SAR parabolique pour identifier les tendances et entrer dans des positions de contre-tendance lorsque la tendance s'inverse.
La stratégie utilise l'indicateur Parabolic SAR pour juger de la tendance actuelle du marché.
Lorsque les points SAR sont en baisse et en dessous du prix, cela représente une tendance haussière; lorsque les points SAR sont en hausse et au-dessus du prix, cela représente une tendance baissière.
Plus précisément, lorsque les points SAR montrent une tendance haussière et sont au-dessus des prix, la stratégie sera courte; lorsque les points SAR montrent une tendance baissière et sont en dessous des prix, la stratégie sera longue.
En outre, la stratégie définit également des mécanismes de stop loss et de take profit.
Les principaux avantages de la combinaison de l'indicateur de tendance et des mécanismes de stop loss/take profit sont les suivants:
Il y a aussi quelques risques à prendre en compte pour la stratégie:
Ces risques peuvent être résolus par l'optimisation des paramètres, l'utilisation d'autres indicateurs de filtrage, etc.
La stratégie peut être optimisée dans les aspects suivants:
En général, il s'agit d'une stratégie d'inversion de tendance assez classique de suivi des stops de perte. Il identifie les inversions de tendance et contrôle également les risques avec des moyens de stop loss et de profit. Après optimisations, il peut devenir une stratégie utile pour le trading en direct.
/*backtest start: 2024-01-24 00:00:00 end: 2024-01-31 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Parabolic SAR Strategy", overlay=true) start = input(0.02) increment = input(0.02) maximum = input(0.2) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := min(AF + increment, maximum) else if low < EP EP := low AF := min(AF + increment, maximum) if uptrend SAR := min(SAR, low[1]) if bar_index > 1 SAR := min(SAR, low[2]) else SAR := max(SAR, high[1]) if bar_index > 1 SAR := max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) if barstate.isconfirmed if uptrend strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE") strategy.cancel("ParLE") else strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE") strategy.cancel("ParSE") plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=3, color=color.aqua) //Stop Loss Inputs use_short_stop_loss = input(false, title="Short Stop Loss", group="Stop Loss and Take Profit", inline="Short_SL") short_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval=5, group="Stop Loss and Take Profit", inline="Short_SL") * 0.01 use_long_stop_loss = input(false, title="Long Stop Loss", group="Stop Loss and Take Profit", inline="Long_SL") long_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval=5, group="Stop Loss and Take Profit", inline="Long_SL") * 0.01 //Take Profit Inputs use_short_take_profit = input(false, title="Short Take Profit", group="Stop Loss and Take Profit", inline="Short_TP") short_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval = 20, group="Stop Loss and Take Profit", inline="Short_TP") * .01 use_long_take_profit = input(false, title="Long Take Profit", group="Stop Loss and Take Profit", inline="Long_TP") long_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1, defval = 20, group="Stop Loss and Take Profit", inline="Long_TP") * .01 longStopPrice = strategy.position_avg_price * (1 - long_stop_loss) shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss) longLimitPrice = strategy.position_avg_price * (1 + long_take_profit) shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit) if (strategy.position_size > 0.0) if (use_long_stop_loss and not use_long_take_profit) strategy.exit("Long", stop = longStopPrice) if (use_long_take_profit and not use_long_stop_loss) strategy.exit("Long", limit = longLimitPrice) if (use_long_take_profit and use_long_stop_loss) strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice) if (strategy.position_size < 0.0) if (use_short_stop_loss and not use_short_take_profit) strategy.exit("Short", stop = shortStopPrice) if (use_short_take_profit and not use_short_stop_loss) strategy.exit("Short", limit = shortLimitPrice) if (use_short_take_profit and use_short_stop_loss) strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice) //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)