Эта стратегия представляет собой интеллектуальную торговую систему, которая сочетает в себе отслеживание тренда с фильтрацией волатильности. Она определяет рыночные тенденции с использованием экспоненциальных скользящих средних (EMA), определяет сроки входа через True Range (TR) и динамические фильтры волатильности и управляет рисками с использованием динамического механизма стоп-лосс / take-profit, основанного на волатильности. Стратегия поддерживает два режима торговли: скальп и свинг, которые могут гибко переключаться в зависимости от различных рыночных условий и стилей торговли.
Основная логика включает следующие ключевые компоненты: Идентификация тренда: использует 50-периодную EMA в качестве фильтра тренда, принимая только длинные позиции выше EMA и короткие позиции ниже EMA. 2. Фильтрация волатильности: рассчитывает EMA истинного диапазона (TR) и использует регулируемый коэффициент фильтрации (по умолчанию 1.5) для фильтрации рыночного шума. Условия входа: объединяет анализ трех последовательных свечей, требующих движения цены, чтобы показать непрерывность и ускорение характеристик. 4. Стоп-лосс/взять-прибыль: устанавливается на основе текущего TR в режиме скальпа и на основе предыдущих максимумов/низких в режиме свинга, достигая динамического управления рисками.
Эта стратегия создает полную торговую систему путем органичного сочетания следующего тренда, фильтрации волатильности и динамического управления рисками. Ее сильные стороны заключаются в ее адаптируемости, управляемом риске, обеспечивая при этом значительный потенциал оптимизации. Благодаря правильному настройке параметров и соответствующему выбору режима торговли стратегия может поддерживать стабильную производительность в различных рыночных условиях. Трейдерам рекомендуется проводить тщательное тестирование и оптимизацию параметров перед живой торговлей и вносить соответствующие корректировки на основе специфических характеристик торгового инструмента.
/*backtest start: 2024-12-17 00:00:00 end: 2025-01-15 08:00:00 period: 2h basePeriod: 2h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Creativ3mindz //@version=5 strategy("Scalp Slayer (I)", overlay=true) // Input Parameters filterNumber = input.float(1.5, "Filter Number", minval=1.0, maxval=10.0, tooltip="Higher = More aggressive Filter, Lower = Less aggressive") emaTrendPeriod = input.int(50, "EMA Trend Period", minval=1, tooltip="Period for the EMA used for trend filtering") lookbackPeriod = input.int(20, "Lookback Period for Highs/Lows", minval=1, tooltip="Period for determining recent highs/lows") colorTP = input.color(title='Take Profit Color', defval=color.orange) colorSL = input.color(title='Stop Loss Color', defval=color.red) // Inputs for visibility showBuyLabels = input.bool(true, title="Show Buy Labels") showSellLabels = input.bool(true, title="Show Sell Labels") // Alert Options alertOnCondition = input.bool(true, title="Alert on Condition Met", tooltip="Enable to alert when condition is met") // Trade Mode Toggle tradeMode = input.bool(false, title="Trade Mode (ON = Swing, OFF = Scalp)", tooltip="Swing-mode you can use your own TP/SL.") // Calculations tr = high - low ema = filterNumber * ta.ema(tr, 50) trendEma = ta.ema(close, emaTrendPeriod) // Calculate the EMA for the trend filter // Highest and lowest high/low within lookback period for swing logic swingHigh = ta.highest(high, lookbackPeriod) swingLow = ta.lowest(low, lookbackPeriod) // Variables to track the entry prices and SL/TP levels var float entryPriceLong = na var float entryPriceShort = na var float targetPriceLong = na var float targetPriceShort = na var float stopLossLong = na var float stopLossShort = na var bool tradeActive = false // Buy and Sell Conditions with Trend Filter buyCondition = close > trendEma and // Buy only if above the trend EMA close[2] > open[2] and close[1] > open[1] and close > open and (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and (math.abs(close - open) > math.abs(close[1] - open[1])) and close > close[1] and close[1] > close[2] and tr > ema sellCondition = close < trendEma and // Sell only if below the trend EMA close[2] < open[2] and close[1] < open[1] and close < open and (math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and (math.abs(close - open) > math.abs(close[1] - open[1])) and close < close[1] and close[1] < close[2] and tr > ema // Entry Rules if (buyCondition and not tradeActive) entryPriceLong := close // Track entry price for long position stopLossLong := tradeMode ? ta.lowest(low, lookbackPeriod) : swingLow // Scalping: recent low, Swing: lowest low of lookback period targetPriceLong := tradeMode ? close + tr : swingHigh // Scalping: close + ATR, Swing: highest high of lookback period tradeActive := true if (sellCondition and not tradeActive) entryPriceShort := close // Track entry price for short position stopLossShort := tradeMode ? ta.highest(high, lookbackPeriod) : swingHigh // Scalping: recent high, Swing: highest high of lookback period targetPriceShort := tradeMode ? close - tr : swingLow // Scalping: close - ATR, Swing: lowest low of lookback period tradeActive := true // Take Profit and Stop Loss Logic signalBuyTPPrint = (not na(entryPriceLong) and close >= targetPriceLong) signalSellTPPrint = (not na(entryPriceShort) and close <= targetPriceShort) signalBuySLPrint = (not na(entryPriceLong) and close <= stopLossLong) signalSellSLPrint = (not na(entryPriceShort) and close >= stopLossShort) if (signalBuyTPPrint or signalBuySLPrint) entryPriceLong := na // Reset entry price for long position targetPriceLong := na // Reset target price for long position stopLossLong := na // Reset stop-loss for long position tradeActive := false if (signalSellTPPrint or signalSellSLPrint) entryPriceShort := na // Reset entry price for short position targetPriceShort := na // Reset target price for short position stopLossShort := na // Reset stop-loss for short position tradeActive := false // Plot Buy and Sell Labels with Visibility Conditions plotshape(showBuyLabels and buyCondition, "Buy", shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny) plotshape(showSellLabels and sellCondition, "Sell", shape.labeldown, location=location.abovebar, color=color.red, text="SELL", textcolor=color.white, size=size.tiny) // Plot Take Profit Flags plotshape(showBuyLabels and signalBuyTPPrint, title="Take Profit (buys)", text="TP", style=shape.flag, location=location.abovebar, color=colorTP, textcolor=color.white, size=size.tiny) plotshape(showSellLabels and signalSellTPPrint, title="Take Profit (sells)", text="TP", style=shape.flag, location=location.belowbar, color=colorTP, textcolor=color.white, size=size.tiny) // Plot Stop Loss "X" Marker plotshape(showBuyLabels and signalBuySLPrint, title="Stop Loss (buys)", text="X", style=shape.xcross, location=location.belowbar, color=colorSL, textcolor=color.white, size=size.tiny) plotshape(showSellLabels and signalSellSLPrint, title="Stop Loss (sells)", text="X", style=shape.xcross, location=location.abovebar, color=colorSL, textcolor=color.white, size=size.tiny) // Alerts alertcondition(buyCondition and alertOnCondition, title="Buy Alert", message='{"content": "Buy {{ticker}} at {{close}}"}') alertcondition(sellCondition and alertOnCondition, title="Sell Alert", message='{"content": "Sell {{ticker}} at {{close}}"}') alertcondition(signalBuyTPPrint and alertOnCondition, title="Buy TP Alert", message='{"content": "Buy TP {{ticker}} at {{close}}"}') alertcondition(signalSellTPPrint and alertOnCondition, title="Sell TP Alert", message='{"content": "Sell TP {{ticker}} at {{close}}"}') alertcondition(signalBuySLPrint and alertOnCondition, title="Buy SL Alert", message='{"content": "Buy SL {{ticker}} at {{close}}"}') alertcondition(signalSellSLPrint and alertOnCondition, title="Sell SL Alert", message='{"content": "Sell SL {{ticker}} at {{close}}"}') if buyCondition strategy.entry("Enter Long", strategy.long) else if sellCondition strategy.entry("Enter Short", strategy.short)