Chiến lược này sử dụng 5 ngày chỉ số trung bình chuyển động (EMA) và Bollinger Bands (BB) để xác định các cơ hội giao dịch tiềm năng trên thị trường. Khi giá vượt trên Bollinger Band trên hoặc dưới Bollinger Band dưới, và các điều kiện cụ thể được đáp ứng, chiến lược tạo ra tín hiệu mua hoặc bán. Chiến lược nhằm mục đích nắm bắt các biến động giá đáng kể trên thị trường trong khi sử dụng mức dừng lỗ và mức giá mục tiêu để quản lý rủi ro và tối đa hóa lợi nhuận.
Cốt lõi của chiến lược này là sử dụng EMA 5 ngày và Bollinger Bands để xác định xu hướng và biến động của thị trường. Khi giá phá vỡ trên Bollinger Band trên cùng, và mức cao của nến trước đó là trên EMA 5 ngày, chiến lược tạo ra tín hiệu bán. Ngược lại, khi giá phá vỡ dưới Bollinger Band dưới cùng, và mức thấp của nến trước đó là dưới EMA 5 ngày, chiến lược tạo ra tín hiệu mua. Cách tiếp cận này giúp xác định xu hướng có khả năng đảo ngược hoặc điểm đột phá.
Một khi giao dịch được nhập, chiến lược thiết lập mức dừng lỗ và mức giá mục tiêu. Stop loss được đặt theo hướng ngược lại với giá nhập để hạn chế tổn thất tiềm năng. Mức giá mục tiêu được tính dựa trên một số điểm cố định (ví dụ: 1000 điểm) để khóa lợi nhuận dự kiến. Nếu giá đạt mức dừng lỗ hoặc mức giá mục tiêu, chiến lược đóng giao dịch và thoát khỏi vị trí.
Chiến lược EMA và Bollinger Bands Breakout sử dụng hai chỉ số kỹ thuật được sử dụng phổ biến để nắm bắt các biến động giá đáng kể trên thị trường. Chiến lược có điều kiện nhập cảnh rõ ràng, các biện pháp quản lý rủi ro và mục tiêu lợi nhuận, giúp dễ hiểu và thực hiện. Tuy nhiên, hiệu suất của chiến lược có thể bị ảnh hưởng bởi biến động thị trường và điều kiện không có xu hướng. Bằng cách giới thiệu các tham số thích nghi, cơ chế lọc tín hiệu và tối ưu hóa tham số, tính mạnh mẽ và lợi nhuận của chiến lược có thể được tăng thêm.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Nifty Bank Strategy", overlay=true) // Parameters lengthEMA = 5 lengthBB = 20 multBB = 1.5 targetPoints = 1000 // Calculate 5-day EMA ema5 = ta.ema(close, lengthEMA) // Calculate Bollinger Bands (length 20, multiplier 1.5) basis = ta.sma(close, lengthBB) dev = multBB * ta.stdev(close, lengthBB) upperBB = basis + dev lowerBB = basis - dev // Define strategy variables var float entryPrice = na var float stopLoss = na var float targetPrice = na var bool inTrade = false var bool isLong = false var float triggerHigh = na var float triggerLow = na var float triggerClose = na if not inTrade // Short Entry Trigger Condition if low > ema5 and low > upperBB and high > upperBB triggerLow := low triggerHigh := high triggerClose := close label.new(bar_index, high, "Waiting for short trigger", color=color.yellow) // Long Entry Trigger Condition else if high < ema5 and high < lowerBB and low < lowerBB triggerHigh := high triggerLow := low triggerClose := close label.new(bar_index, low, "Waiting for long trigger", color=color.yellow) // Check for Short Entry if not inTrade and na(triggerClose) == false and close < triggerClose if low < triggerLow entryPrice := close stopLoss := triggerHigh targetPrice := entryPrice - targetPoints strategy.entry("Short", strategy.short) label.new(bar_index, high, "Short", color=color.red, style=label.style_label_down) inTrade := true isLong := false triggerLow := na triggerHigh := na triggerClose := na // Check for Long Entry if not inTrade and na(triggerClose) == false and close > triggerClose if high > triggerHigh entryPrice := close stopLoss := triggerLow targetPrice := entryPrice + targetPoints strategy.entry("Long", strategy.long) label.new(bar_index, low, "Long", color=color.green, style=label.style_label_up) inTrade := true isLong := true triggerLow := na triggerHigh := na triggerClose := na // Manage Short Trade if inTrade and not isLong if high >= stopLoss strategy.close("Short", comment="SL Hit") label.new(bar_index, high, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if low <= targetPrice strategy.close("Short", comment="Target Hit") label.new(bar_index, low, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Manage Long Trade if inTrade and isLong if low <= stopLoss strategy.close("Long", comment="SL Hit") label.new(bar_index, low, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if high >= targetPrice strategy.close("Long", comment="Target Hit") label.new(bar_index, high, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Plotting plot(ema5, color=color.orange, title="5-day EMA") plot(upperBB, color=color.red, title="Upper Bollinger Band") plot(lowerBB, color=color.purple, title="Lower Bollinger Band") // Plot trade entry and exit points plotshape(series=inTrade and isLong ? entryPrice : na, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal") plotshape(series=inTrade and not isLong ? entryPrice : na, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")