Стратегия отслеживания волатильности

Автор:Чао Чжан, Дата: 2023-12-01 17:53:36
Тэги:

img

Обзор

Это стратегия отслеживания тренда стоп-лосса, основанная на волатильности цен. Она использует средний истинный диапазон (ATR) для установки линий стоп-лосса для колебаний цен. ATR отражает волатильность и уровень риска цен. Когда цена превышает линию стоп-лосса, стратегия оценивает обратный тренд и предпринимает соответствующие действия для открытия позиций или остановки потерь.

Принцип стратегии

Стратегия сначала рассчитывает средний истинный диапазон (ATR) в течение определенного периода. Затем, основываясь на текущем направлении тренда цены, если это восходящий тренд, линия остановки потери устанавливается на текущую самую высокую цену минус n раз ATR; если это нисходящий тренд, линия остановки потери устанавливается на текущую самую низкую цену плюс n раз ATR. Значение n можно регулировать с помощью параметров для контроля расстояния между линией остановки потери и ценой.

Когда цена проходит через линию стоп-лосса восходящего или нисходящего тренда, считается, что тенденция изменилась.

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

Преимущества стратегии

  • Использование характеристик волатильности цен для оценки тенденций и точного понимания переломных моментов цен
  • Своевременное прекращение потерь и смена позиций для снижения рисков переворотов на рынке
  • Гибкое регулирование параметров на дистанцию управления между линией стоп-лосса и колебаниями цен
  • Параметры могут быть оптимизированы для конкретных продуктов для лучшей адаптации

Риски стратегии

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

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

  • Для предотвращения ошибочного оценки недействительных прорывов могут быть введены вспомогательные показатели, такие как объем торговли или ускорение волатильности.
  • Корректировка значения n на основе характеристик различных продуктов, чтобы сделать расстояние остановки потери более подходящим
  • Период ATR также может быть оптимизирован для выбора наиболее подходящего параметра периода для оценки волатильности ценового разрыва

Резюме

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


/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © laptevmaxim92

//@version=4
strategy("Volatility stop strategy", overlay=true)

length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)

longCondition = is_uptrend
if (longCondition and use_date)
    strategy.entry("BUY", strategy.long)

shortCondition = not is_uptrend
if (shortCondition and use_date)
    strategy.entry("SELL", strategy.short)
    
if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Больше