Стратегия торговли с выбытием волатильности

Автор:Чао Чжан, Дата: 2023-10-30 16:58:03
Тэги:

img

Обзор

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

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

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

Когда цена закрытия превышает верхний или нижний уровни, зона прорыва заполняется цветом, указывающим на направление прорыва.

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

Ввод длины определяет период, в течение которого измеряется волатильность. Более высокое значение длины подразумевает сосредоточение внимания на более длинных ценовых движениях. Например, при установке длины на 20, каждая сделка охватывает около 100 бар, захватывая несколько колебаний.

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

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

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

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

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

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

Стоп-потери могут контролировать потери на отдельных сделках.

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

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

Возможности оптимизации

Болинджерские диапазоны могут быть введены в течение периода ATR для расчета новых уровней прорыва.

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

На рынках с ограниченным диапазоном можно рассматривать различные параметры или вообще избегать сделок, чтобы предотвратить сбои.

Заключение

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


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
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=5
strategy("Volatility Breakout Strategy [Angel Algo]", overlay = true)

// Inputs
length = input(title="Length", defval=20)

// Calculate the average true range (ATR)
atr = ta.atr(length)

// Plot the ATR on the chart
plot(atr, color=color.blue, linewidth=2, title="ATR")

// Calculate the upper and lower breakouts
upper_breakout = high + atr
lower_breakout = low - atr

// Plot the upper and lower breakouts on the chart
ul = plot(upper_breakout[1], color = color.new(color.green, 100), linewidth=2, title="Upper Breakout Level")
ll = plot(lower_breakout[1], color = color.new(color.red, 100), linewidth=2, title="Lower Breakout Level")

// Create the signals
long_entry = ta.crossover(close, upper_breakout[1]) and barstate.isconfirmed
short_entry = ta.crossunder(close, lower_breakout[1]) and barstate.isconfirmed

active_signal_color =ta.barssince(long_entry) < ta.barssince(short_entry) ? 
   color.new(color.green,85) : color.new(color.red,85)

// Plot the signals on the chart
plotshape(long_entry and ta.barssince(long_entry[1]) > ta.barssince(short_entry[1]), location=location.belowbar, style=shape.triangleup, 
   color=color.green, size=size.normal, text = "Bullish breakout", textcolor = color.green)
plotshape(short_entry and ta.barssince(long_entry[1]) < ta.barssince(short_entry[1]), location=location.abovebar, style=shape.triangledown, 
   color=color.red, size=size.normal,text = "Bearish breakout",  textcolor = color.red)

// Fill the space between the upper and lower levels with the color that indicates the latest signal direction
fill(ul,ll, color=active_signal_color)   

long_condition = long_entry and strategy.position_size <= 0 and barstate.isconfirmed
short_condition = short_entry and strategy.position_size >= 0 and barstate.isconfirmed

if long_condition
    strategy.entry("Volatility Breakout Long", strategy.long)


if short_condition
    strategy.entry("Volatility Breakout Short", strategy.short)


Больше