Многорежимная стратегия стоп-профита и стоп-лосса, основанная на тренде EMA, мадридских полосах и каналах Дончиана

EMA RRR
Дата создания: 2025-01-10 16:24:30 Последнее изменение: 2025-01-10 16:24:30
Копировать: 2 Количество просмотров: 418
1
Подписаться
1617
Подписчики

Многорежимная стратегия стоп-профита и стоп-лосса, основанная на тренде EMA, мадридских полосах и каналах Дончиана

Обзор

Это стратегия следования за трендом, которая объединяет экспоненциальную скользящую среднюю (EMA), Мадридскую ленту и канал Дончиана. Уникальность стратегии заключается в предоставлении трех переключаемых режимов стоп-профита и стоп-лосса: на основе пунктов, на основе суммы и на основе соотношения риска и доходности. Надежность транзакций повышается за счет механизма подтверждения вторичных сигналов, и транзакции совершаются только при повторном появлении действительного сигнала.

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

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

  1. 200-периодная экспоненциальная скользящая средняя используется для определения общего направления тренда.
  2. Полосы Мадрида (пересечение 5-периодной и 100-периодной EMA) используются для определения среднесрочных трендов.
  3. Прорывы канала Дончиана для определенного времени входа

Условия для длинной сделки: цена выше 200EMA, Мадридская полоса становится бычьей, и цена пробивает верхнюю границу канала Дончиана. Условия короткой торговли: цена ниже 200EMA, Мадридская полоса становится медвежьей, и цена пробивает нижний канал Дончиана. Чтобы уменьшить количество ложных сигналов, стратегия совершает сделку только тогда, когда действительный сигнал появляется во второй раз.

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

  1. Гибкая система управления стоп-профитом и стоп-лоссом, которая может переключать режимы в соответствии с различными стилями торговли
  2. Сочетание нескольких технических индикаторов обеспечивает более надежные торговые сигналы.
  3. Механизм вторичного подтверждения эффективно снижает влияние ложных сигналов.
  4. Стратегия полностью исключает ошибку опережающего прогнозирования и не создает проблем с перерисовкой.
  5. Широкие возможности настройки для адаптации к различным рыночным условиям

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

  1. Более значительная коррекция может произойти, когда тренд развернется. Решение: Вы можете улучшить чувствительность стратегии, отрегулировав параметры индикатора.
  2. Чрезмерная зависимость от технических индикаторов может привести к упущенным рыночным возможностям Решение: Рекомендуется объединить фундаментальный анализ
  3. Фиксированные стоп-лосс и тейк-профит могут не подходить для всех рыночных условий. Решение: Динамически корректируйте уровни тейк-профита и стоп-лосса на основе волатильности.

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

  1. Внедрение индикаторов волатильности для динамической корректировки уровней тейк-профита и стоп-лосса
  2. Добавлен анализ объема для повышения надежности сигнала
  3. Добавление дополнительных индикаторов настроений рынка
  4. Разработка адаптивной системы оптимизации параметров
  5. Добавьте модули управления рисками, такие как контроль максимальной просадки

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Pamplona Enhanced TP/SL Toggleable", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Input settings
use_tick_based = input.bool(false, title="Use Tick-Based TP/SL")
use_dollar_based = input.bool(false, title="Use Dollar-Based TP/SL")
use_risk_reward = input.bool(true, title="Use Risk-Reward TP/SL") // Default option

tick_size = input.float(0.1, title="Tick Size (for Tick-Based)", minval=0.0001, step=0.0001)
ticks = input.int(10, title="Ticks (for Tick-Based TP/SL)", minval=1)
dollar_tp = input.float(10.0, title="Dollar Take Profit (for Dollar-Based)", minval=0.01, step=0.01)
dollar_sl = input.float(10.0, title="Dollar Stop Loss (for Dollar-Based)", minval=0.01, step=0.01)
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio (for Risk-Reward TP/SL)", minval=0.1, step=0.1)
contract_size = input.int(1, title="Contract Size", minval=1)

// Retrieve indicators
ema200 = ta.ema(close, 200)
src = close
ma05 = ta.ema(src, 5)
ma100 = ta.ema(src, 100)
madrid_green = ma05 > ma100
dlen = input.int(20, title="Donchian Channel Period")
highest_d = ta.highest(high, dlen)
lowest_d = ta.lowest(low, dlen)
donchian_green = close > highest_d[1]
donchian_red = close < lowest_d[1]

// Track signals
var int long_signal_count = 0
var int short_signal_count = 0

// Conditions
long_condition_raw = madrid_green and donchian_green and close > ema200
short_condition_raw = not madrid_green and donchian_red and close < ema200

// Update signal counters
if long_condition_raw
    long_signal_count += 1
else
    long_signal_count := 0

if short_condition_raw
    short_signal_count += 1
else
    short_signal_count := 0

// Final conditions to enter on the second signal
long_condition = long_signal_count == 2
short_condition = short_signal_count == 2

// Ensure exactly one TP/SL mode is enabled
tp_sl_mode_count = (use_tick_based ? 1 : 0) + (use_dollar_based ? 1 : 0) + (use_risk_reward ? 1 : 0)
if tp_sl_mode_count != 1
    runtime.error("Enable exactly ONE TP/SL mode (Tick-Based, Dollar-Based, or Risk-Reward).")

// Function to calculate TP/SL based on active mode
calc_tp_sl(entry_price, is_long) =>
    float tp = na
    float sl = na
    if use_tick_based
        tp := is_long ? entry_price + ticks * tick_size : entry_price - ticks * tick_size
        sl := is_long ? entry_price - ticks * tick_size : entry_price + ticks * tick_size
    else if use_dollar_based
        tp := is_long ? entry_price + (dollar_tp / contract_size) : entry_price - (dollar_tp / contract_size)
        sl := is_long ? entry_price - (dollar_sl / contract_size) : entry_price + (dollar_sl / contract_size)
    else if use_risk_reward
        risk = is_long ? close - low : high - close
        tp := is_long ? close + (risk * risk_reward_ratio) : close - (risk * risk_reward_ratio)
        sl := is_long ? close - risk : close + risk
    [tp, sl]

// Entry logic
if long_condition
    [take_profit, stop_loss] = calc_tp_sl(close, true)
    strategy.entry("Long", strategy.long, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Long", limit=take_profit, stop=stop_loss)

if short_condition
    [take_profit, stop_loss] = calc_tp_sl(close, false)
    strategy.entry("Short", strategy.short, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Short", limit=take_profit, stop=stop_loss)

// Plot indicators
plot(ema200, title="200 EMA", color=color.white, linewidth=2)
bgcolor(long_condition ? color.new(color.green, 90) : short_condition ? color.new(color.red, 90) : na)