Chiến lược này sử dụng chỉ số Chandelier Exit để xác định hướng và động lực của sự đột phá giá và tạo ra tín hiệu mua và bán.
Chiến lược này dựa trên chỉ số Chandelier Exit, thiết lập các đường stop-loss dựa trên mức cao nhất, thấp nhất và phạm vi trung bình. Cụ thể, nó tính toán ATR 22 ngày và nhân nó với một hệ số ( mặc định 3) để lấy giá trị cho các đường stop dài và ngắn. Chiến lược tạo ra tín hiệu bán khi giá phá vỡ dưới mức dừng dài khi dài, và tín hiệu mua khi giá phá vỡ trên mức dừng ngắn khi ngắn.
Chiến lược này chỉ thực hiện các hoạt động mua. Nó kích hoạt một bước vào dài khi giá phá vỡ trên đường dừng dài trước đó và tạo ra một tín hiệu thoát khi giá giảm xuống dưới đường dừng ngắn, đóng vị trí dài.
Giảm rủi ro:
Chiến lược này xác định các cơ hội đảo ngược bằng cách sử dụng các đường dừng động từ chỉ số Chandelier Exit. Nó mua khi giá phá vỡ đường dừng dài và bán khi giá giảm xuống dưới đường dừng ngắn, thực hiện một chiến lược đơn giản một chiều tránh đảo ngược tăng / giảm. Nó kiểm soát hiệu quả rủi ro nhưng thiếu các quy định dừng lỗ và lấy lợi nhuận.
/*backtest start: 2023-12-28 00:00:00 end: 2024-01-04 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Chandelier Exit Strategy", overlay=true) length = input(title='ATR Period', defval=22) mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0) showLabels = input(title='Show Buy/Sell Labels ?', defval=true) useClose = input(title='Use Close Price for Extremums ?', defval=true) highlightState = input(title='Highlight State ?', defval=true) atr = mult * ta.atr(length) longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop var int dir = 1 dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir var color longColor = color.green var color shortColor = color.red longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(longColor, 0)) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title='Long Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(longColor, 0)) plotshape(buySignal and showLabels ? longStop : na, title='Buy Label', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(longColor, 0), textcolor=color.new(color.white, 0)) shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(shortColor, 0)) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title='Short Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(shortColor, 0)) plotshape(sellSignal and showLabels ? shortStop : na, title='Sell Label', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(shortColor, 0), textcolor=color.new(color.white, 0)) changeCond = dir != dir[1] alertcondition(changeCond, title='Alert: CE Direction Change', message='Chandelier Exit has changed direction!') alertcondition(buySignal, title='Alert: CE Buy', message='Chandelier Exit Buy!') alertcondition(sellSignal, title='Alert: CE Sell', message='Chandelier Exit Sell!') // Define initial capital initial_capital =25 // Trigger buy order and close buy order on sell signal if buySignal strategy.entry("Buy", strategy.long, qty = initial_capital / close) if sellSignal strategy.close("Buy")