Chiến lược này kết hợp nhiều chỉ số để xác định các cơ hội giao dịch trong khung thời gian hàng ngày cho Bitcoin. Nó chủ yếu sử dụng các chỉ số như MACD, RSI, Stoch RSI, cùng với hướng của đường trung bình động để xác định hướng xu hướng hiện tại để tạo ra tín hiệu mua và bán.
Chiến lược sử dụng các chỉ số chính sau:
MACD (Fast MA - Slow MA) và đường tín hiệu của nó.
RSI (Chỉ số sức mạnh tương đối). RSI vượt qua ngưỡng cung cấp tín hiệu mua.
Stoch RSI. Stoch RSI cho thấy mức mua quá mức / bán quá mức của RSI. Stoch RSI dưới ngưỡng cung cấp tín hiệu mua, trong khi trên ngưỡng cung cấp tín hiệu bán.
Hướng đi trung bình động. Giá đóng vượt dưới MA cho tín hiệu bán.
Theo các chỉ số này, các tín hiệu giao dịch là:
Nhận tín hiệu: Khi nào(Stoch RSI < Threshold) AND (MACD crossing above threshold OR RSI crossing above threshold)
Bán tín hiệu: Khi nào(MACD crossing below 0) AND (Close below MA OR Stoch RSI > Threshold)
Sử dụng nhiều chỉ số cùng nhau có thể xác định tốt hơn hướng xu hướng hiện tại và xác định các điểm đảo ngược xu hướng để tham gia giao dịch.
Kết hợp nhiều chỉ số cải thiện độ chính xác và tránh các tín hiệu sai từ một chỉ số duy nhất.
MACD cho thấy hướng xu hướng và sức mạnh. RSI phản ánh mức mua quá mức / bán quá mức. RSI cổ phiếu xác định mua quá mức / bán quá mức của RSI. MA cho thấy hướng xu hướng. Các chỉ số này xác minh lẫn nhau.
Các tín hiệu mua/bán đòi hỏi sự kết hợp của nhiều chỉ số, lọc ra một số tín hiệu sai và tránh giao dịch không cần thiết.
Backtest bắt đầu từ ngày 1/1/2017, bao gồm sự tăng trưởng khổng lồ của Bitcoin vào cuối năm 2017.
Dừng lỗ được thiết lập để kiểm soát lỗ trong các giao dịch đơn.
Mặc dù sử dụng nhiều chỉ số cải thiện độ chính xác, sự khác biệt giữa chúng vẫn có thể dẫn đến một số tín hiệu sai.
Mức dừng lỗ tối ưu có thể cần điều chỉnh cho các tình huống thị trường khác nhau.
Thời gian hàng ngày ngăn chặn các hoạt động chi tiết trong khoảng thời gian ngắn hơn không thể phản ứng với những động thái đột ngột ngắn hạn.
Chiến lược chỉ được kiểm tra lại trên dữ liệu lịch sử hạn chế. Rủi ro quá mức tồn tại. Yêu cầu kiểm tra thêm trong khung thời gian dài hơn và nhiều thị trường hơn.
Kiểm tra nhiều kết hợp chỉ số hơn để tìm ra các chiến lược đa chỉ số tối ưu.
Tối ưu hóa các tham số của các chỉ số để có được các giá trị tốt hơn.
Kiểm tra các mức dừng lỗ khác nhau để tìm tỷ lệ rủi ro / phần thưởng tối ưu.
Thực hiện backtests trên dữ liệu lịch sử lâu hơn để tránh quá phù hợp.
Khám phá việc áp dụng logic chiến lược trong khung thời gian tần suất cao hơn để giao dịch thường xuyên hơn.
Chiến lược này kết hợp MACD, RSI, Stoch RSI và các chỉ số khác để xác định hướng xu hướng hàng ngày của bitcoin và xác định sự đảo ngược xu hướng cho việc gia nhập thương mại. Đánh giá lại cho thấy kết quả tích cực nhưng vẫn cần xác minh thêm trong khung thời gian dài hơn và nhiều thị trường hơn để tránh rủi ro quá mức. Việc tối ưu hóa thêm các thông số chỉ số và mức dừng lỗ / lấy lợi nhuận có thể cải thiện kết quả. Chiến lược cung cấp một ý tưởng ban đầu về cách tiếp cận kết hợp nhiều chỉ số đáng để khám phá và nâng cao sâu hơn.
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Original code is from CredibleHulk and modified by bennef strategy("BTC Daily Strategy BF", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075) /////////////// Time Frame /////////////// testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true /////////////// Input Params /////////////// rsi_threshold = input(30) rsi_length = input(4) srsi_length = input(8) srsi_smooth = input(4) srsi_sell_threshold = input(57) length = input(14) dma_signal_threshold = input(-1) fastLength = input(11) slowlength = input(18) MACDLength = input(6) MACD_signal_threshold = input(-2) short_loss_tol = input(5) long_loss_tol = input(5) stop_level_long = strategy.position_avg_price * (1 - long_loss_tol / 100.0) stop_level_short = strategy.position_avg_price * (1 + short_loss_tol / 100.0) /////////////// Signal generation /////////////// // MACD MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD // RSI and Stochastic RSI rs = rsi(close, rsi_length) k = sma(stoch(rs, rs, rs, srsi_length), srsi_smooth) // SMA norm = sma(ohlc4, length) threshold = close - norm /////////////// Strategy /////////////// long = ((crossover(delta, MACD_signal_threshold) or crossover(rs, rsi_threshold)) and k < srsi_sell_threshold) short = (crossunder(delta, 0) or (crossunder(threshold, dma_signal_threshold) and k > srsi_sell_threshold)) if testPeriod() strategy.entry("L", strategy.long, when = long) strategy.entry("S", strategy.short, when = short) strategy.exit("stop loss L", from_entry = "L", stop = stop_level_long) strategy.exit("stop loss S", from_entry = "S", stop = stop_level_short) /////////////// Plotting /////////////// // MACD plot(delta, color = delta > MACD_signal_threshold ? color.lime : delta < 0 ? color.red : color.yellow) MACD_signal_threshold_line = hline(MACD_signal_threshold, color = color.yellow, title = "MACD Signal Threshold") // RSI plot(rs, color = rs > rsi_threshold ? color.lime : color.fuchsia) rsi_threshold_line = hline(rsi_threshold, color = color.fuchsia, title = "RSI Threshold") // Stochastic RSI plot(k, color = k > srsi_sell_threshold ? color.lime : color.red) srsi_sell_threshold_line = hline(srsi_sell_threshold, color = color.white, title = "Stoch RSI Threshold") // SMA plot(threshold / 100, color = threshold < dma_signal_threshold ? color.red : color.blue) dma_signal_threshold_line = hline (dma_signal_threshold, color = color.blue, title = "DMA Signal Threshold") bgcolor(long ? color.lime : short ? color.red : na, transp=50)