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

RSI Dinâmica Estratégia de negociação inteligente stop-loss

Autora:ChaoZhang, Data: 2024-11-12 11:39:06
Tags:RSISMAATR

img

Resumo

Esta estratégia é um sistema de negociação de stop-loss dinâmico baseado no indicador RSI, combinando os indicadores SMA e ATR para otimizar as decisões de negociação.

Princípios de estratégia

A estratégia usa principalmente condições de sobrevenda do RSI (RSI<30) como sinais de entrada, exigindo que o preço esteja acima da média móvel de 200 dias para garantir uma tendência de alta.

  1. Condições de entrada: RSI inferior a 30 e preço superior a SMA200
  2. Gestão de posições: 75% do capital por transacção
  3. Stop-loss: Stop dinâmico baseado no ATR de 1,5x
  4. Títulos de lucro: três níveis de 5%, 10%, 15%, encerramento de 33%, 66% e 100%, respectivamente

Vantagens da estratégia

  1. Gestão dinâmica do risco: adaptação do ATR à volatilidade do mercado
  2. Profit-taking em fases: reduz a interferência emocional e melhora a probabilidade de lucro
  3. Confirmação da tendência: utiliza a média móvel para filtrar sinais falsos
  4. Gerenciamento de fundos: classificação das posições em percentagem para os diferentes tamanhos de contas
  5. Optimização da Comissão: considera os custos comerciais para a aplicação prática

Riscos estratégicos

  1. O atraso da média móvel pode atrasar as entradas
  2. O excesso de venda do RSI não garante a reversão
  3. Grandes dimensões de posição podem conduzir a reduções significativas
  4. As saídas parciais frequentes podem aumentar os custos de negociação Estes riscos podem ser geridos através de ajustes de parâmetros e filtros adicionais.

Orientações de otimização

  1. Adicionar sinais de confirmação de volume
  2. Incorporar indicadores de força da tendência
  3. Otimizar os rácios de lucro
  4. Adicionar filtros de período de tempo
  5. Considerar o dimensionamento das posições adaptado à volatilidade

Resumo

Esta estratégia combina indicadores técnicos com gerenciamento de risco dinâmico para criar um sistema de negociação abrangente. Seus pontos fortes estão na adaptabilidade e no risco controlado, embora a otimização de parâmetros baseada nas condições do mercado ainda seja necessária.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef

Relacionados

Mais.