
Chiến lược này kết hợp hai chỉ số kỹ thuật Bollinger Bands và Index Moving Averages (EMA) nhằm nắm bắt sự biến động giá trong ngắn hạn của thị trường. Bollinger Bands được sử dụng để đo lường sự biến động của giá, trong khi EMA được sử dụng để đánh giá hướng xu hướng. Khi giá đóng cửa phá vỡ EMA và vượt quá đường ray, cho thấy xu hướng tăng có thể tiếp tục, thì đặt nhiều vị trí. Ngược lại, khi giá đóng cửa phá vỡ EMA và thấp hơn đường ray, cho thấy xu hướng giảm có thể tiếp tục, thì đặt trống.
Cốt lõi của chiến lược này là sử dụng sự kết hợp của các dải Bolling và EMA để xác định các cơ hội giao dịch tiềm năng. Các dải Bolling bao gồm ba đường: đường trung tâm (thường là đường trung bình di chuyển đơn giản), đường trung tâm (thường là đường trung bình cộng thêm một số nhân của chênh lệch tiêu chuẩn) và đường trung bình (thường là đường trung bình trừ đi một số nhân của chênh lệch tiêu chuẩn).
Chiến lược này có tính toán giao dịch như sau:
Chiến lược theo dõi xu hướng Bollinger Bands và EMA cung cấp cho các nhà giao dịch một phương pháp có hệ thống để nắm bắt sự biến động giá ngắn hạn của thị trường bằng cách kết hợp các chỉ số biến động và chỉ số theo dõi xu hướng. Ưu điểm của chiến lược này là có thể xác định và theo dõi xu hướng thị trường một cách hiệu quả, kết hợp với các kỹ thuật quản lý rủi ro và quản lý vị trí. Tuy nhiên, chiến lược này cũng phải đối mặt với các rủi ro như nhạy cảm tham số, tiếng ồn thị trường, đảo ngược xu hướng, cần được cải tiến và tối ưu hóa thông qua các tham số tối ưu hóa, xác nhận xu hướng, động thái dừng lỗ, tối ưu hóa quản lý vị trí và phân tích nhiều khung thời gian.
/*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)