
Это стратегия для отслеживания трендов, основанная на показателях Supertrend, в сочетании с адаптивным механизмом отслеживания стопов. Эта стратегия в основном идентифицирует направление тенденций рынка с помощью показателей Supertrend и использует динамические отслеживания стопов для управления рисками и оптимизации времени выхода.
Основная логика стратегии основана на следующих ключевых элементах:
Это разумно разработанная, риск-контролируемая стратегия для отслеживания тенденций. Благодаря сочетанию показателей Supertrend и гибкого механизма остановок, стратегия может эффективно контролировать риск, сохраняя при этом высокую прибыльность. Стратегия имеет высокую конфигурацию и подходит для использования в различных рыночных условиях, но требует полной оптимизации параметров и обратной проверки. В будущем можно еще больше повысить стабильность и прибыльность стратегии, добавив больше инструментов технического анализа и средств контроля риска.
/*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")