Il s'agit d'une stratégie de suivi de tendance basée sur l'indicateur Supertrend, combinée à un mécanisme d'arrêt de perte adaptatif. La stratégie utilise principalement l'indicateur Supertrend pour identifier la direction de la tendance du marché et emploie des arrêts de suivi ajustés dynamiquement pour gérer le risque et optimiser le timing de sortie.
La logique de base de la stratégie repose sur les éléments clés suivants:
Il s'agit d'une tendance bien conçue qui suit une stratégie avec un risque contrôlable. En combinant l'indicateur Supertrend avec des mécanismes de stop loss flexibles, la stratégie peut maintenir une rentabilité élevée tout en contrôlant efficacement le risque. La stratégie est hautement configurable et adaptée à une utilisation dans différents environnements de marché, mais nécessite une optimisation approfondie des paramètres et une vérification de backtesting. Des améliorations futures peuvent être apportées en ajoutant plus d'outils d'analyse technique et de mesures de contrôle des risques pour améliorer davantage la stabilité et la rentabilité de la stratégie.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("Supertrend Strategy with Adjustable Trailing Stop [Bips]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=15) // Inputs atrPeriod = input(10, "ATR Länge", "Average True Range „wahre durchschnittliche Schwankungsbreite“ und stammt aus der technischen Analyse. Die ATR misst die Volatilität eines Instruments oder eines Marktes. Mit ihr kann die Wahrscheinlichkeit für einen Trendwechsel bestimmt werden.", group="Supertrend Settings") factor = input.float(3.0, "Faktor", step=0.1, group="Supertrend Settings") tradeDirection = input.string("Long", "Trade Direction", options=["Both", "Long", "Short"], group="Supertrend Settings") sl_type = input.string("%", "SL Type", options=["%", "ATR", "Absolute"]) // Parameter für ST nur für einstieg -> Beim Ausstieg fragen ob der bool WWert true ist -> Für weniger und längere Trädes sl_perc = input.float(4.0, "% SL", group="Stop Loss Einstellung") atr_length = input.int(10, "ATR Length", group="Stop Loss Einstellung") atr_mult = input.float(2.0, "ATR Mult", group="Stop Loss Einstellung") sl_absol = input.float(10.0, "Absolute SL", group="Stop Loss Einstellung") //-------------------------// // BACKTESTING RANGE fromDay = input.int(defval=1, title="From Day", minval=1, maxval=31, group="Backtesting Einstellung") fromMonth = input.int(defval=1, title="From Month", minval=1, maxval=12, group="Backtesting Einstellung") fromYear = input.int(defval=2016, title="From Year", minval=1970, group="Backtesting Einstellung") toDay = input.int(defval=1, title="To Day", minval=1, maxval=31, group="Backtesting Einstellung") toMonth = input.int(defval=1, title="To Month", minval=1, maxval=12, group="Backtesting Einstellung") toYear = input.int(defval=2100, title="To Year", minval=1970, group="Backtesting Einstellung") startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate //-------------------------// // Supertrend calculation [_, direction] = ta.supertrend(factor, atrPeriod) // SL values sl_val = sl_type == "ATR" ? atr_mult * ta.atr(atr_length) : sl_type == "Absolute" ? sl_absol : close * sl_perc / 100 // Init Variables var pos = 0 var float trailing_sl = 0.0 // Signals long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1]) short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1]) // Calculate SL trailing_sl := short_signal ? high + sl_val : long_signal ? low - sl_val : nz(pos[1]) == 1 ? math.max(low - sl_val, nz(trailing_sl[1])) : nz(pos[1]) == -1 ? math.min(high + sl_val, nz(trailing_sl[1])) : nz(trailing_sl[1]) // Position var pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1]) // Entry logic if ta.change(direction) < 0 and time_cond if tradeDirection == "Both" or tradeDirection == "Long" strategy.entry("Long", strategy.long, stop=trailing_sl) else strategy.close_all("Stop Short") if ta.change(direction) > 0 and time_cond if tradeDirection == "Both" or tradeDirection == "Short" strategy.entry("Short", strategy.short, stop=trailing_sl) else strategy.close_all("Stop Long") // Exit logic: Trailing Stop and Supertrend //if strategy.position_size > 0 and not na(trailing_sl) //strategy.exit("SL-Exit Long", from_entry="Long", stop=trailing_sl) //if strategy.position_size < 0 and not na(trailing_sl) //strategy.exit("SL-Exit Short", from_entry="Short", stop=trailing_sl) // Trailing Stop visualization plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red) //plot(not na(trailing_sl) ? trailing_sl : na, color=pos == 1 ? color.green : color.red, linewidth=2, title="Trailing Stop")