Bollinger Bands và EMA Trend Following Strategy kết hợp hai chỉ số kỹ thuật, Bollinger Bands và Exponential Moving Average (EMA), để xác định các biến động giá ngắn hạn tiềm tàng trên thị trường. Bollinger Bands được sử dụng để đo biến động giá, trong khi EMA được sử dụng để đánh giá hướng của xu hướng. Khi giá đóng vượt trên EMA và vượt quá dải trên, nó cho thấy một sự tiếp tục tiềm năng của xu hướng tăng, kích hoạt một vị trí dài. Ngược lại, khi giá đóng vượt dưới EMA và giảm xuống dưới dải dưới, nó gợi ý một sự tiếp tục tiềm năng của xu hướng giảm, tạo ra một vị trí ngắn. Chiến lược cũng kết hợp các kỹ thuật quản lý rủi ro như mức lỗ và lợi nhuận để ngăn chặn rủi ro giao dịch và khóa lợi nhuận. Nhìn chung, chiến lược cung cấp cho các nhà giao dịch một cách có hệ thống để tiếp cận các giao dịch có thể đạt được kết quả tốt, dựa trên các điều kiện nhập cảnh và xác suất thành công.
Cốt lõi của chiến lược này nằm trong sự kết hợp của Bollinger Bands và EMA để xác định các cơ hội giao dịch tiềm năng. Bollinger Bands bao gồm ba đường: dải giữa (thường là một đường trung bình di chuyển đơn giản), dải trên (dải giữa cộng với một số lượng nhất định các độ lệch chuẩn), và dải dưới (dải giữa trừ một số lượng nhất định các độ lệch chuẩn).
Logic giao dịch của chiến lược này là như sau:
Chiến lược theo xu hướng Bollinger Bands và EMA cung cấp cho các nhà giao dịch một cách tiếp cận có hệ thống để nắm bắt các biến động giá ngắn hạn trên thị trường bằng cách kết hợp chỉ số biến động và chỉ số theo xu hướng. Sức mạnh của chiến lược nằm trong khả năng xác định và theo dõi các xu hướng thị trường một cách hiệu quả trong khi kết hợp các kỹ thuật quản lý rủi ro và kích cỡ vị trí. Tuy nhiên, chiến lược cũng phải đối mặt với các rủi ro như độ nhạy cảm của các tham số, tiếng ồn thị trường, đảo ngược xu hướng, và cần được cải thiện và tối ưu hóa thông qua tối ưu hóa tham số, xác nhận xu hướng, dừng mất năng động và lấy lợi nhuận, tối ưu hóa định vị và phân tích nhiều khung thời gian. Nhìn chung, Bollinger Bands và EMA Trend Following Strategy cung cấp cho các nhà giao dịch một khuôn khổ giao dịch khả thi, nhưng nó đòi hỏi sự điều chỉnh và tối ưu hóa phù hợp dựa trên các điều kiện và mục tiêu giao dịch cụ thể của thị trường trong các ứng dụng thực tế.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands and EMA Strategy", overlay=true) // Bollinger Bands Inputs bb_length = input.int(20, minval=1, title="Bollinger Bands Length") bb_mult = input.float(2.0, minval=0.001, maxval=50, title="Bollinger Bands StdDev") bb_src = input(close, title="Bollinger Bands Source") bb_offset = input.int(0, title="Bollinger Bands Offset", minval=-500, maxval=500) // EMA Inputs ema_period = input.int(9, minval=1, title="EMA Period") ema_src = input(close, title="EMA Source") ema_offset = input.int(0, title="EMA Offset", minval=-500, maxval=500) // Calculate Bollinger Bands bb_basis = ta.sma(bb_src, bb_length) bb_dev = bb_mult * ta.stdev(bb_src, bb_length) bb_upper = bb_basis + bb_dev bb_lower = bb_basis - bb_dev // Plot Bollinger Bands plot(bb_basis, "BB Basis", color=color.blue, offset=bb_offset) p1 = plot(bb_upper, "BB Upper", color=color.red, offset=bb_offset) p2 = plot(bb_lower, "BB Lower", color=color.green, offset=bb_offset) fill(p1, p2, title="BB Background", color=color.rgb(33, 150, 243, 95)) // Calculate EMA ema_value = ta.ema(ema_src, ema_period) // Plot EMA plot(ema_value, title="EMA", color=color.orange, offset=ema_offset) // Strategy Conditions long_condition = ta.crossover(close, ema_value) and close > bb_upper short_condition = ta.crossunder(close, ema_value) and close < bb_lower // Define Stop Loss and Take Profit Levels stop_loss_pct = input.float(0.5, title="Stop Loss (%)") take_profit_pct = input.float(1.0, title="Take Profit (%)") stop_loss_level_long = close * (1 - stop_loss_pct / 100) take_profit_level_long = close * (1 + take_profit_pct / 100) stop_loss_level_short = close * (1 + stop_loss_pct / 100) take_profit_level_short = close * (1 - take_profit_pct / 100) // Calculate Position Size Based on Risk Per Trade risk_per_trade = input.float(1.0, title="Risk Per Trade (%)") capital_at_risk = strategy.equity * risk_per_trade / 100 risk_per_unit_long = math.abs(close - stop_loss_level_long) risk_per_unit_short = math.abs(close - stop_loss_level_short) position_size_long = capital_at_risk / risk_per_unit_long position_size_short = capital_at_risk / risk_per_unit_short // Enter Long and Short Trades if long_condition strategy.entry("Long", strategy.long, qty=position_size_long) strategy.exit("Take Profit", "Long", limit=take_profit_level_long) strategy.exit("Stop Loss", "Long", stop=stop_loss_level_long) if short_condition strategy.entry("Short", strategy.short, qty=position_size_short) strategy.exit("Take Profit", "Short", limit=take_profit_level_short) strategy.exit("Stop Loss", "Short", stop=stop_loss_level_short)