Stratégie de négociation à dynamique quantitative de Super BitMoon

Auteur:ChaoZhang est là., Date: 15 septembre 2023 à 16 h 13:05
Les étiquettes:

Cette stratégie s'appelle Super BitMoon. C'est une stratégie de trading quantitative à court terme adaptée au Bitcoin. La stratégie a des capacités à la fois longues et courtes, lui permettant de trader lorsque Bitcoin franchit les niveaux de support ou de résistance clés.

Comment fonctionne la stratégie:

  1. Utilisez l'indicateur ATR pour calculer la fourchette de volatilité récente et les niveaux de stop loss.
  2. Utilisez la moyenne mobile pondérée (WVF) et les bandes de Bollinger pour déterminer si le Bitcoin est suracheté ou survendu.
  3. Utilisez l'indicateur RSI pour vérifier si Bitcoin est survendu. Si le RSI est inférieur à deux lignes de survente, il présente une opportunité d'acheter la chute.

Règles commerciales spécifiques:

  1. Si le WVF traverse en dessous de la bande supérieure de Bollinger, et que le prix est au-dessus du niveau d'arrêt de perte ATR, achetez Bitcoin.
  2. Si le RSI tombe en dessous de 50 ou 30 lignes de survente, passez à Bitcoin.

Avantages de cette stratégie:

  1. A des capacités à la fois longues et courtes pour le commerce bidirectionnel.
  2. Utilise les arrêts ATR pour contrôler les risques et limiter les pertes.
  3. Utilise WVF, Bollinger Bands et RSI ensemble pour améliorer la précision du signal.

Les risques de cette stratégie:

  1. Les paramètres incorrects de Bollinger et du RSI peuvent générer de mauvais signaux.
  2. Des pics ou des chutes soudains de prix peuvent déclencher un stop loss.
  3. Les coûts de transaction ont une incidence sur la rentabilité.

En résumé, Super BitMoon est une stratégie de dynamique quantitative solide idéale pour le trading de combinaisons d'indicateurs à court terme, avec à la fois des caractéristiques de suivi de tendance et de réversion moyenne.


/*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

Plus de