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

Автор:Чао Чжан, Дата: 2023-11-27 11:45:04
Тэги:

img

Обзор

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

Логика стратегии

Он рассчитывает 12-периодный импульс цены и далее рассчитывает 1-периодный импульс импульса. Когда быстрый импульс (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)

Больше