Стратегия трейлинг-стопа по импульсу цены


Дата создания: 2023-11-27 11:45:04 Последнее изменение: 2023-11-27 11:45:04
Копировать: 0 Количество просмотров: 627
1
Подписаться
1617
Подписчики

Стратегия трейлинг-стопа по импульсу цены

Обзор

Эта стратегия использует динамические показатели цены для определения прибыли, а также для установления длинных и длинных двойных стопов для отслеживания убытков, что позволяет осуществлять трендовые стопы. Вместе с тем, эта стратегия, в сочетании с уровнем активации, может эффективно предотвратить преждевременные стопы, только после достижения заданной прибыли.

Стратегический принцип

Вычислить 12 циклов движения цены, затем вычислить 1 циклов движения движения. Когда быстрый движение (циклов движения цены) больше, чем 0, делать больше, чем меньше, чем 0 часов пустой. Таким образом, можно определить направление изменения ценовой динамики, овладеть ценовой тенденцией.

Настройка отслеживания стоп-расстояния и отслеживания уровня активации стоп-расстояния. Отслеживание стоп-расстояния означает, что при движении цены к новому максимуму или минимуму, отслеживание стоп-расстояния настраивается на указанное расстояние. Отслеживание стоп-активации означает, что отслеживание стоп-расстояния начинается только после достижения определенной доходности.

Стратегия блокирует прибыль, отслеживая наивысшую или наименьшую цену, и посылает сигнал о закрытии позиции, когда цена отступает от установленного стоп-стоп-дистанции.

Анализ преимуществ стратегии

  1. Используя двойную динамику, можно точно определить направление ценового тренда, уменьшить количество сделок и избежать подтасовки.

  2. Гибкая настройка для отслеживания стоп-стадий, снижения риска и блокировки прибыли.

  3. Можно установить уровень активации стоп-ложа, который будет отслеживать и запускать только после достижения определенного уровня прибыли, чтобы избежать преждевременной остановки.

  4. Можно одновременно установить уровень остановки многоголовых и пустых голов для полного контроля риска.

  5. Процесс вычислений прост и эффективен, его легко понять и реализовать.

Анализ стратегических рисков

  1. Двойная динамика может привести к обратному сигналу, требующему комбинированной фильтрации тенденций.

  2. Слишком большая стоп-дистанция может привести к значительным потерям.

  3. Высокий уровень активации может привести к упущенным возможностям по остановке.

  4. Необходимо проверить и оптимизировать дополнительные параметры, чтобы найти оптимальную остановку.

Для уменьшения ошибочных сигналов используется определение тенденций и оптимизация параметров. Проверка контрактов и параметров различных сортов для поиска оптимальной конфигурации.

Направление оптимизации стратегии

  1. В сочетании с индикаторами, идентифицирующими структуру рынка, определить тенденцию к завышенному риску и избежать обратной торговли.

  2. Добавление дополнительных временных условий, таких как изменение объема торгов, прорыв в масштабе, повышает точность сигналов.

  3. Оптимизация параметров, тестирование производительности при различных задержках и уровнях активации.

  4. С учетом динамического отслеживания стоп-дистанции, автоматическая корректировка в зависимости от рыночных колебаний.

  5. Можно установить частичную остановку или передвижную остановку для дальнейшего контроля риска.

Подвести итог

Общая структура этой стратегии ясна, она определяет ценовые тенденции с помощью двойных динамических показателей, устанавливает гибкие стопы для отслеживания убытков для блокировки прибыли и эффективного контроля за рисками торгов. Стратегия проста в понимании и реализации, при этом существует пространство для оптимизации, добавление большего количества технических показателей и параметров тестирования может еще больше повысить эффективность стратегии.

Исходный код стратегии
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trailing Stop Snippet", overlay=true)

length = input(12)
price = close
momentum(seria, length) =>
	mom = seria - seria[length]
	mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)

tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
	strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
	strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
	strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail    
    strategy.close_all()
if not strategy.opentrades
	array.clear(ts_)

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)