Эта стратегия представляет собой торговую систему, основанную на ценовом действии и динамических уровнях поддержки/сопротивления, выполняющую сделки вблизи ключевых уровней цен, когда возникают конкретные модели свечей. Система использует 16-периодный метод расчета динамической поддержки/сопротивления, в сочетании с четырьмя классическими шаблонами свечей-переворотов - Hammer, Shooting Star, Doji и Pin Bar, для улавливания потенциальных переворотов рынка. Стратегия использует фиксированные процентные уровни получения прибыли и стоп-лосса для управления рисками и использует параметр чувствительности для контроля строгости сигналов входа.
Основа стратегии заключается в динамическом расчете уровней поддержки и сопротивления для установления границ движения цен. Когда цена приближается к этим ключевым уровням, система ищет конкретные шаблоны свечей в качестве сигналов обратного движения. Условия входа требуют формирования шаблона в пределах 1,8% (чувствительность по умолчанию) уровней поддержки / сопротивления. Система реализует правило управления активами 35% с 16% стоп-лосом и 9,5% - прибылью, эффективно контролируя риск примерно на 5,6% от общего капитала на торговле. Стратегия реализована в Pine Script с полной функциональностью управления торговлей и визуализацией.
Эта стратегия торговли, основанная на ценовых действиях, предоставляет трейдерам систематический подход к торговле, сочетая динамические уровни поддержки / сопротивления с классическими шаблонами обратного движения.
/*backtest start: 2024-11-26 00:00:00 end: 2024-12-03 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © felipemiransan //@version=5 strategy("Price Action Strategy", overlay=true) // Settings length = input.int(16, title="Support and Resistance Length") sensitivity = input.float(0.018, title="Sensitivity") // Stop Loss and Take Profit stop_loss_pct = input.float(16, title="Stop Loss percentage", minval=0.1) / 100 take_profit_pct = input.float(9.5, title="Take Profit percentage", minval=0.1) / 100 // Function to identify a Hammer isHammer() => body = close - open price_range = high - low lower_shadow = open - low upper_shadow = high - close body > 0 and lower_shadow > body * 2 and upper_shadow < body * 0.5 and price_range > 0 // Function to identify a Shooting Star isShootingStar() => body = open - close price_range = high - low lower_shadow = close - low upper_shadow = high - open body > 0 and upper_shadow > body * 2 and lower_shadow < body * 0.5 and price_range > 0 // Function to identify a Doji isDoji() => body = close - open price_range = high - low math.abs(body) < (price_range * 0.1) // Doji has a small body // Function to identify a Pin Bar isPinBar() => body = close - open price_range = high - low lower_shadow = open - low upper_shadow = high - close (upper_shadow > body * 2 and lower_shadow < body * 0.5) or (lower_shadow > body * 2 and upper_shadow < body * 0.5) // Support and resistance levels support = ta.lowest(low, length) resistance = ta.highest(high, length) // Entry criteria long_condition = (isHammer() or isDoji() or isPinBar()) and close <= support * (1 + sensitivity) short_condition = (isShootingStar() or isDoji() or isPinBar()) and close >= resistance * (1 - sensitivity) // Function to calculate stop loss and take profit (long) calculate_levels(position_size, avg_price, stop_loss_pct, take_profit_pct) => stop_loss_level = avg_price * (1 - stop_loss_pct) take_profit_level = avg_price * (1 + take_profit_pct) [stop_loss_level, take_profit_level] // Function to calculate stop loss and take profit (short) calculate_levels_short(position_size, avg_price, stop_loss_pct, take_profit_pct) => stop_loss_level = avg_price * (1 + stop_loss_pct) take_profit_level = avg_price * (1 - take_profit_pct) [stop_loss_level, take_profit_level] // Buy entry order with label if (long_condition and strategy.opentrades == 0) strategy.entry("Buy", strategy.long) pattern = isHammer() ? "Hammer" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : "" label.new(x=bar_index, y=low, text=pattern, color=color.green, textcolor=color.black, size=size.small) // Sell entry order with label if (short_condition and strategy.opentrades == 0) strategy.entry("Sell", strategy.short) pattern = isShootingStar() ? "Shooting Star" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : "" label.new(x=bar_index, y=high, text=pattern, color=color.red, textcolor=color.black, size=size.small) // Stop Loss and Take Profit management for open positions if (strategy.opentrades > 0) if (strategy.position_size > 0) // Long position avg_price_long = strategy.position_avg_price // Average price of long position [long_stop_level, long_take_profit_level] = calculate_levels(strategy.position_size, avg_price_long, stop_loss_pct, take_profit_pct) strategy.exit("Exit Long", from_entry="Buy", stop=long_stop_level, limit=long_take_profit_level) if (strategy.position_size < 0) // Short position avg_price_short = strategy.position_avg_price // Average price of short position [short_stop_level, short_take_profit_level] = calculate_levels_short(strategy.position_size, avg_price_short, stop_loss_pct, take_profit_pct) strategy.exit("Exit Short", from_entry="Sell", stop=short_stop_level, limit=short_take_profit_level) // Visualization of Support and Resistance Levels plot(support, title="Support", color=color.green, linewidth=2) plot(resistance, title="Resistance", color=color.red, linewidth=2)