Стратегия оценки идентификации свинга

RSI SMA VOLUME PATTERN
Дата создания: 2025-09-09 09:24:08 Последнее изменение: 2025-09-09 09:24:08
Копировать: 0 Количество просмотров: 275
2
Подписаться
319
Подписчики

Стратегия оценки идентификации свинга Стратегия оценки идентификации свинга

Это не обычная маневренная стратегия, а система точного снайпера с ИИ-оценкой.

Что плохого в традиционной стратегии сдвига? Слишком много сигналов, неравномерное качество, частота ложных прорывов.Каждый сигнал имеет оценку качества от 1 до 5, только высококачественные сигналы свыше 4 баллов торгуются

Основная логика простая и грубая: идентифицируйте Higher Low и Lower High, а затем оцените сигнал в четырех измерениях.Не менее 4 минут, чтобы открыть склад, чтобы отфильтровать 80% мусорных сигналов

Где пятимерная система оценки лучше, чем один показатель?

Базовый баллПодтверждение существования сдвижных форм. Подтверждение сдачи + 1 балл: объем сделок более 20 циклов в среднем в 1,2 раза больше, что свидетельствует о наличии финансовой поддержки RSI позиции + 1 минутыRSI в диапазоне 30-70, чтобы избежать ложных сигналов о перепродаже Сущность K-линии + 1 точкаНа данный момент, по данным агентства, в мире насчитывается более 60 миллионов различных форм. Тенденция выравнивается на 1 баллЦена: MA20 и MA50 - все в одном направлении

Результат: наивысшая вероятность выигрыша сигнала с 5 баллами, свыше 4 баллов можно торговать, ниже 3 - игнорировать.

Стоп-убыток: 10 циклических максимумов, а не произвольно настроенный ATR

Логика сдерживания ущерба очень ясна:

  • Стоп-стоп - это минимум на 10 K-линий.
  • Стоп-стоп = максимум на последних 10 K-линий

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

Неудачные сигналы - это возможность для торговли

Также в стратегии отмечаются “неудачные колебания”:

  • Higher Low проваливается: после более высоких низких точек снова падает
  • Неудача Lower High: формирование более низких высоких и их прорыв

Эти неудачи часто являются признаком ускорения тенденции и идеальным временем для обратной торговли.

Продолжающийся сигнал = подтверждение тренда

Когда два последовательных K-провода появляются в одном направлении, обозначается бриллиантом. Это обычно означает:

  • Продолжайте смотреть: тенденция к росту
  • Продолжающаяся тенденция к снижению

Победа последовательных сигналов обычно на 15-20% выше, чем отдельных сигналов

Сценарий применения: преобладание потрясений / свободный рынок

Наиболее эффективная среда

  • Рынок с ясными тенденциями, но с постоянными перепадами
  • Умеренная волатильность (не крайне спокойная и не крайне возбужденная)
  • Сорта с относительно стабильным оборотом

Избегайте сцен

  • Односторонние штормовые обрушения (колебательные сигналы часто нарушаются)
  • Очень низкая частота колебаний (сигналы редкие и низкого качества)
  • Незначительные породы с крайне неустойчивым оборотом

Риск: исторические воспоминания не означают будущие выгоды

Определенные риски

  1. Существует вероятность непрерывного убытка стратегии, особенно в период перехода в тренд
  2. Сигналы свыше 4 минут, хотя и высокого качества, имеют 30-40% неудачи
  3. Стоп-лома может быть более свободным, с большими потерями.
  4. Различные показатели в различных рыночных условиях

Советы по управлению деньгамиОднократный риск не превышает 2% от счета, приостановка торговли после трех последовательных убытков, переоценка рыночной ситуации.

Исходный код стратегии
/*backtest
start: 2024-09-09 00:00:00
end: 2025-09-07 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("Higher Lows, Lower Highs & Failures with Signal Quality Scoring", overlay=true)

// --- Higher Low detection ---
shares = 1
minScore = 4  // Minimum score to take trades

lowPoint      = ta.lowest(low, 3)
prevLowPoint  = ta.lowest(low[3], 3)
isHigherLow   = low == lowPoint and low > prevLowPoint
bullConfirm   = isHigherLow and close > open

// --- Lower High detection ---
highPoint     = ta.highest(high, 3)
prevHighPoint = ta.highest(high[3], 3)
isLowerHigh   = high == highPoint and high < prevHighPoint
bearConfirm   = isLowerHigh and close < open

// --- Failures ---
failHigherLow = isHigherLow[1] and low < low[1]
failLowerHigh = isLowerHigh[1] and high > high[1]

// --- 2-in-a-row detection ---
bullSecond = bullConfirm and bullConfirm[1]
bearSecond = bearConfirm and bearConfirm[1]

// --- SIGNAL QUALITY SCORING (1-5 scale) ---
bullScore = if bullConfirm
    score = 1  // Base score
    
    // Factor 1: Volume confirmation
    avgVolume = ta.sma(volume, 20)
    if volume > avgVolume * 1.2
        score := score + 1
        
    // Factor 2: RSI positioning
    rsi = ta.rsi(close, 14)
    if rsi < 70 and rsi > 30
        score := score + 1
        
    // Factor 3: Candle strength
    bodySize = math.abs(close - open)
    candleRange = high - low
    bodyRatio = candleRange > 0 ? bodySize / candleRange : 0
    if bodyRatio > 0.6
        score := score + 1
        
    // Factor 4: Trend alignment
    ma20 = ta.sma(close, 20)
    ma50 = ta.sma(close, 50)
    if ma20 > ma50 and close > ma20
        score := score + 1
        
    math.max(1, math.min(5, score))
else
    na

bearScore = if bearConfirm
    score = 1  // Base score
    
    // Factor 1: Volume confirmation
    avgVolume = ta.sma(volume, 20)
    if volume > avgVolume * 1.2
        score := score + 1
        
    // Factor 2: RSI positioning
    rsi = ta.rsi(close, 14)
    if rsi > 30 and rsi < 70
        score := score + 1
        
    // Factor 3: Candle strength
    bodySize = math.abs(close - open)
    candleRange = high - low
    bodyRatio = candleRange > 0 ? bodySize / candleRange : 0
    if bodyRatio > 0.6
        score := score + 1
        
    // Factor 4: Trend alignment
    ma20 = ta.sma(close, 20)
    ma50 = ta.sma(close, 50)
    if ma20 < ma50 and close < ma20
        score := score + 1
        
    math.max(1, math.min(5, score))
else
    na

// --- Plot main signals with score-based styling ---
// Bullish signals
plotshape(bullConfirm and bullScore == 1, "Bull Score 1", shape.triangleup, location.belowbar, color.gray, size=size.tiny)
plotshape(bullConfirm and bullScore == 2, "Bull Score 2", shape.triangleup, location.belowbar, color.orange, size=size.small)
plotshape(bullConfirm and bullScore == 3, "Bull Score 3", shape.triangleup, location.belowbar, color.yellow, size=size.normal)
plotshape(bullConfirm and bullScore == 4, "Bull Score 4", shape.triangleup, location.belowbar, color.lime, size=size.normal)
plotshape(bullConfirm and bullScore == 5, "Bull Score 5", shape.triangleup, location.belowbar, color.green, size=size.large)

// Bearish signals
plotshape(bearConfirm and bearScore == 1, "Bear Score 1", shape.triangledown, location.abovebar, color.gray, size=size.tiny)
plotshape(bearConfirm and bearScore == 2, "Bear Score 2", shape.triangledown, location.abovebar, color.orange, size=size.small)
plotshape(bearConfirm and bearScore == 3, "Bear Score 3", shape.triangledown, location.abovebar, color.yellow, size=size.normal)
plotshape(bearConfirm and bearScore == 4, "Bear Score 4", shape.triangledown, location.abovebar, color.lime, size=size.normal)
plotshape(bearConfirm and bearScore == 5, "Bear Score 5", shape.triangledown, location.abovebar, color.green, size=size.large)

// --- Plot failures ---
plotshape(failHigherLow, "Failed Higher Low", shape.arrowdown, location.abovebar, color.red, size=size.small)
plotshape(failLowerHigh, "Failed Lower High", shape.arrowup, location.belowbar, color.green, size=size.small)

// --- Plot consecutive signals ---
plotshape(bullSecond, "Double Bullish Star", shape.diamond, location.bottom, color.lime, size=size.tiny)
plotshape(bearSecond, "Double Bearish Star", shape.diamond, location.top, color.red, size=size.tiny)

// --- Display score labels ---
if bullConfirm
    labelColor = bullScore == 1 ? color.gray : bullScore == 2 ? color.orange : bullScore == 3 ? color.yellow : bullScore == 4 ? color.lime : color.green
    label.new(bar_index, low - (high - low) * 0.1, "↑ " + str.tostring(bullScore), style=label.style_label_up, color=labelColor, textcolor=color.white, size=size.small)

if bearConfirm
    labelColor = bearScore == 1 ? color.gray : bearScore == 2 ? color.orange : bearScore == 3 ? color.yellow : bearScore == 4 ? color.lime : color.green
    label.new(bar_index, high + (high - low) * 0.1, "↓ " + str.tostring(bearScore), style=label.style_label_down, color=labelColor, textcolor=color.white, size=size.small)

// --- Alerts for high-quality signals only ---
alertcondition(bullConfirm and bullScore >= 4, "High Quality Bullish", "Strong Bullish Signal Detected")
alertcondition(bearConfirm and bearScore >= 4, "High Quality Bearish", "Strong Bearish Signal Detected")

// --- STRATEGY LOGIC ---
// Track previous highs and lows for stop levels
var float prevHigh = na
var float prevLow = na

// Update previous high/low when we get signals
if bullConfirm and bullScore >= minScore
    prevLow := ta.lowest(low, 10)  // Previous 10-bar low for stop
    
if bearConfirm and bearScore >= minScore
    prevHigh := ta.highest(high, 10)  // Previous 10-bar high for stop

// Entry conditions (only scores 4 or higher)
longCondition = bullConfirm and bullScore >= minScore
shortCondition = bearConfirm and bearScore >= minScore

// Execute trades
if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=shares)
    strategy.exit("Long Exit", "Long", stop=prevLow)
    
if shortCondition and strategy.position_size == 0
    strategy.entry("Short", strategy.short, qty=shares)
    strategy.exit("Short Exit", "Short", stop=prevHigh)

// Close opposite position if new signal occurs
if longCondition and strategy.position_size < 0
    strategy.close("Short")
    strategy.entry("Long", strategy.long, qty=shares)
    strategy.exit("Long Exit", "Long", stop=prevLow)
    
if shortCondition and strategy.position_size > 0
    strategy.close("Long")
    strategy.entry("Short", strategy.short, qty=shares)
    strategy.exit("Short Exit", "Short", stop=prevHigh)

// Plot stop levels for visualization
plot(strategy.position_size > 0 ? prevLow : na, "Long Stop", color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? prevHigh : na, "Short Stop", color.red, linewidth=2, style=plot.style_linebr)