Strategi perdagangan momentum kuantitatif Super BitMoon

Penulis:ChaoZhang, Tanggal: 2023-09-15 16:13:05
Tag:

Strategi ini disebut Super BitMoon. Ini adalah strategi perdagangan momentum kuantitatif jangka pendek yang cocok untuk Bitcoin. Strategi ini memiliki kemampuan panjang dan pendek, yang memungkinkannya untuk diperdagangkan ketika Bitcoin menembus level support atau resistance utama.

Bagaimana strategi ini bekerja:

  1. Gunakan indikator ATR untuk menghitung rentang volatilitas baru-baru ini dan tingkat stop loss.
  2. Gunakan Rata-rata Bergerak Bertimbang (WVF) dan Bollinger Bands untuk menentukan apakah Bitcoin overbought atau oversold. Jika WVF melintasi di bawah band atas Bollinger, pasar mungkin oversold dan menyajikan peluang panjang.
  3. Jika RSI berada di bawah dua garis oversold, itu menyajikan kesempatan untuk membeli penurunan.

Aturan perdagangan khusus:

  1. Jika WVF melintasi di bawah Bollinger band atas, dan harga di atas level stop loss ATR, pergi panjang Bitcoin.
  2. Jika RSI turun di bawah 50 atau 30 garis oversold, pergi short Bitcoin.

Keuntungan dari strategi ini:

  1. Memiliki kemampuan jangka panjang dan jangka pendek untuk perdagangan dua arah.
  2. Menggunakan ATR berhenti untuk mengendalikan risiko dan membatasi kerugian.
  3. Menggunakan WVF, Bollinger Bands dan RSI bersama-sama untuk meningkatkan akurasi sinyal.

Risiko dari strategi ini:

  1. Parameter Bollinger dan RSI yang salah dapat menghasilkan sinyal yang buruk.
  2. Peningkatan harga atau jatuhnya harga tiba-tiba dapat memicu stop loss.
  3. Biaya transaksi mempengaruhi profitabilitas.

Secara singkat, Super BitMoon adalah strategi momentum kuantitatif yang solid yang ideal untuk perdagangan kombo Indikator jangka pendek, dengan karakteristik mengikuti tren dan reversi rata-rata. Dengan penyesuaian parameter yang tepat, dapat mencapai rasio risiko-manfaat yang baik.


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

Lebih banyak