Ini adalah strategi mengikuti tren berdasarkan indikator Supertrend, dikombinasikan dengan mekanisme stop loss trailing adaptif. Strategi ini terutama menggunakan indikator Supertrend untuk mengidentifikasi arah tren pasar dan menggunakan stop trailing yang disesuaikan secara dinamis untuk mengelola risiko dan mengoptimalkan waktu keluar.
Logika inti dari strategi ini didasarkan pada elemen kunci berikut:
Ini adalah tren yang dirancang dengan baik mengikuti strategi dengan risiko yang dapat dikontrol. Dengan menggabungkan indikator Supertrend dengan mekanisme stop loss yang fleksibel, strategi dapat mempertahankan profitabilitas tinggi sambil mengontrol risiko secara efektif. Strategi ini sangat dapat dikonfigurasi dan cocok untuk digunakan di lingkungan pasar yang berbeda, tetapi membutuhkan optimasi parameter yang menyeluruh dan verifikasi backtesting. Peningkatan di masa depan dapat dilakukan dengan menambahkan lebih banyak alat analisis teknis dan langkah-langkah pengendalian risiko untuk lebih meningkatkan stabilitas dan profitabilitas strategi.
/*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")