Эта стратегия сочетает в себе правило выхода Chandelier, упрощенную скользящую среднюю с нулевым отставанием (ZLSMA) и обнаружение пика относительного объема (RVOL) для формирования полной торговой системы. Правило выхода Chandelier динамически регулирует позицию стоп-лосса на основе среднего истинного диапазона (ATR), что позволяет лучше адаптироваться к изменениям рынка. ZLSMA точно фиксирует тенденции цен, обеспечивая руководство направлением для торговли.
ZLSMA-Enhanced Chandelier Exit Strategy with Volume Spike Detection - это стратегия, следующая за трендом, которая контролирует торговый риск, захватывая при этом возможности тренда с помощью динамического стоп-лосса, суждения о тренде и обнаружения пика объема. Логика стратегии ясна и легко понять и реализовать, но ее все еще необходимо оптимизировать и улучшить на основе конкретных рыночных характеристик и торговых инструментов при применении на практике. Благодаря внедрению большего количества индикаторов подтверждения сигналов, оптимизации условий выхода, разумному установлению параметров и реализации строгого управления позициями и контроля рисков эта стратегия имеет потенциал стать надежным и эффективным торговым инструментом.
/*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!')