Chiến lược giao dịch hội tụ đa chỉ số kết hợp các tín hiệu từ RSI, TD Sequential, MACD và Bollinger Bands để xác định các thiết lập xác suất cao trong các thị trường xu hướng.
Chiến lược logic:
Tính toán RSI 14 giai đoạn. Sử dụng tham số RSIdifference như ngưỡng cho tín hiệu mua / bán. RSI dưới (50 - RSIdifference) cho tín hiệu mua. RSI trên (50 + RSIdifference) cho tín hiệu bán.
Tính toán chỉ số MACD. 5 thanh histogram MACD dương liên tiếp cho tín hiệu mua. 5 thanh âm liên tiếp cho tín hiệu bán.
Tính toán TD Sequential. 2 thanh TD liên tiếp lên cho tín hiệu mua. 2 thanh TS liên tiếp xuống cho tín hiệu bán.
Tính toán 20 giai đoạn Bollinger Bands. Giá vượt trên dải trên cho thấy mua. Giá vượt dưới dải dưới cho thấy bán.
Chỉ tham gia giao dịch khi RSI, MACD và TD Sequential đồng ý về hướng, và Bollinger Bands không mâu thuẫn.
Đặt mục tiêu lợi nhuận và dừng lỗ dựa trên các thông số đầu vào.
Bollinger Bands giúp lọc các thiết lập xác suất cao trong thời gian xu hướng. Tuy nhiên, các thông số chỉ số cần tối ưu hóa kỹ lưỡng, và các tín hiệu phải tương đối hiếm khi tất cả 4 chỉ số đồng ý để tránh giao dịch quá mức.
Nhìn chung, chiến lược đa chỉ số này có thể nắm bắt các thiết lập xác suất cao trong các xu hướng mạnh, nhưng đòi hỏi phải điều chỉnh các tham số cẩn thận và sử dụng thận trọng các tín hiệu chỉ số để tránh giao dịch quá mức.
/*backtest start: 2022-09-05 00:00:00 end: 2023-09-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("RSI, TD Seq, MACD, BB Strategy - Calculation",overlay=true) RSIDifference = input(-7, minval=-50, maxval=50, title="RSI Difference") TD = close > close[4] ?nz(TD[1])+1:0 TS = close < close[4] ?nz(TS[1])+1:0 TDUp = TD - valuewhen(TD < TD[1], TD , 1 ) TDDn = TS - valuewhen(TS < TS[1], TS , 1 ) TDcheckUP = iff(TD == 2, true, false) TDCheckDOWN = iff(TS == 2, true, false) [_, _, histLine] = macd(close, 12, 26, 9) MACDCheckDown = iff(histLine > 0 and histLine[1] > 0 and histLine[2] > 0 and histLine[3] > 0 and histLine[4] > 0, true, false) MACDCheckUp = iff(histLine < 0 and histLine[1] < 0 and histLine[2] < 0 and histLine[3] < 0 and histLine[4] < 0, true, false) RSICal = rsi(close, 14) RSICalNewUp = 50 + RSIDifference RSICalNewDown = 50 - RSIDifference RSICheckUp = iff(RSICal <= RSICalNewUp, true, false) RSICheckDown = iff(RSICal >= RSICalNewDown, true, false) basis = sma(close, 20) dev = 2 * stdev(close, 20) upperBB = basis + dev lowerBB = basis - dev BBCheckUp = iff(close > upperBB, true, false) BBCheckDown = iff(close < lowerBB, true, false) //BBCheckUp = false //BBCheckDown = false BuyCheck = iff(TDcheckUP == true and MACDCheckUp == true and RSICheckUp == true and BBCheckUp == false, true, false) SellCheck = iff(TDCheckDOWN == true and MACDCheckDown == true and RSICheckDown == true and BBCheckDown == false, true, false) ProfitStratA = input(50, minval=0, maxval=10000, title="Profit", step=0.5) useStopLoss = input(false, title="Use Stop Loss?") LossstratA = input(145, minval=0, maxval=10000, title="Stop Loss", step=0.5) ProfitStrat = ProfitStratA * 10 Lossstrat = useStopLoss ? LossstratA * 10 : 1000000 if (strategy.position_size > 0) strategy.exit("BuyClose", "Buy", profit=ProfitStrat, loss=Lossstrat) if (strategy.position_size < 0) strategy.exit("SellClose", "Sell", profit=ProfitStrat, loss=Lossstrat) if (BuyCheck == true and strategy.position_size == 0) strategy.entry("Buy", strategy.long, comment="Long Entry") if (SellCheck == true and strategy.position_size == 0) strategy.entry("Sell", strategy.short, comment="Short Entry") //plotshape(BuyCheck, color=blue, transp=0, style=shape.arrowup, text="Buy\n", location=location.belowbar) //plotshape(SellCheck, color=orange, transp=0, style=shape.arrowdown, text="Sell\n", location=location.abovebar)