
La stratégie est un système de suivi de tendance intelligent basé sur des lignes bi-homogènes, permettant d’identifier les tendances du marché en calculant des moyennes mobiles des hauts et des bas, ainsi que des indicateurs d’inclinaison, et de gérer le risque en combinaison avec un mécanisme de stop-loss dynamique. Le cœur de la stratégie est de filtrer les faux signaux par le biais d’une dépréciation de l’inclinaison, tout en utilisant un suivi dynamique de stop-trailing pour localiser les bénéfices.
La stratégie utilise un système de double équilibre comme logique de négociation centrale, calculant des moyennes mobiles sur une séquence de prix maximum et minimum respectivement. Lorsque les prix franchissent la moyenne supérieure et que la pente de la moyenne est significativement à la hausse, le système génère un signal de multiplication; lorsque les prix tombent au-dessous de la moyenne et que la pente de la moyenne est significativement à la baisse, le système génère un signal de vide. Afin d’éviter les transactions fréquentes dans les marchés en crise, la stratégie introduit un mécanisme de dénivelé de la pente, qui ne confirme l’efficacité de la tendance que lorsque la variation de la pente moyenne dépasse la valeur de la limite définie.
Il s’agit d’une stratégie de trading quantitative qui combine de manière organique le suivi des tendances et la gestion des risques. La stratégie capture avec précision les tendances du marché grâce à un système de double équilibre et à une dévaluation de la pente, tandis que le mécanisme d’arrêt et de perte dynamique offre un contrôle de risque parfait. Bien qu’il y ait encore de la place pour l’amélioration de la stratégie en termes de sélection de paramètres et d’adaptabilité au marché, son cadre logique clair et son système de paramètres flexible fournissent une bonne base pour une optimisation ultérieure.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA Buy/Sell Strategy with Significant Slope", overlay=true)
// Parametri configurabili
smaPeriod = input.int(20, title="SMA Period", minval=1)
initialTPPercent = input.float(5.0, title="Initial Take Profit (%)", minval=0.1) // Take Profit iniziale (ambizioso)
trailingSLPercent = input.float(1.0, title="Trailing Stop Loss (%)", minval=0.1) // Percentuale di trailing SL
slopeThreshold = input.float(0.05, title="Slope Threshold (%)", minval=0.01) // Soglia minima di pendenza significativa
// SMA calcolate su HIGH e LOW
smaHigh = ta.sma(high, smaPeriod)
smaLow = ta.sma(low, smaPeriod)
// Funzioni per pendenza significativa
isSignificantSlope(sma, threshold) =>
math.abs(sma - sma[5]) / sma[5] > threshold / 100
slopePositive(sma) =>
sma > sma[1] and isSignificantSlope(sma, slopeThreshold)
slopeNegative(sma) =>
sma < sma[1] and isSignificantSlope(sma, slopeThreshold)
// Condizioni di BUY e SELL
buyCondition = close > smaHigh and low < smaHigh and close[1] < smaHigh and slopePositive(smaHigh)
sellCondition = close < smaLow and high > smaLow and close[1] > smaLow and slopeNegative(smaLow)
// Plot delle SMA
plot(smaHigh, color=color.green, linewidth=2, title="SMA 20 High")
plot(smaLow, color=color.red, linewidth=2, title="SMA 20 Low")
// Gestione TP/SL dinamici
longInitialTP = strategy.position_avg_price * (1 + initialTPPercent / 100)
shortInitialTP = strategy.position_avg_price * (1 - initialTPPercent / 100)
// Trailing SL dinamico
longTrailingSL = close * (1 - trailingSLPercent / 100)
shortTrailingSL = close * (1 + trailingSLPercent / 100)
// Chiusura di posizioni attive su segnali opposti
if strategy.position_size > 0 and sellCondition
strategy.close("Buy", comment="Close Long on Sell Signal")
if strategy.position_size < 0 and buyCondition
strategy.close("Sell", comment="Close Short on Buy Signal")
// Apertura di nuove posizioni con TP iniziale e Trailing SL
if buyCondition
strategy.entry("Buy", strategy.long, comment="Open Long")
strategy.exit("Long TP/Trailing SL", from_entry="Buy", limit=longInitialTP, stop=longTrailingSL)
if sellCondition
strategy.entry("Sell", strategy.short, comment="Open Short")
strategy.exit("Short TP/Trailing SL", from_entry="Sell", limit=shortInitialTP, stop=shortTrailingSL)