Стратегия торговли с количественной динамикой Super BitMoon

Автор:Чао Чжан, Дата: 15 сентября 2023 16:13:05
Тэги:

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

Как работает стратегия:

  1. Используйте индикатор ATR для расчета недавнего диапазона волатильности и уровней стоп-лосса.
  2. Используйте взвешенную скользящую среднюю (WVF) и полосы Боллинджера, чтобы определить, является ли биткоин перекупленным или перепроданным.
  3. Используйте индикатор RSI, чтобы проверить, является ли биткоин перепроданным. Если RSI ниже двух линий перепроданности, это представляет собой возможность купить падение.

Особые правила торговли:

  1. Если WVF пересекается ниже верхней полосы Боллинджера, и цена выше уровня остановки ATR, делайте длинный Биткойн.
  2. Если RSI опустится ниже 50 или 30 линий перепроданности, зайдите на биткоин.

Преимущества этой стратегии:

  1. Имеет как долгосрочные, так и краткосрочные возможности для двусторонней торговли.
  2. Использует остановки ATR для контроля риска и ограничения потерь.
  3. Использует WVF, Bollinger Bands и RSI вместе, чтобы улучшить точность сигнала.

Риски этой стратегии:

  1. Неправильные параметры Bollinger и RSI могут генерировать плохие сигналы.
  2. Неожиданные скачки или падения цен могут привести к стоп-лосс.
  3. Транзакционные издержки влияют на прибыльность.

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


/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-08 09:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Super BitMoon v1", overlay=false, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)

/////////////////////////////////////////////////////////////
//START - SET DATE RANGE

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2011, title = "From Year")
ToMonth   = input(defval = 12, title = "To Month", minval = 1)
ToDay     = input(defval = 31, title = "To Day", minval = 1)
ToYear    = input(defval = 2018, title = "To Year")

startDate = time > timestamp(FromYear, FromMonth, FromDay, 00, 00)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true

/////////////////////////////////////////////////////////////
//END - SET DATE RANGE



/////////////////////////////////////////////////////////////
//START - INDICATORS

//ATR STOPS TREND FILTER
length = input(5, title="ATR Stop's Length")
mult = input(1, minval=0.01, title="ATR Stop's Multiple")
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
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

//SYNTHETIC VIX
pd = input(10, title="Synthetic VIX's Length")
bbl = input(2, title="Synthetic VIX's Bollinger Band's Length")
mult2 = input(0.01, minval=0.01, title="Synthetic VIX's Bollinger Band's Std Dev")
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult2 * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
upperBand = midLine + sDev

//RSI
rsi = rsi(close, input(10,title="RSI's Length"))
os1 = input(50,title="RSI's Oversold Level 1")
os2 = input(50,title="RSI's Oversold Level 2")

/////////////////////////////////////////////////////////////
//END - INDICATORS



/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

condition1 = crossunder(wvf, upperBand) and close > vstop and withinTimeRange
condition2 = crossunder(rsi, os1) and withinTimeRange
condition3 = crossunder(rsi, os2) and withinTimeRange

strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2 or condition3)

/////////////////////////////////////////////////////////////
//END - TRADING RULES

Больше