Chiến lược này kết hợp Bollinger Bands, RSI, nhiều đường trung bình động và chỉ số MACD để xây dựng một hệ thống giao dịch hoàn chỉnh. Thứ nhất, nó sử dụng Bollinger Bands để xác định biến động giá và vị trí của giá so với dải giữa để xác định xu hướng. Đồng thời, nó sử dụng chỉ số RSI để đánh giá các điều kiện mua quá nhiều và bán quá nhiều và phát hiện sự đảo ngược xu hướng tiềm ẩn bằng cách sử dụng các chênh lệch RSI. Nhiều đường trung bình được sử dụng để theo dõi xu hướng chuyển động và xác định mức hỗ trợ và kháng cự. Cuối cùng, chỉ số MACD cũng được sử dụng để giúp đánh giá xu hướng và đảo ngược tiềm năng. Bằng cách xem xét toàn diện các chỉ số này, chiến lược xây dựng các điều kiện bước vào và bước ra hoàn chỉnh để xây dựng một chiến lược giao dịch.
Chiến lược này xây dựng một hệ thống giao dịch tương đối toàn diện từ nhiều khía cạnh, bao gồm xác định xu hướng, đánh giá mua quá mức và bán quá mức, phân tích quy mô thời gian đa và kiểm soát vị trí. Tuy nhiên, chiến lược cần tối ưu hóa hơn nữa trong việc đối phó với thị trường hỗn loạn và các sự kiện cực đoan, và nó thiếu tối ưu hóa tham số và kiểm soát rủi ro có hệ thống hơn. Trong tương lai, chiến lược có thể tiếp tục cải thiện về việc lọc tín hiệu tinh tế hơn, điều chỉnh trọng lượng năng động và phản ứng với các sự kiện cực đoan. Thông qua tối ưu hóa kiểm tra hậu và xác minh giao dịch trực tiếp liên tục, chiến lược này có tiềm năng phát triển thành một chiến lược giao dịch định lượng mạnh mẽ và bền vững.
/*backtest start: 2023-05-21 00:00:00 end: 2024-05-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands + RSI Strategy with MA", overlay=true) // Bollinger Bands length = input.int(20, title="BB Length") mult = input.float(2.0, title="BB Mult") basis = ta.sma(close, length) dev = mult * ta.stdev(close, length) upper_band = basis + dev lower_band = basis - dev // RSI rsi_length = input.int(14, title="RSI Length") rsi_oversold = input.int(30, title="RSI Oversold", minval=0, maxval=100) rsi_overbought = input.int(70, title="RSI Overbought", minval=0, maxval=100) rsi = ta.rsi(close, rsi_length) // RSI Divergence rsi_divergence_bottom = ta.crossunder(rsi, rsi_oversold) rsi_divergence_peak = ta.crossunder(rsi_overbought, rsi) // Moving Averages ma34 = ta.sma(close, 34) ma89 = ta.sma(close, 89) ma144 = ta.sma(close, 144) ma233 = ta.sma(close, 233) ma377 = ta.sma(close, 377) ma610 = ta.sma(close, 610) // MACD Calculation [macd_line, signal_line, _] = ta.macd(close, 12, 26, 9) macd_histogram = macd_line - signal_line // MACD Divergence macd_divergence_bottom = ta.crossunder(macd_histogram, 0) macd_divergence_peak = ta.crossover(macd_histogram, 0) // Conditions for Buy and Sell basis_gt_ma34 = basis > ma34 ma34_gt_ma89 = ma34 > ma89 // Entry condition buy_condition = basis_gt_ma34 and ma34_gt_ma89 sell_condition = basis <ma34 // Calculate position size position_size = 1.0 // 100% capital initially // Update position size based on conditions if (sell_condition) position_size := 0.5 // Sell half of the position if (not basis_gt_ma34) position_size := 0.0 // Sell all if basis < ma34 // Entry and exit strategy if (buy_condition) strategy.entry("Buy", strategy.long, qty=position_size) if (sell_condition) strategy.close("Buy") // Plot Bollinger Bands and Moving Averages bb_fill_color = basis > basis[1] ? color.new(color.blue, 90) : color.new(color.blue, 10) plot(basis, color=color.blue, title="Basis") plot(upper_band, color=color.red, title="Upper Band") plot(lower_band, color=color.green, title="Lower Band") fill(plot1=plot(upper_band), plot2=plot(lower_band), color=bb_fill_color, title="BB Fill") plot(ma34, color=color.orange, title="MA34") plot(ma89, color=color.purple, title="MA89") plot(ma144, color=color.gray, title="MA144") plot(ma233, color=color.blue, title="MA233") plot(ma377, color=color.red, title="MA377") plot(ma610, color=color.green, title="MA610") // Plot RSI Divergence plotshape(series=rsi_divergence_bottom, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small) plotshape(series=rsi_divergence_peak, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small) // Plot MACD Histogram Divergence plotshape(series=macd_divergence_bottom, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(series=macd_divergence_peak, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)