Chiến lược giao dịch Bitcoin trong ngày kết hợp nhiều chỉ số


Ngày tạo: 2023-12-07 15:23:44 sửa đổi lần cuối: 2023-12-07 15:23:44
sao chép: 1 Số nhấp chuột: 691
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch Bitcoin trong ngày kết hợp nhiều chỉ số

Tổng quan

Chiến lược này kết hợp bốn chỉ số RSI, MFI, Stoch RSI và MACD để thực hiện giao dịch trong ngày của Bitcoin. Chiến lược chỉ đặt hàng để kiểm soát rủi ro khi nhiều chỉ số phát ra tín hiệu mua hoặc bán cùng một lúc.

Nguyên tắc chiến lược

  1. Chỉ số RSI được sử dụng để đánh giá thị trường có đang quá mua hay quá bán không. RSI tạo ra tín hiệu mua khi thấp hơn 40 và tạo ra tín hiệu bán khi cao hơn 70.

  2. Chỉ số MFI đánh giá dòng tiền của thị trường. MFI tạo ra tín hiệu mua khi thấp hơn 23 và tạo ra tín hiệu bán khi cao hơn 80.

  3. Stoch RSI đánh giá thị trường có quá mua hay quá bán không. Dòng K thấp hơn 34 tạo ra tín hiệu mua, cao hơn 80 tạo ra tín hiệu bán.

  4. Chỉ số MACD đánh giá xu hướng và động lực của thị trường. Đường nhanh tạo ra tín hiệu mua khi đường dài thấp hơn đường dài và cột là âm, ngược lại tạo ra tín hiệu bán.

Phân tích lợi thế

  1. Kết hợp bốn chỉ số để tăng độ chính xác tín hiệu, tránh thiệt hại do chỉ số đơn lẻ bị hỏng.

  2. Chỉ khi có nhiều chỉ số phát ra cùng một lúc, bạn mới có thể đặt hàng, điều này sẽ làm giảm đáng kể khả năng có tín hiệu giả.

  3. Sử dụng chiến lược giao dịch trong ngày, tránh rủi ro qua đêm, giảm chi phí vốn.

Rủi ro và giải pháp

  1. Tỷ lệ giao dịch chiến lược có thể thấp, có một số rủi ro về thời gian. Các tham số chỉ số có thể được nới lỏng thích hợp, tăng số lần giao dịch.

  2. Khả năng các chỉ số phát ra tín hiệu sai vẫn tồn tại. Các thuật toán học máy có thể được đưa vào để hỗ trợ đánh giá độ tin cậy của tín hiệu chỉ số.

  3. Có một số rủi ro quá mua quá bán. Các tham số chỉ số có thể được điều chỉnh thích hợp hoặc thêm logic phán đoán cho các chỉ số khác.

Hướng tối ưu hóa

  1. Thêm chức năng điều chỉnh các tham số chỉ số tùy chỉnh. Điều chỉnh các tham số chỉ số theo biến động thị trường và tốc độ thay đổi trong thời gian thực.

  2. Thêm logic dừng lỗ. Nếu thua lỗ vượt quá một tỷ lệ nhất định, dừng lỗ sẽ rút ra, kiểm soát hiệu quả thua lỗ đơn lẻ.

  3. Kết hợp với các chỉ số cảm xúc. Tăng cường phán đoán đa chiều như nhiệt độ thị trường, mức độ lo lắng của thị trường, nâng cao chiến lược lợi nhuận.

Tóm tắt

Chiến lược này phát tín hiệu bằng cách xác minh lẫn nhau bốn chỉ số, có thể làm giảm hiệu quả tỷ lệ tín hiệu giả, là một chiến lược lợi nhuận tần số cao tương đối ổn định. Với các tham số và mô hình được tối ưu hóa liên tục, tỷ lệ thắng và khả năng lợi nhuận của chiến lược có thể được nâng cao hơn nữa.

Mã nguồn chiến lược
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy('John Day Stop Loss', overlay=false, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency='USD', precision=2)
strategy.risk.allow_entry_in(strategy.direction.long) 

from_day = input.int(defval=1, title='From Day', minval=1)
from_month = input.int(defval=1, title='From Month', minval=1)
from_year = input.int(defval=2021, title='From Year', minval=2020)
to_day = input.int(defval=1, title='To Day', minval=1)
to_month = input.int(defval=1, title='To Month', minval=1)
to_year = input.int(defval=2025, title='To Year', minval=2020)

time_cond = time > timestamp(from_year, from_month, from_day, 00, 00) and time < timestamp(to_year, to_month, to_day, 00, 00)
//time_cond = true

//Stop Loss
longProfitPerc = input.float(title="Stop Loss Profit (%)", defval=2.1) / 100
longExitPrice  = strategy.position_avg_price * (1 - longProfitPerc)

//RSI - yellow
up = ta.rma(math.max(ta.change(close), 0), 14)
down = ta.rma(-math.min(ta.change(close), 0), 14)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#00FFFF)
buy_rsi = true // rsi < 40
sell_rsi = true //rsi > 70

//MFI - cyan
mf = ta.mfi(hlc3, 14)
plot(mf, "MF", color=#FFFF00)
buy_mfi = mf < input.int(defval=23, title='Max MF', minval=1)
sell_mfi = mf > input.int(defval=80, title='Min MF', minval=1)

//Stoch RSI
OverBought_StochRSI = input(80)
OverSold_StochRSI = input(34)
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(2, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stochastic Length", minval=1)
srcRSI = input(close, title="RSI Source")
rsi1 = ta.rsi(srcRSI, lengthRSI)
kStochRSI = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(kStochRSI, smoothD)
co = ta.crossover(kStochRSI,d)
cu = ta.crossunder(kStochRSI,d)

buy_stochRSI = co and kStochRSI < OverSold_StochRSI
sell_stochRSI = cu and kStochRSI > OverBought_StochRSI

plot(kStochRSI, "K", color=#2962FF)
plot(d, "D", color=#FF6D00)
h0 = hline(OverBought_StochRSI, "Upper Band", color=#787B86)
h1 = hline(OverSold_StochRSI, "Lower Band", color=#787B86)
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")

//MACD
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
//col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
//col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
//col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
//col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
//col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
//col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
buy_MACD = macd < signal and hist < 0 
sell_MACD = macd > signal and hist > 0 

//buy_MACD = true 
//sell_MACD = true

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)

sessionColor = color(na)
if time_cond

    if (not na(kStochRSI) and not na(d))
        cmt = str.tostring(close)
    	if (buy_stochRSI and buy_MACD and buy_mfi and buy_rsi)
    		strategy.entry("BUY", strategy.long, comment='BUY @ ' + cmt)
    		if longProfitPerc != 0
    		    strategy.exit(id="x", stop=longExitPrice, comment='EXIT @ ' + str.tostring(longExitPrice))
        	sessionColor := input.color(#0000FF, "buy") //red
    	if (sell_stochRSI and sell_MACD and sell_mfi and sell_rsi)
    		strategy.entry("SELL", strategy.short, comment='SELL @ ' + cmt)
    		sessionColor := input.color(#FF0000, "sell") //green
    	
bgcolor(sessionColor)