Стратегия масштабирования хеджирования множественного импульса RSI-EMA

RSI EMA TP SL
Дата создания: 2024-12-04 15:41:10 Последнее изменение: 2024-12-04 15:41:10
Копировать: 0 Количество просмотров: 514
1
Подписаться
1617
Подписчики

Стратегия масштабирования хеджирования множественного импульса RSI-EMA

Обзор

Это динамическая стратегия хеджирования, основанная на RSI и EMA. Стратегия использует двойной RSI в сочетании с тройной EMA в сочетании с RSI-14 и RSI-2 для захвата рыночных поворотов и динамического управления позициями. Основная особенность стратегии заключается в постепенном увеличении позиций при выполнении условий входа, в то же время устанавливая преграду для перекупа на основе RSI.

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

Стратегия использует относительно сильные и слабые индексы RSI-14 и RSI-2 в двух различных периодах, а также три средние линии EMA-50, EMA-100 и EMA-200 для определения торгового сигнала. Для многоуровневых условий требуется, чтобы RSI-14 был ниже 31, а RSI-2 превышал 10, а также требовал, чтобы три средние линии представляли пустую строку ((EMA-50 < EMA-100 < EMA-200).

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

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

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

  1. Высокий уровень леверинга (в 20 раз) может привести к более высокому риску взрыва
  2. Позиции с нарастающей вероятностью могут привести к серьезным потерям при резких колебаниях рынка.
  3. Не установлены условия для остановки убытков, что может привести к риску продолжающегося падения
  4. Индикатор RSI может генерировать ложные сигналы на боковом рынке
  5. Сочетание нескольких технических индикаторов может привести к уменьшению возможностей для торговли
  6. Управление позициями может быть сопряжено с большим риском при последовательных односторонних сделках

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

  1. Внедрение адаптивных механизмов погашения убытков, таких как динамическое погашение убытков на основе ATR или волатильности
  2. Оптимизация коэффициента леверинга с возможностью корректировки в зависимости от динамики волатильности рынка
  3. Добавление временного фильтра, чтобы избежать торговли в период низкой волатильности
  4. Введение показателей трафика для повышения надежности сигнала
  5. Оптимизируйте множители увеличения позиции, чтобы рассмотреть возможность установки максимального ограничения позиции
  6. Добавлен фильтр силы тренда, позволяющий избежать торговли в условиях слабых трендов.
  7. Совершенствование механизмов управления рисками, например, установление лимита максимальных потерь в день

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

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

Исходный код стратегии
/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy Hedge", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Identifikátory pozic
long_id = "Long"
short_id = "Short"

// Definování průměrné ceny pozice pro long a short
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_long_position_size = na
var float last_short_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_long_position_size != strategy.position_size and strategy.position_size > 0)
    long_avg_price := na
if (last_short_position_size != strategy.position_size and strategy.position_size < 0)
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
else
    long_avg_price := na

if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
else
    short_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
if (strategy.position_size > 0)
    last_long_position_size := strategy.position_size
else if (strategy.position_size < 0)
    last_short_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_long_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2
new_short_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty_long = position_value / close
trade_qty_short = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry(long_id, strategy.long, qty=new_long_position_size == na ? trade_qty_long : new_long_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry(short_id, strategy.short, qty=new_short_position_size == na ? trade_qty_short : new_short_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close(long_id)

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close(short_id)

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short pouze pokud pozice existuje
plot(strategy.position_size > 0 ? long_avg_price : na, title="Long Avg Price", color=color.blue, linewidth=2)
plot(strategy.position_size < 0 ? short_avg_price : na, title="Short Avg Price", color=color.orange, linewidth=2)

// Zvýraznění čtverců pro RSI14 > 70 (červeně) a RSI14 < 30 (zeleně)
var int rsi_above_70_start = na
var int rsi_below_30_start = na

var float top_value_above_70 = na
var float bottom_value_above_70 = na

var float top_value_below_30 = na
var float bottom_value_below_30 = na

// Identifikace začátku a konce období pro RSI14 > 70
if (rsi_14[1] > 70 and rsi_14[2] > 70)
    if na(rsi_above_70_start)
        rsi_above_70_start := bar_index
        top_value_above_70 := high
        bottom_value_above_70 := low
    else
        top_value_above_70 := math.max(top_value_above_70, high)
        bottom_value_above_70 := math.min(bottom_value_above_70, low)
else
    if not na(rsi_above_70_start)
        // box.new(left = rsi_above_70_start, right = bar_index - 1, top = top_value_above_70, bottom = bottom_value_above_70, border_color = color.red, border_width = 2, bgcolor=color.new(color.red, 90))
        rsi_above_70_start := na
        top_value_above_70 := na
        bottom_value_above_70 := na

// Identifikace začátku a konce období pro RSI14 < 30
if (rsi_14[1] < 30 and rsi_14[2] < 30)
    if na(rsi_below_30_start)
        rsi_below_30_start := bar_index
        top_value_below_30 := high
        bottom_value_below_30 := low
    else
        top_value_below_30 := math.max(top_value_below_30, high)
        bottom_value_below_30 := math.min(bottom_value_below_30, low)
else
    if not na(rsi_below_30_start)
        // box.new(left = rsi_below_30_start, right = bar_index - 1, top = top_value_below_30, bottom = bottom_value_below_30, border_color = color.green, border_width = 2, bgcolor=color.new(color.green, 90))
        rsi_below_30_start := na
        top_value_below_30 := na
        bottom_value_below_30 := na