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

Автор:Чао Чжан, Дата: 2023-11-13 17:20:51
Тэги:

img

Обзор

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

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

Стратегия использует индикатор волатильности остановки для определения направления тренда и отслеживания остановки потери.

  1. Расчет ATR (средний истинный диапазон) цены
  2. Получить линию стоп-лосса, умножив ATR на коэффициент стоп-лосса
  3. Когда цена поднимается, записывает самую высокую цену, линия остановки потери является самой высокой ценой минус ATR * коэффициент
  4. Когда цена падает, записывайте самую низкую цену, линия стоп-лосса - это самая низкая цена плюс коэффициент ATR *

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

Когда цена проникает в линию стоп-лосса, это сигнализирует об обратном тренде.

  • Когда цена превышает линию стоп-лосса, делайте длинный ход
  • Когда цена проходит ниже линии стоп-лосса, перейдите на короткий.

После открытия позиции стратегия отслеживает стоп-лосс с линией:

  • Для длинного, стоп-лосс - это самая высокая цена минус ATR * коэффициент
  • Короче говоря, стоп-лосс - это самая низкая цена плюс коэффициент ATR *

Когда цена снова достигнет линии остановки, позиция будет закрыта.

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

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

Стратегия имеет следующие преимущества:

  1. Умеет своевременно отслеживать изменение тренда и следовать за ним
  2. Использует динамический стоп-лосс для корректировки стоп-позиции на основе волатильности рынка
  3. Обновления стоп-лосса с тенденцией к максимальной прибыли
  4. Он едет по тенденции добиваться значительной прибыли.
  5. Эффективно контролирует риск и избегает больших потерь

Анализ рисков

Также следует учитывать некоторые риски:

  1. Стоп-лосс может быть часто задействован на рыночных рынках диапазонов
  2. Необходимо установить правильный коэффициент остановки потери, слишком маленький может быть слишком чувствительным
  3. Торговые сборы могут пожирать прибыль при частом торговле
  4. Возможно, что на ранней стадии тенденции будет упущена некоторая прибыль.
  5. Риск, когда стоп-лосс слишком далеко от цены

Решения:

  1. Оптимизировать коэффициент остановки потери через обратный тест для поиска наилучшего параметра
  2. Используйте более длительные временные рамки для снижения частоты торговли
  3. Добавить фильтр, чтобы избежать переоценки
  4. Позвольте некоторой гибкости в расстоянии остановки, но не слишком большой

Руководство по оптимизации

Стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. Оптимизировать коэффициент остановки потери для поиска наилучшей комбинации параметров
  2. Добавить фильтры, чтобы избежать whipsaws в диапазоне рынка
  3. Объедините несколько временных рамок для проверки сигнала
  4. Оптимизировать размеров позиции, постепенно увеличивать размер
  5. Подумайте о динамической корректировке временных рамок
  6. Комбинируйте с основными показателями акций, чтобы понять основные тенденции

Резюме

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


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


Больше