O recurso está a ser carregado... Carregamento...

O valor do risco de risco ponderado em relação ao risco de risco ponderado em relação ao risco de risco ponderado em relação ao risco de risco ponderado em relação ao risco de risco ponderado em relação ao risco de risco.

Autora:ChaoZhang, Data: 2024-12-04 15:41:10
Tags:RSIEMATPSL

img

Resumo

Esta é uma estratégia de negociação de hedging de impulso baseada em indicadores RSI e médias móveis EMA. A estratégia utiliza períodos duplos de RSI (RSI-14 e RSI-2) combinados com linhas triplas de EMA (50, 100, 200) para capturar oportunidades de reversão de tendência do mercado, implementando a cobertura através de gestão de posição dinâmica.

Princípios de estratégia

A estratégia emprega RSI-14 e RSI-2 com períodos diferentes, juntamente com EMA-50, EMA-100, e EMA-200 para determinar os sinais de negociação. As condições longas exigem RSI-14 abaixo de 31 e RSI-2 cruzando acima de 10, enquanto as EMAs devem estar em alinhamento de baixa (EMA-50 < EMA-100 < EMA-200). As condições curtas são opostas, exigindo RSI-14 acima de 69 e RSI-2 cruzando abaixo de 90, com EMAs em alinhamento de alta (EMA-50 > EMA-100 > EMA-200).

Vantagens da estratégia

  1. A validação cruzada de múltiplos indicadores técnicos melhora a fiabilidade do sinal
  2. A gestão dinâmica das posições permite um ajustamento flexível da carteira
  3. O mecanismo de negociação bidirecional permite obter lucros em ambas as direcções
  4. Condições de lucro adaptáveis impedem saídas prematuras
  5. Interface gráfica clara que mostra sinais de negociação e condições de mercado
  6. O mecanismo de cobertura reduz a exposição ao risco direcional
  7. Cálculo da posição dinâmica baseada no património para um melhor controlo do risco

Riscos estratégicos

  1. A alavancagem elevada (20x) pode conduzir a riscos significativos de liquidação
  2. O posicionamento incremental pode causar perdas graves durante a volatilidade do mercado
  3. A ausência de condições de stop-loss pode apresentar riscos de retirada contínuos
  4. Os indicadores RSI podem gerar falsos sinais em mercados variáveis
  5. Combinação de múltiplos indicadores técnicos pode reduzir as oportunidades de negociação
  6. O método de gestão de posições pode acumular um risco excessivo durante operações consecutivas

Orientações para a otimização da estratégia

  1. Introduzir um mecanismo adaptativo de stop-loss baseado no ATR ou na volatilidade
  2. Otimizar o multiplicador de alavancagem com ajustamento dinâmico com base na volatilidade do mercado
  3. Adicionar filtros de tempo para evitar a negociação durante períodos de baixa volatilidade
  4. Incorporar indicadores de volume para melhorar a fiabilidade do sinal
  5. Otimizar o multiplicador de incremento de posição com limites máximos de posição
  6. Adicionar filtros de força de tendência para evitar negociação em tendências fracas
  7. Melhorar a gestão de riscos com limites máximos diários de perdas

Resumo

Esta estratégia abrangente combina impulso e tendência, usando vários indicadores técnicos para melhorar a precisão da negociação. A estratégia inova através de mecanismos dinâmicos de gerenciamento de posições e hedging, embora traga riscos significativos. Através da otimização de mecanismos de controle de risco e introdução de filtros adicionais, esta estratégia tem potencial para um melhor desempenho na negociação ao vivo. Recomenda-se um backtesting completo e otimização de parâmetros antes da implementação ao vivo.


/*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


Relacionados

Mais.