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

Автор:Чао Чжан, Дата: 2023-10-12 17:38:39
Тэги:

Обзор

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

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

Стратегия рассчитывает волатильность, сравнивая изменение в цене закрытия предыдущих 2 свечей и использует это изменение в цене для создания скользящей средней. Полоса обернута вокруг скользящей средней со стандартным отклонением 1 для внутренней полосы и 2 для внешней полосы. Если цена выше предварительно установленного фильтра MA (движущегося среднего), то определяется, что мы находимся в восходящем тренде, поэтому стратегия выпустит сигнал, когда мы находимся в восходящем тренде, и произойдет откат, который приводит к увеличению нижней полосы внутреннего отклонения, но если цена продолжается и падает через полосу внешнего отклонения, то сигнал покупки не будет выпущен, поскольку это наносит ущерб тому, что рост волатильности слишком велик. Вы можете увидеть рост buy на индикаторе, где событие окрашено в зеленый цвет. За короткий период / продажи будет рост на внутреннем фоне ни

Пользователь может изменить диапазон дат, который он хочет проверить, скользящий средний период для отслеживания волатильности и отклонений внутренней и внешней полос. На BTC я оставил внутреннее отклонение и наружные отклонения на стандартных настройках, но обнаружил, что отслеживание волатильности 3 периода хорошо для торговли 1 дневным диаграммой и отслеживание волатильности 5 периода хорошо для 3hr-графика. Поскольку это не стратегия покупки и хранения, то для торговли вы, вероятно, захотите придерживаться самых ликвидных монет, чтобы вы могли очень быстро входить и выходить на любой бирже. Если вы хотите использовать это на менее волатильных рынках, то изменение диапазона внутреннего отклонения до ~ 0,75 будет работать в порядке и на различных фьючерсных рынках.

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

  • Использует торговлю волатильностью для захвата переломных моментов на рынке
  • Торговля как длинной, так и короткой, прибыль на растущих и падающих рынках
  • Простые стандартные настройки параметров легко использовать
  • Параметры могут быть легко оптимизированы для различных основ
  • Разумные параметры стоп-лосса и прибыли помогают зафиксировать прибыль

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

  • Риск больших потерь в базовых инструментах с высокой волатильностью
  • Частые длинные/короткие переключения приводят к более высоким торговым затратам
  • Краткосрочные операции требуют тщательного мониторинга рынка
  • Трудно остановить убытки при низкой ликвидности на рынке
  • Плохая настройка параметров может привести к чрезмерной торговле

Методы снижения риска:

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

  2. Оптимизируйте параметры для уменьшения неэффективных сделок.

  3. Используйте стоп-лосс и прибыль, строгое управление деньгами.

  4. Сосредоточьтесь на эффективности исполнения, выбирайте жидкие основы.

  5. Настраивайте параметры в соответствии с различными основными характеристиками.

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

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

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

  2. Корректировать параметры диапазона волатильности, чтобы лучше соответствовать диапазону волатильности конкретного базового актива.

  3. Добавьте другие фильтры, такие как пик громкости, чтобы подтвердить сигналы.

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

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

  6. Добавьте движущийся стоп-лосс/take profit для отслеживания прибыли.

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

Резюме

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


/*backtest
start: 2023-09-11 00:00:00
end: 2023-10-11 00:00:00
period: 4h
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/
// © gary_trades
//This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.

//@version=4

strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)

//VOLATILTY
CandleChange = ((close - close[1])/close)*100         //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)

//VOLATILITY BANDS 
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)

InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)

upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")

band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)

//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)

//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)

//SETTING BACK TEST INPUTS
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)

startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate

//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65

AlertMSG = "New stategy position" + tostring(strategy.position_size)

if (time_condition) 
    strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
    if (LongFilter)
        LongStop = strategy.position_avg_price - Loss
        LongProfit = strategy.position_avg_price + Profit 
        strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)

if (time_condition)
    strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
    if (ShortFilter)
        ShortStop = strategy.position_avg_price + Loss
        ShortProfit = strategy.position_avg_price - Profit 
        strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)




Больше