Стратегия торговли стоп-лосс на основе экспоненциальной скользящей средней свечи

EMA RSI SUPPORT RESISTANCE BREAKOUT
Дата создания: 2025-02-25 11:11:35 Последнее изменение: 2025-02-25 11:11:35
Копировать: 8 Количество просмотров: 348
2
Подписаться
319
Подписчики

Стратегия торговли стоп-лосс на основе экспоненциальной скользящей средней свечи Стратегия торговли стоп-лосс на основе экспоненциальной скользящей средней свечи

Обзор

Индексная подвижная средняя линия Stop-Down Trading Strategy - это количественная торговая система, основанная на признании падений форм и тенденций в подвижной средней. Эта стратегия основана на идентификации конкретных падений форм (то есть сигналов “стоп-Down”) в качестве точек входа, в то же время в сочетании с EMA (индексная подвижная средняя линия) перекрестно подтверждает общую рыночную тенденцию и использует динамические уровни поддержки и сопротивления для идентификации рыночных прорывов.

Стратегический принцип

Ключевым принципом стратегии является выявление конкретных падений на рынке, которые обычно представляют собой вероятность краткосрочного переворота рынка. Механизм действия стратегии таков:

  1. Определение тренда: определение тренда рынка путем сравнения относительной позиции EMA20 и EMA90. Когда EMA20 находится выше EMA90, он определяется как восходящий тренд; когда EMA20 находится ниже EMA90, он определяется как нисходящий тренд.

  2. В результате, на улице появилась информация о том, что в здании находится пожар.

    • Требования к остановке сигнала падения в восходящем тренде: длина нижней теневой линии должна быть не менее 0,8 раза больше, чем длина сущности, верхняя теневая линия должна быть меньше, чем длина сущности, и цена закрытия должна быть выше, чем цена открытия ((светлая линия)).
    • Требования к сигналу остановки обрушения в нисходящем тренде: длина верхней теневой линии должна быть не менее 0,8 раза больше, чем длина нижней теневой линии, которая должна быть меньше, чем длина нижней теневой линии, и цена закрытия должна быть ниже, чем цена открытия.
  3. Детекция прорыва: выявление прорыва на рынке путем сравнения текущей цене закрытия с уровнем поддержки/сопротивления (вычисление минимальных/максимальных цен на основе 30 циклов).

  4. Условия для входа: в случае появления сигнала остановки падения, когда рынок находится в определенном тренде и не находится в состоянии прорыва, стратегия входит в соответствии с заданным параметром риска (риск 2.5% на одну сделку).

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

  6. Стоп-условия: комбинированные условия, основанные на процентном соотношении прибыли и риска к доходности. Многоголовые требуют не менее 7% прибыли и не менее 3 риска к доходности; пустые головы требуют не менее 6% прибыли и не менее 3 риска к доходности.

Стратегические преимущества

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

  2. Комплексный механизм подтверждения трендов: использование показателей EMA на несколько временных периодов для подтверждения тенденций рынка, повышения надежности торговых сигналов.

  3. Идентификация динамических уровней поддержки и сопротивления: динамические уровни поддержки и сопротивления, рассчитанные с помощью прокрутки, позволяют стратегии адаптироваться к различным этапам рынка.

  4. Строгое управление рисками: предусматривает параметры риска (риск 2,5% на одну сделку) и условия остановки, основанные на соотношении риска и прибыли, чтобы обеспечить рациональность управления средствами.

  5. Дифференцированные критерии многоголовной торговли: для многоголовной и пустой торговли устанавливаются различные условия входа и целевые показатели прибыли, адаптируемые к асимметричным характеристикам рынка.

  6. Динамический расчет позиции: расчет подходящего размера позиции на основе автоматического расчета стоп-лоста, чтобы обеспечить согласованность риска для каждой сделки.

Стратегический риск

  1. Задержка индикатора: EMA, как задержанный индикатор, может предоставлять задержанные сигналы в быстро меняющихся рынках, что приводит к плохим временям входа.

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

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

  4. Риск перехода в тренд: во время перехода в тренд стратегия может привести к ряду убыточных сделок. Решение заключается в добавлении фильтра силы тренда или уменьшении частоты сделок при неопределенности тренда.

  5. Неприемлемость фиксированного стоп-распада: использование одинакового процента стоп-распада (,5%) для всех сделок может быть неуместным для различных рыночных колебаний. Можно рассмотреть возможность использования динамического стоп-распада, основанного на волатильности.

  6. Ограничения условий RSI-фильтрации: использование RSI-фильтрации только для холостых сделок может привести к дисбалансированной частоте сделок. Можно рассмотреть возможность введения аналогичных механизмов фильтрации для многоголосных сделок или оптимизации текущих RSI-параметров.

Направление оптимизации стратегии

  1. Параметры самостоятельной адаптации волатильности: введение волатильности показателей (например, ATR) для динамической корректировки требований соотношения теневой линии и стоп-дистанции для остановки сигналов, что позволяет стратегии лучше адаптироваться к различным рыночным условиям.

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

  3. Оптимизация времени входа: оптимизация времени входа, повышение успешности сделки путем добавления дополнительных фильтров (например, индикатор силы тренда, подтверждение объема сделки).

  4. Частичный стоп-механизм: введение стадионного стоп-механизма, который при достижении определенной прибыли переносит стоп-убытки на стоимость или блокирует часть прибыли, чтобы лучше сбалансировать риск и отдачу.

  5. Расширение циклов отсчета: более полный отсчет в разных рыночных циклах и условиях для проверки стабильности и адаптивности стратегии.

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

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

Подвести итог

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

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

Исходный код стратегии
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Advanced Candle Stop Strategy Backtest - Tuned v9 - Max Trades", overlay=true)

// --- EMA Variables ---
ema5_length = 5
ema20_length = 20
ema90_length = 90

ema5 = ta.ema(close, ema5_length)
ema20 = ta.ema(close, ema20_length)
ema90 = ta.ema(close, ema90_length)

// --- Support, Resistance, and Volume Calculation ---
lookback_support_resistance = 30
support_level = ta.lowest(low, lookback_support_resistance)
resistance_level = ta.highest(high, lookback_support_resistance)

// --- Volume Condition for Short (Removed) ---
avg_volume_lookback = 20
avg_volume = ta.sma(volume, avg_volume_lookback)

// --- RSI Condition for Short (Removed) ---
rsi_length = 14
rsi_overbought = 70
rsi = ta.rsi(close, rsi_length)


// --- Candle Stop Function ---
is_candle_stop(trend) =>
    body = math.abs(close - open)
    upper_shadow = high - math.max(open, close)
    lower_shadow = math.min(open, close) - low

    if trend == "up"
        lower_shadow >= 0.8 * body and upper_shadow < body and close > open // Shadow ratio reduced to 0.8 for longs
    else if trend == "down"
        upper_shadow >= 0.8 * body and lower_shadow < body and close < open // Shadow ratio reduced to 0.8 for shorts - EMA5 and Volume conditions removed
    else
        false

// --- Trend Determination (only 15m, no 1H confirmation) ---
trend = ema20 > ema90 ? "up" : ema20 < ema90 ? "down" : "neutral"
final_trend = trend  // حذف تأیید با تایم‌فریم 1H

// --- Breakout Detection ---
var bool breakout_detected = false
if final_trend == "up" and close > resistance_level
    breakout_detected := true
    alert("شکست صعودی تشخیص داده شد! منتظر پولبک 🚀", alert.freq_once_per_bar)
else if final_trend == "down" and close < support_level
    breakout_detected := true
    alert("شکست نزولی تشخیص داده شد! منتظر پولبک 📉", alert.freq_once_per_bar)

// --- Entry and Exit Conditions ---
var float position = 0.0
var float entry_price = 0.0
var float stop_loss_price = na
var bool take_profit_long = false  // Declare take_profit_long
var bool stop_loss_hit_long = false // Declare stop_loss_hit_long
var bool take_profit_short = false // Declare take_profit_short
var bool stop_loss_hit_short = false // Declare stop_loss_hit_short
risk_per_trade_percent = 2.5  // افزایش ریسک به 2.5٪ برای موقعیت‌های بیشتر


if not breakout_detected
    if position == 0 and is_candle_stop(final_trend)
        risk_amount_usd = strategy.initial_capital * (risk_per_trade_percent / 100)
        if final_trend == "up"
            stop_loss_price := close * 0.975 // Stop loss at 2.5% below entry for longs
            if (close - stop_loss_price) != 0
                position_size_usd = risk_amount_usd / (close - stop_loss_price)
                amount = position_size_usd / close
                strategy.entry("Long", strategy.long, qty=amount)
                position := amount
                entry_price := close
        else if final_trend == "down"
            stop_loss_price := close * 1.025 // Stop loss at 2.5% above entry for shorts
            if (stop_loss_price - close) != 0
                position_size_usd = risk_amount_usd / (stop_loss_price - close)
                amount = position_size_usd / close
                if rsi >= rsi_overbought // RSI condition for short entry - No Change, still using RSI but not enforcing it for now - Consider removing RSI condition as well for max trades
                    strategy.entry("Short", strategy.short, qty=amount)
                    position := amount
                    entry_price := close

if position > 0
    profit_percent_long = (close - entry_price) / entry_price * 100
    profit_percent_short = (entry_price - close) / entry_price * 100
    loss_percent_long = (entry_price - close) / entry_price * 100
    loss_percent_short = (close - entry_price) / entry_price * 100

    risk_reward_long = loss_percent_long != 0 ? profit_percent_long / loss_percent_long : (profit_percent_long != 0 ? 99999 : 0)
    risk_reward_short = loss_percent_short != 0 ? profit_percent_short / loss_percent_short : (profit_percent_short != 0 ? 99999 : 0)


    take_profit_long := profit_percent_long >= 7 and risk_reward_long >= 3
    stop_loss_hit_long := close <= stop_loss_price
    take_profit_short := profit_percent_short >= 6 and risk_reward_short >= 3 // Reduced Take Profit for Shorts to 6% - No Change
    stop_loss_hit_short := close >= stop_loss_price

    if (final_trend == "up" and (take_profit_long or stop_loss_hit_long)) or (final_trend == "down" and (take_profit_short or stop_loss_hit_short))
        if final_trend == "up"
            strategy.close("Long")
        else
            strategy.close("Short")
        position := 0
        entry_price := 0.0
        breakout_detected := false

// --- Plotting EMAs and Support/Resistance Levels ---
plot(ema5, color=color.blue, title="EMA5")
plot(ema20, color=color.red, title="EMA20")
plot(ema90, color=color.green, title="EMA90")
plot(resistance_level, color=color.orange, style=plot.style_line, title="Resistance")
plot(support_level, color=color.orange, style=plot.style_line, title="Support")