Strategi perdagangan momentum kuantitatif Super BitMoon

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

Strategi ini dipanggil Super BitMoon. Ia adalah strategi perdagangan momentum kuantitatif jangka pendek yang sesuai untuk Bitcoin. Strategi ini mempunyai kedua-dua keupayaan panjang dan pendek, yang membolehkannya berdagang apabila Bitcoin memecahkan tahap sokongan atau rintangan utama.

Bagaimana strategi ini berfungsi:

  1. Gunakan penunjuk ATR untuk mengira julat turun naik baru-baru ini dan paras stop loss. Apabila harga memecahkan paras stop loss lilin sebelumnya, ia menandakan pembalikan trend.
  2. Gunakan Purata Bergerak Bertimbang (WVF) dan Bollinger Bands untuk menentukan sama ada Bitcoin terlalu banyak dibeli atau terlalu banyak dijual.
  3. Gunakan penunjuk RSI untuk memeriksa sama ada Bitcoin terlampau dijual. Jika RSI berada di bawah dua garis terlampau dijual, ia memberikan peluang untuk membeli penurunan.

Peraturan perdagangan khusus:

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

Kelebihan strategi ini:

  1. Mempunyai kedua-dua keupayaan jangka panjang dan pendek untuk perdagangan dua hala.
  2. Menggunakan hentian ATR untuk mengawal risiko dan mengehadkan kerugian.
  3. Menggunakan WVF, Bollinger Bands dan RSI bersama untuk meningkatkan ketepatan isyarat.

Risiko strategi ini:

  1. Parameter Bollinger dan RSI yang salah boleh menghasilkan isyarat yang buruk.
  2. Peningkatan atau kejatuhan harga tiba-tiba boleh mencetuskan stop loss.
  3. Kos urus niaga memberi kesan kepada keuntungan.

Ringkasnya, Super BitMoon adalah strategi momentum kuantitatif yang kukuh yang sesuai untuk perdagangan kombinasi Indikator jangka pendek, dengan kedua-dua ciri trend berikut dan pembalikan purata. Dengan penyesuaian parameter yang betul, ia dapat mencapai nisbah risiko-balasan yang baik. Tetapi peniaga masih perlu mempertimbangkan kawalan kos dan pengurusan wang untuk mengurangkan risiko dalam perdagangan langsung.


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