Это очень простая стратегия. Она состоит только из одного последующего стоп-лосса. Когда стоп-лосс запускается, позиция обращается и для новой позиции устанавливается последующий стоп-лосс.
Стратегия построена на основе одного из трех типов стоп-лосса: процентный стоп-лосс, стоп-лосс ATR, абсолютный стоп-лосс.
В частности, стратегия сначала рассчитывает стоимость стоп-лосса на основе выбранного типа стоп-лосса. Затем она проверяет на наличие сигналов входа, идя на длинный, когда высокий превышает предыдущую цену стоп-лосса, и идя на короткий, когда низкий ниже предыдущей цены стоп-лосса. После входа она постоянно обновляет цену стоп-лосса, чтобы отследить изменения цены. Долгая цена стоп-лосса низкая минус стоимость стоп-лосса, короткая цена стоп-лосса высокая плюс стоимость стоп-лосса.
Наибольшее преимущество этой стратегии заключается в ее простоте, требующей отслеживания только одной стоп-лосс без необходимости рассмотрения выбора точки входа и выхода.
По сравнению с фиксированным стоп-лосом, используемый им последующий стоп-лосс может обеспечить большую прибыль, а также уменьшить вероятность того, что стоп-лосс будет достигнут.
Основные риски этой стратегии могут возникнуть из-за неправильной установки стоимости стоп-лосса. Слишком большое значение стоп-лосса может привести к увеличению потерь, в то время как слишком маленькое значение может привести к частому запуску стоп-лосса. Это требует адаптивной оптимизации на основе рыночных условий.
Другим риском является неточное направленное суждение после запуска стоп-лосса при изменении позиции, что приводит к потере шансов на изменение цены или увеличению потерь.
Стратегия может быть оптимизирована в следующих аспектах:
Стратегия реализует прибыль с помощью простого механизма стоп-лосса и легко понятна для начинающих. По сравнению с традиционными стратегиями стоп-лосса, она добавляет позиции реверсии после стоп-лосса, чтобы получить дополнительные прибыли. При непрерывном тестировании и оптимизации она может стать очень практичной количественной программой.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50) //////////// // Inputs // sl_type = input("%", options = ["%", "ATR", "Absolute"]) sl_perc = input(4, title = "% SL", type = input.float) atr_length = input(10, title = "ATR Length") atr_mult = input(2, title = "ATR Mult", type = input.float) sl_absol = input(10, title = "Absolute SL", type = input.float) // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2016, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2100, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate ////////////////// // CALCULATIONS // // SL values sl_val = sl_type == "ATR" ? atr_mult * atr(atr_length) : sl_type == "Absolute" ? sl_absol : close * sl_perc / 100 // Init Variables pos = 0 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 ? max(low - sl_val, nz(trailing_sl[1])) : nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) : nz(trailing_sl[1]) // Position var pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1]) ////////////// // PLOTINGS // plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red) ////////////// // STRATEGY // if (time_cond and pos != 1) strategy.entry("long", true, stop = trailing_sl) if (time_cond and pos != -1) strategy.entry("short", false, stop = trailing_sl)