Chiến lược này là một hệ thống theo dõi xu hướng kết hợp các đường trung bình động với nhận dạng mô hình Outside Bar. Nó sử dụng đường trung bình động theo hàm số (EMA) 5 giai đoạn và 9 giai đoạn làm chỉ số xu hướng chính, cùng với đường mô hình Outside Bar để xác nhận tín hiệu. Chiến lược bao gồm các thiết lập stop-loss và take-profit năng động dựa trên chiều cao Outside Bar, cũng như một cơ chế đảo ngược vị trí được kích hoạt bởi các lượt stop-loss.
Logic cốt lõi dựa trên các yếu tố chính sau: 1. Sử dụng đường chéo EMA 5 và 9 giai đoạn để xác định hướng xu hướng cơ bản 2. Xác nhận biến động thị trường thông qua mô hình Outside Bar (các thanh hiện tại cao hơn các thanh trước cao và thấp hơn các thanh trước thấp) 3. Tham gia giao dịch khi tín hiệu chéo EMA trùng với mô hình Outside Bar 4. Sử dụng chiều cao Outside Bar để thiết lập động mức dừng lỗ và lấy lợi nhuận, với lợi nhuận lấy 50% và dừng lỗ ở 100% chiều cao thanh 5. Tự động thực hiện các vị trí đảo ngược khi stop-loss được kích hoạt để nắm bắt sự đảo ngược xu hướng tiềm năng
Đây là một hệ thống chiến lược kết hợp phân tích kỹ thuật cổ điển với các khái niệm giao dịch định lượng hiện đại. Sự kết hợp giữa các đường trung bình động và mô hình Outside Bar đảm bảo cả việc theo dõi xu hướng kịp thời và tạo tín hiệu đáng tin cậy. Thiết kế các cơ chế dừng lỗ / lấy lợi nhuận và đảo ngược vị trí năng động cho thấy sự tập trung mạnh mẽ vào quản lý rủi ro, làm cho chiến lược thực tế khả thi. Mặc dù có chỗ cho tối ưu hóa, khung tổng thể đã đáp ứng các điều kiện cơ bản cho giao dịch trực tiếp.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy(title="Outside Bar EMA Crossover Strategy with EMA Shift", shorttitle="Outside Bar EMA Cross", overlay=true) // Input for EMA lengths lenEMA1 = input.int(5, title="EMA 5 Length") lenEMA2 = input.int(9, title="EMA 9 Length") // Input for EMA 9 shift emaShift = input.int(1, title="EMA 9 Shift", minval=0) // Calculate EMAs ema1 = ta.ema(close, lenEMA1) ema2 = ta.ema(close, lenEMA2) // Apply shift to EMA 9 ema2Shifted = na(ema2[emaShift]) ? na : ema2[emaShift] // Dịch chuyển EMA 9 bằng cách sử dụng offset // Plot EMAs plot(ema1, title="EMA 5", color=color.blue, linewidth=2) plot(ema2Shifted, title="EMA 9 Shifted", color=color.red, linewidth=2) // Outside Bar condition outsideBar() => high > high[1] and low < low[1] // Cross above EMA 5 and EMA 9 (shifted) crossAboveEMA = close > ema1 and close > ema2Shifted // Cross below EMA 5 and EMA 9 (shifted) crossBelowEMA = close < ema1 and close < ema2Shifted // Outside Bar cross above EMA 5 and EMA 9 (shifted) outsideBarCrossAbove = outsideBar() and crossAboveEMA // Outside Bar cross below EMA 5 and EMA 9 (shifted) outsideBarCrossBelow = outsideBar() and crossBelowEMA // Plot shapes for visual signals plotshape(series=outsideBarCrossAbove, title="Outside Bar Cross Above", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", textcolor=color.white) plotshape(series=outsideBarCrossBelow, title="Outside Bar Cross Below", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", textcolor=color.white) // Calculate Outside Bar height outsideBarHeight = high - low // Chiều cao của nến Outside Bar // Calculate TP and SL levels tpRatio = 0.5 // TP = 50% chiều cao nến Outside Bar slRatio = 1.0 // SL = 100% chiều cao nến Outside Bar tpLevelLong = close + outsideBarHeight * tpRatio // TP cho lệnh mua slLevelLong = close - outsideBarHeight * slRatio // SL cho lệnh mua tpLevelShort = close - outsideBarHeight * tpRatio // TP cho lệnh bán slLevelShort = close + outsideBarHeight * slRatio // SL cho lệnh bán // Strategy logic if (outsideBarCrossAbove) strategy.entry("Buy", strategy.long) strategy.exit("Take Profit/Stop Loss", "Buy", stop=slLevelLong, limit=tpLevelLong) // Thêm TP và SL if (outsideBarCrossBelow) strategy.entry("Sell", strategy.short) strategy.exit("Take Profit/Stop Loss", "Sell", stop=slLevelShort, limit=tpLevelShort) // Thêm TP và SL // Logic: Nếu lệnh Buy bị Stop Loss => Vào lệnh Sell if (strategy.position_size > 0 and close <= slLevelLong) strategy.close("Buy") strategy.entry("Sell After Buy SL", strategy.short) // Logic: Nếu lệnh Sell bị Stop Loss => Vào lệnh Buy if (strategy.position_size < 0 and close >= slLevelShort) strategy.close("Sell") strategy.entry("Buy After Sell SL", strategy.long) // Cảnh báo khi label Buy xuất hiện alertcondition(condition=outsideBarCrossAbove, title="Label Buy Xuất Hiện", message="Label Buy xuất hiện tại giá: {{close}}") // Cảnh báo khi label Sell xuất hiện alertcondition(condition=outsideBarCrossBelow, title="Label Sell Xuất Hiện", message="Label Sell xuất hiện tại giá: {{close}}")