Chiến lược giao dịch động lượng định lượng Super BitMoon

Tác giả:ChaoZhang, Ngày: 2023-09-15 16:13:05
Tags:

Chiến lược này được gọi là Super BitMoon. Đây là một chiến lược giao dịch động lượng định lượng ngắn hạn phù hợp với Bitcoin. Chiến lược có cả khả năng dài và ngắn, cho phép nó giao dịch khi Bitcoin vượt qua các mức hỗ trợ hoặc kháng cự chính.

Chiến lược hoạt động như thế nào:

  1. Sử dụng chỉ số ATR để tính toán phạm vi biến động gần đây và mức dừng lỗ. Khi giá vượt qua mức dừng lỗ của nến trước đó, nó báo hiệu sự đảo ngược xu hướng.
  2. Sử dụng Đường trung bình động cân (WVF) và Bollinger Bands để xác định xem Bitcoin có bị mua quá nhiều hay bán quá nhiều không.
  3. Sử dụng chỉ số RSI để kiểm tra xem Bitcoin có bị bán quá mức hay không.

Các quy tắc giao dịch cụ thể:

  1. Nếu WVF vượt dưới dải Bollinger trên, và giá trên mức dừng lỗ ATR, mua Bitcoin.
  2. Nếu chỉ số RSI giảm xuống dưới 50 hoặc 30 đường bán quá mức, hãy bán ngắn Bitcoin.

Ưu điểm của chiến lược này:

  1. Có cả khả năng dài và ngắn cho giao dịch hai chiều.
  2. Sử dụng ATR dừng để kiểm soát rủi ro và hạn chế tổn thất.
  3. Sử dụng WVF, Bollinger Bands và RSI cùng nhau để cải thiện độ chính xác tín hiệu.

Rủi ro của chiến lược này:

  1. Các thông số Bollinger và RSI không chính xác có thể tạo ra tín hiệu xấu.
  2. Giá đột ngột tăng hoặc sụp đổ có thể kích hoạt dừng lỗ.
  3. Chi phí giao dịch ảnh hưởng đến lợi nhuận.

Tóm lại, Super BitMoon là một chiến lược động lực định lượng vững chắc lý tưởng cho giao dịch hợp đồng chỉ số ngắn hạn, với cả hai đặc điểm theo xu hướng và đảo ngược trung bình. Với điều chỉnh tham số thích hợp, nó có thể đạt được tỷ lệ rủi ro-lợi nhuận tốt. Nhưng các nhà giao dịch vẫn cần xem xét kiểm soát chi phí và quản lý tiền bạc để giảm rủi ro trong giao dịch trực tiếp.


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

Thêm nữa