Стратегия стоп-лосса, основанная на тренде и волатильности цен


Дата создания: 2023-12-01 17:53:36 Последнее изменение: 2023-12-01 17:53:36
Копировать: 6 Количество просмотров: 666
1
Подписаться
1619
Подписчики

Стратегия стоп-лосса, основанная на тренде и волатильности цен

Обзор

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

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

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

Когда цена пробивает линию стоп-порога в восходящем тренде или линию стоп-порога в нисходящем тренде, определяется переход в тренде. В этом случае стратегия ликвидирует убытки и устанавливает новую линию стоп-порога в соответствии с новым направлением тренда.

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

Стратегические преимущества

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

Стратегический риск

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

Оптимизация стратегии

  • Во избежание ошибочных выводов о недействительном прорыве можно ввести вспомогательные показатели, такие как объем торгов или ускорение колебаний.
  • Устройство значения 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)