Chiến lược này kết hợp quy tắc thoát Chandelier, Trung bình di chuyển trơn giản không chậm trễ (ZLSMA) và phát hiện đỉnh khối lượng tương đối (RVOL) để tạo thành một hệ thống giao dịch hoàn chỉnh. Quy tắc thoát Chandelier điều chỉnh động vị trí dừng lỗ dựa trên phạm vi trung bình thực sự (ATR), cho phép nó thích nghi tốt hơn với những thay đổi của thị trường. ZLSMA nắm bắt chính xác xu hướng giá, cung cấp hướng dẫn cho giao dịch.
Chiến lược ra khỏi đèn chùm tăng cường ZLSMA với phát hiện khối lượng tăng là một chiến lược theo xu hướng kiểm soát rủi ro giao dịch trong khi nắm bắt các cơ hội xu hướng thông qua dừng lỗ năng động, phán đoán xu hướng và phát hiện khối lượng tăng. Logic chiến lược rõ ràng và dễ hiểu và thực hiện, nhưng nó vẫn cần được tối ưu hóa và cải thiện dựa trên các đặc điểm thị trường cụ thể và các công cụ giao dịch khi áp dụng trong thực tế. Bằng cách giới thiệu nhiều chỉ số xác nhận tín hiệu hơn, tối ưu hóa các điều kiện thoát, thiết lập các tham số hợp lý và thực hiện quản lý vị trí và kiểm soát rủi ro nghiêm ngặt, chiến lược này có tiềm năng trở thành một công cụ giao dịch mạnh mẽ và hiệu quả.
/*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("Chandelier Exit Strategy with ZLSMA and Volume Spike Detection", shorttitle="CES with ZLSMA and Volume", overlay=true, process_orders_on_close=true, calc_on_every_tick=false) // Chandelier Exit Inputs lengthAtr = input.int(title='ATR Period', defval=1) mult = input.float(title='ATR Multiplier', step=0.1, defval=2.0) useClose = input.bool(title='Use Close Price for Extremums', defval=true) // Calculate ATR atr = mult * ta.atr(lengthAtr) // Calculate Long and Short Stops longStop = (useClose ? ta.highest(close, lengthAtr) : ta.highest(high, lengthAtr)) - atr shortStop = (useClose ? ta.lowest(close, lengthAtr) : ta.lowest(low, lengthAtr)) + atr // Update stops based on previous values longStop := na(longStop[1]) ? longStop : close[1] > longStop[1] ? math.max(longStop, longStop[1]) : longStop shortStop := na(shortStop[1]) ? shortStop : close[1] < shortStop[1] ? math.min(shortStop, shortStop[1]) : shortStop // Determine Direction var int dir = na dir := na(dir[1]) ? (close > shortStop ? 1 : close < longStop ? -1 : na) : close > shortStop[1] ? 1 : close < longStop[1] ? -1 : dir[1] // ZLSMA Inputs lengthZLSMA = input.int(title="ZLSMA Length", defval=50) offsetZLSMA = input.int(title="ZLSMA Offset", defval=0) srcZLSMA = input.source(close, title="ZLSMA Source") // ZLSMA Calculation lsma = ta.linreg(srcZLSMA, lengthZLSMA, offsetZLSMA) lsma2 = ta.linreg(lsma, lengthZLSMA, offsetZLSMA) eq = lsma - lsma2 zlsma = lsma + eq // Plot ZLSMA plot(zlsma, title="ZLSMA", color=color.purple, linewidth=3) // Swing High/Low Calculation swingHigh = ta.highest(high, 5) swingLow = ta.lowest(low, 5) // Relative Volume (RVOL) Calculation rvolLength = input.int(20, title="RVOL Length") rvolThreshold = input.float(1.5, title="RVOL Threshold") avgVolume = ta.sma(volume, rvolLength) rvol = volume / avgVolume // Define buy and sell signals based on ZLSMA and Volume Spike buySignal = (dir == 1 and dir[1] == -1 and close > zlsma and rvol > rvolThreshold) sellSignal = (dir == -1 and dir[1] == 1 and close < zlsma and rvol > rvolThreshold) // Define exit conditions based on ZLSMA exitLongSignal = (close < zlsma) exitShortSignal = (close > zlsma) // Strategy Entries and Exits if (buySignal) strategy.entry("Long", strategy.long, stop=swingLow) if (sellSignal) strategy.entry("Short", strategy.short, stop=swingHigh) if (exitLongSignal) strategy.close("Long") if (exitShortSignal) strategy.close("Short") // Alerts alertcondition(buySignal, title='Alert: CE Buy', message='Chandelier Exit Buy!') alertcondition(sellSignal, title='Alert: CE Sell', message='Chandelier Exit Sell!')