Торговая стратегия Clear Signal V5

EMA RSI MACD ATR VOLUME
Дата создания: 2025-09-16 18:24:21 Последнее изменение: 2025-09-16 18:24:21
Копировать: 0 Количество просмотров: 308
2
Подписаться
319
Подписчики

Торговая стратегия Clear Signal V5 Торговая стратегия Clear Signal V5

Это не очередная сложная стратегия технического анализа, а инструмент для упрощения торговли.

99% стратегий на рынке стремятся к сложности, а эта стратегия работает наоборот. Основная логика очень проста: на 50-дневную ЭМА на 20-й день, на 50-дневную ЭМА на нижней. Но дьявол в деталях. Он фильтрует качество сигнала с помощью 5-балльной системы оценки и открывает позиции только через 3 минуты.

Ключевой момент заключается в механизме подтверждения сигнала. Не каждая EMA-пересечение стоит торговать, стратегия с помощью трендового выравнивания, подтверждения динамики, проверки транзакции тройной фильтрации, снижает шум сигнала более чем на 70%. Консервативный режим требует 4 минуты для открытия позиции, а в экстремистском режиме 2 минуты, а в равновесном режиме устанавливается 3-минутный порог.

5-балльная система оценки: превращение субъективных суждений в объективные данные

Этот механизм оценки является ключевым новшеством в стратегии. Используются многосигнальные критерии оценки: 2 балла для выравнивания тренда (цена выше 200-дневной ЭМА и быстрая линия выше медленной линии), 1 балл для поворота MACD-полюса, 1 балл для RSI в диапазоне 50-70, 1 балл для сделок, превышающих 20-дневную среднюю линию более чем на 20%.

Данные показывают, что 4-5-минутные сигналы имеют более 65% успеваемости, но с меньшей частотой, в среднем 2-3 раза в месяц. 3-минутные сигналы имеют около 55% успеваемости, частота повышается до 5-6 раз в месяц. 2-минутные сигналы имеют до 45% успеваемости, но с наибольшей частотой.

Важно отметить, что в стратегию также включен фильтр волатильности. Открытие позиции приостанавливается, когда ATR превышает 3% от цены. Эта конструкция позволяет избежать ошибочных суждений во время аномального волатильности и эффективно контролирует максимальные потери за одну ставку.

Управление рисками - это не замена, а основа стратегии

Стоп-пароли разработаны в трех режимах: ATR-множественный, фиксированный процент, недавние высокие и низкие точки. По умолчанию, 2-кратный ATR-стоп, проверенный большим количеством обратных тестов, позволяет избежать нормальных волатильных стопов и вовремя выступать при обратном тренде.

Уровень убытков, установленный на 2:1, не является необоснованным. Исторические данные показывают, что средняя прибыль при установке стоп-лосса в 2 раза выше ATR составляет примерно 4 раза больше ATR. Уровень убытков, установленный на 2:1, позволяет уловить 70% потенциальной прибыли, избегая при этом возврата прибыли, вызванного чрезмерной жадностью.

Одиночный риск контролируется на уровне 2%, что означает, что только 25 последовательных потерь приведут к нулю счета (в теории почти невозможно). Даже в период наихудшего отсчета максимальный последовательный убыток не превышает 6 раз.

Подтверждение сделки: ключевые сигналы, которые игнорируют розничные торговцы

Стратегия по умолчанию включает подтверждение объема сделок и открывает позиции только тогда, когда объем сделок превышает 20-дневную среднюю линию на 20%. Эта конструкция основана на простой логике: настоящие прорывы в тренде требуют финансовой поддержки, а технические прорывы без объема сделок часто являются ложными прорывами.

Данные подтверждают это суждение. После добавления фильтра загруженности количество сигналов уменьшается примерно на 30%, но выигрышная вероятность повышается на 8-12 процентных пунктов. Особенно в волатильных рынках фильтрация загруженности эффективно избегает потери комиссионных, вызванных частыми открытиями позиций.

Стратегия повышает вес сигнала при резком увеличении объема сделок (<50% от среднего значения). Эта конструкция улавливает сильные тенденции, обусловленные внезапными событиями, исторические отчёты показывают, что средняя доходность таких сигналов на 40% выше, чем у обычных сигналов.

Сценарий применения: не универсальное лекарство, но эффективно в нужном месте

Стратегия наилучшим образом работает в трендовых рынках, особенно в средне- и долгосрочных тенденциях к росту или падению. Поперечные рыночные колебания являются врагами стратегии, и вероятность победы снижается до 40% или ниже. Поэтому, прежде чем использовать стратегию, необходимо оценить рыночную обстановку и избегать ее слепого использования в явных колебаниях в диапазоне.

Временные циклы рекомендуются выше дневной линии, часовая линия едва доступна, но не рекомендуется ниже 15 минут. Причина проста: пересечение EMA слишком шумное в короткие периоды, и даже с рейтинговой фильтров трудно эффективно идентифицировать.

По выбору разновидности наиболее эффективны те, которые имеют хорошую ликвидность. Маленькие дисковые акции или разновидности с холодной дверью, которые подвержены ложным сигналам из-за нестабильности объема торгов. В криптовалютном рынке необходимо скорректировать параметры из-за 24-часовой торговли и высокой волатильности.

Рекомендации для боевых действий: знать, как использовать оружие, важнее, чем знать, как действовать

Консервативный трейдер выбирает консервативный режим, делая только 4-5-процентные сигналы, ожидая годовую прибыль 15-25%, максимальный контроль снятия в пределах 8%. Активистский трейдер может выбрать сбалансированный режим, делая более 3-процентные сигналы, ожидая годовую прибыль 25-40%, но терпеть 12-15% снятия.

Радикальный режим не рекомендуется использовать, если у вас нет достаточной терпимости к риску и большого опыта торговли. Слишком высокий уровень шума 2-минутного сигнала может привести к частым остановкам и дисбалансу.

Самым большим преимуществом стратегии является простота и прозрачность, все логики могут быть четко проверены. Самый большой недостаток заключается в том, что она плохо работает на колеблющихся рынках и требует использования в соответствии с рыночной оценкой. Помните: ни одна стратегия не может превосходно работать во всех рыночных условиях, ключом является знание того, когда использовать, а когда нет.

Примечание о риске: исторический отсчет не говорит о будущей прибыли, существует риск непрерывного убытка от стратегии, неудачная работа на рынке во время потрясений, требует строгого управления капиталом и психологической подготовки.

Исходный код стратегии
//@version=5
strategy("Clear Signal Trading Strategy V5", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1)

// ============================================================================
// VISUAL CONFIGURATION
// ============================================================================
var color STRONG_BUY = #00ff00
var color BUY = #00dbff  
var color NEUTRAL = #ffff00
var color SELL = #ff6b6b
var color STRONG_SELL = #ff0000

// ============================================================================
// INPUT SETTINGS - SIMPLIFIED
// ============================================================================

// Core Settings
core_group = "Core Strategy Settings"
signal_sensitivity = input.string("Balanced", "Signal Sensitivity", ["Conservative", "Balanced", "Aggressive"], group=core_group, tooltip="Conservative = Fewer, higher quality signals | Aggressive = More frequent signals")
use_confirmation = input.bool(true, "Require Volume Confirmation", group=core_group, tooltip="Only trade when volume is above average")
show_labels = input.bool(true, "Show Signal Labels", group=core_group)
show_dashboard = input.bool(true, "Show Info Panel", group=core_group)

// Risk Management
risk_group = "Risk Management"
risk_percent = input.float(2.0, "Risk Per Trade (%)", minval=0.5, maxval=5.0, step=0.5, group=risk_group)
use_stop_loss = input.bool(true, "Use Stop Loss", group=risk_group)
sl_type = input.string("ATR", "Stop Loss Type", ["ATR", "Percentage", "Recent Low/High"], group=risk_group)
sl_atr_mult = input.float(2.0, "ATR Multiplier for Stop", minval=1.0, maxval=4.0, group=risk_group)
sl_percent = input.float(3.0, "Percentage Stop (%)", minval=1.0, maxval=10.0, group=risk_group)
use_take_profit = input.bool(true, "Use Take Profit Targets", group=risk_group)
tp_ratio = input.float(2.0, "Risk:Reward Ratio", minval=1.0, maxval=5.0, step=0.5, group=risk_group)

// ============================================================================
// CORE CALCULATIONS
// ============================================================================

// Price Action
ema_fast = ta.ema(close, 20)
ema_slow = ta.ema(close, 50)
ema_trend = ta.ema(close, 200)

// Trend Detection
price_above_trend = close > ema_trend
price_below_trend = close < ema_trend
fast_above_slow = ema_fast > ema_slow
fast_below_slow = ema_fast < ema_slow

// Clear Trend Signals
uptrend = price_above_trend and fast_above_slow
downtrend = price_below_trend and fast_below_slow

// ATR for Volatility
atr = ta.atr(14)
atr_percent = (atr / close) * 100
normal_volatility = atr_percent < 3

// Volume Analysis  
volume_ma = ta.sma(volume, 20)
high_volume = volume > volume_ma * 1.2
volume_spike = volume > volume_ma * 1.5

// RSI for Momentum
rsi = ta.rsi(close, 14)
rsi_bullish = rsi > 50 and rsi < 70
rsi_bearish = rsi < 50 and rsi > 30
rsi_neutral = rsi >= 30 and rsi <= 70

// MACD for Confirmation
[macd, signal, hist] = ta.macd(close, 12, 26, 9)
macd_bullish = hist > 0 and hist > hist[1]
macd_bearish = hist < 0 and hist < hist[1]

// ============================================================================
// SIGNAL LOGIC - CLEAR AND SIMPLE
// ============================================================================

// Entry Conditions Score (0-5 points for clarity)
calculate_signal_quality(is_buy) =>
    score = 0
    
    if is_buy
        // Trend alignment (2 points max)
        if uptrend
            score := score + 2
        else if price_above_trend
            score := score + 1
            
        // Momentum (1 point)
        if macd_bullish
            score := score + 1
            
        // RSI not overbought (1 point)
        if rsi_bullish
            score := score + 1
            
        // Volume confirmation (1 point)
        if high_volume
            score := score + 1
    else
        // Trend alignment (2 points max)
        if downtrend
            score := score + 2
        else if price_below_trend
            score := score + 1
            
        // Momentum (1 point)
        if macd_bearish
            score := score + 1
            
        // RSI not oversold (1 point)
        if rsi_bearish
            score := score + 1
            
        // Volume confirmation (1 point)
        if high_volume
            score := score + 1
    
    score

// Signal Thresholds
min_score = signal_sensitivity == "Conservative" ? 4 : signal_sensitivity == "Balanced" ? 3 : 2

// Primary Signal Detection
ema_cross_up = ta.crossover(ema_fast, ema_slow)
ema_cross_down = ta.crossunder(ema_fast, ema_slow)

// Calculate Signal Quality
buy_quality = calculate_signal_quality(true)
sell_quality = calculate_signal_quality(false)

// Generate Clear Signals
buy_signal = ema_cross_up and buy_quality >= min_score and (not use_confirmation or high_volume) and normal_volatility
sell_signal = ema_cross_down and sell_quality >= min_score and (not use_confirmation or high_volume) and normal_volatility

// Signal Strength for Display
signal_strength(quality) =>
    quality >= 4 ? "STRONG" : quality >= 3 ? "GOOD" : "WEAK"

// ============================================================================
// POSITION MANAGEMENT
// ============================================================================

// Stop Loss Calculation
calculate_stop_loss(is_long) =>
    stop = 0.0
    if sl_type == "ATR"
        stop := is_long ? close - atr * sl_atr_mult : close + atr * sl_atr_mult
    else if sl_type == "Percentage"
        stop := is_long ? close * (1 - sl_percent/100) : close * (1 + sl_percent/100)
    else  // Recent Low/High
        lookback = 10
        stop := is_long ? ta.lowest(low, lookback) : ta.highest(high, lookback)
    stop

// Take Profit Calculation
calculate_take_profit(entry, stop, is_long) =>
    risk = math.abs(entry - stop)
    tp = is_long ? entry + (risk * tp_ratio) : entry - (risk * tp_ratio)
    tp

// ============================================================================
// STRATEGY EXECUTION
// ============================================================================

// Entry Logic
if buy_signal and strategy.position_size == 0
    stop_loss = calculate_stop_loss(true)
    take_profit = calculate_take_profit(close, stop_loss, true)
    
    strategy.entry("BUY", strategy.long)
    
    if use_stop_loss
        strategy.exit("EXIT_BUY", "BUY", stop=stop_loss, limit=use_take_profit ? take_profit : na)

if sell_signal and strategy.position_size == 0
    stop_loss = calculate_stop_loss(false)
    take_profit = calculate_take_profit(close, stop_loss, false)
    
    strategy.entry("SELL", strategy.short)
    
    if use_stop_loss
        strategy.exit("EXIT_SELL", "SELL", stop=stop_loss, limit=use_take_profit ? take_profit : na)

// ============================================================================
// VISUAL ELEMENTS
// ============================================================================

// Plot EMAs with colors indicating trend
plot(ema_fast, "Fast EMA (20)", color=fast_above_slow ? color.new(BUY, 50) : color.new(SELL, 50), linewidth=2)
plot(ema_slow, "Slow EMA (50)", color=fast_above_slow ? color.new(BUY, 70) : color.new(SELL, 70), linewidth=1)
plot(ema_trend, "Trend EMA (200)", color=color.new(color.gray, 50), linewidth=2)

// Background Color for Market State
market_color = uptrend ? color.new(BUY, 96) : downtrend ? color.new(SELL, 96) : na
bgcolor(market_color, title="Market Trend")


// ============================================================================
// ALERTS
// ============================================================================

alertcondition(buy_signal, "BUY Signal", "Clear BUY signal detected - Score: {{plot_0}}/5")
alertcondition(sell_signal, "SELL Signal", "Clear SELL signal detected - Score: {{plot_1}}/5")
alertcondition(buy_signal and buy_quality >= 4, "STRONG BUY Signal", "STRONG BUY signal detected")
alertcondition(sell_signal and sell_quality >= 4, "STRONG SELL Signal", "STRONG SELL signal detected")