Chiến lược giao dịch Bitcoin trong ngày của John dựa trên nhiều chỉ số

Tác giả:ChaoZhang, Ngày: 2023-12-07 15:23:44
Tags:

img

Tổng quan

Chiến lược này kết hợp RSI, MFI, Stoch RSI và MACD bốn chỉ số để thực hiện giao dịch trong ngày bitcoin. Các lệnh sẽ chỉ được đặt khi nhiều chỉ số cung cấp tín hiệu mua hoặc bán đồng thời để kiểm soát rủi ro.

Chiến lược logic

  1. Chỉ số RSI được sử dụng để xác định xem thị trường có mua quá mức hay bán quá mức không. Nó tạo ra tín hiệu mua khi RSI dưới 40 và tín hiệu bán khi RSI trên 70.

  2. Chỉ số MFI đánh giá dòng vốn trên thị trường. Nó tạo ra tín hiệu mua khi MFI dưới 23 và tín hiệu bán khi MFI trên 80.

  3. Chỉ số Stoch RSI xác định liệu thị trường có bị mua quá mức hay bán quá mức. Nó tạo ra tín hiệu mua khi đường K dưới 34 và tín hiệu bán khi trên 80.

  4. Chỉ số MACD đánh giá xu hướng và động lực của thị trường. Nó tạo ra tín hiệu mua khi đường nhanh nằm dưới đường chậm và biểu đồ âm, và tín hiệu bán cho kịch bản ngược lại.

Phân tích lợi thế

  1. Kết hợp bốn chỉ số chính cải thiện độ chính xác tín hiệu và tránh mất mát do lỗi của một chỉ số duy nhất.

  2. Các lệnh chỉ được đặt khi nhiều chỉ báo cung cấp tín hiệu đồng thời, làm giảm đáng kể khả năng tín hiệu sai.

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

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

  1. Tần suất giao dịch của chiến lược có thể tương đối thấp, với 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ượng giao dịch.

  2. Vẫn có khả năng các chỉ số có thể đưa ra tín hiệu sai. Các thuật toán học máy có thể được giới thiệu để hỗ trợ đánh giá độ tin cậy của các tín hiệu chỉ số.

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

Hướng dẫn tối ưu hóa

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

  2. Thêm logic dừng lỗ. Khóa lỗ dừng nếu lỗ vượt quá một tỷ lệ phần trăm nhất định để kiểm soát hiệu quả lỗ đơn.

  3. Tích hợp các chỉ số tâm lý. Tăng các phán đoán đa chiều như sự nóng bỏng của thị trường và nỗi sợ thị trường để cải thiện không gian lợi nhuận chiến lược.

Kết luận

Bằng cách xác minh tín hiệu thông qua bốn chỉ số chính, chiến lược này có thể làm giảm hiệu quả tỷ lệ tín hiệu sai và là một chiến lược lợi nhuận tần số cao tương đối ổn định.


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

Thêm nữa