Estratégia de média de posição dinâmica do RSI

Autora:ChaoZhang, Data: 2024-02-06 09:44:05
Tags:

img

Resumo

Esta estratégia combina o índice de força relativa (RSI) e os princípios de média de posição martingale. Inicia uma posição longa quando o RSI fica abaixo da linha de sobrevenda e dobra a posição se o preço continuar a cair. A tomada de lucro é alcançada com pequenas metas. Esta estratégia é adequada para moedas com alta capitalização de mercado na negociação ao pronto para ganhos constantes.

Estratégia lógica

  1. Utilize o indicador RSI para identificar as condições de sobrevenda do mercado, com o período RSI definido em 14 e o limiar de sobrevenda definido em 30.
  2. Iniciar a primeira posição longa com 5% do capital da conta quando o RSI for < 30.
  3. Se o preço diminuir 0,5% em relação ao preço de entrada inicial, duplique o tamanho da posição para média descendente.
  4. Obtenha lucro a um aumento de 0,5% a cada vez.
  5. Repita o ciclo.

Análise das vantagens

  • Identificar as condições de sobrevenda do mercado com o RSI para bons pontos de entrada.
  • A média da posição Martingale reduz o preço médio de entrada.
  • Pequenos lucros permitem ganhos consistentes.
  • Adequado para a negociação à vista de moedas de alta capitalização de mercado com riscos controlados.

Análise de riscos

  • A recessão prolongada do mercado pode conduzir a perdas pesadas.
  • Não haver stop loss significa desvantagem ilimitada.
  • A média de baixas aumenta as perdas.
  • Ainda tem riscos inerentes de direcção longa.

Orientações de otimização

  1. Incorporar stop loss para limitar a perda máxima.
  2. Otimizar os parâmetros do RSI para encontrar os melhores sinais de sobrecompra/supervenda.
  3. Estabelecer um intervalo razoável de lucro com base na volatilidade específica da moeda.
  4. Determinar o ritmo médio com base no total dos activos ou nas regras de dimensionamento das posições.

Resumo

Esta estratégia combina o indicador RSI e a média de posição martingale para tirar proveito de situações de sobrevenda com uma média de baixa apropriada e um pequeno lucro para ganhos constantes.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stavolt

//@version=5
strategy("RSI Martingale Strategy", overlay=true, default_qty_type=strategy.cash, currency=currency.USD)

// Inputs
rsiLength = input(14, title="RSI Length")
oversoldThreshold = input(30, title="Oversold Threshold") // Keeping RSI threshold
profitTargetPercent = input(0.5, title="Profit Target (%)") / 100
initialInvestmentPercent = input(5, title="Initial Investment % of Equity")

// Calculating RSI
rsiValue = ta.rsi(close, rsiLength)

// State variables for tracking the initial entry
var float initialEntryPrice = na
var int multiplier = 1

// Entry condition based on RSI
if (rsiValue < oversoldThreshold and na(initialEntryPrice))
    initialEntryPrice := close
    strategy.entry("Initial Buy", strategy.long, qty=(strategy.equity * initialInvestmentPercent / 100) / close)
    multiplier := 1

// Adjusting for errors and simplifying the Martingale logic
// Note: This section simplifies the aggressive position size adjustments without loops
if (not na(initialEntryPrice))
    if (close < initialEntryPrice * 0.995) // 0.5% drop from initial entry
        strategy.entry("Martingale Buy 1", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 2)
        multiplier := 2 // Adjusting multiplier for the next potential entry

    if (close < initialEntryPrice * 0.990) // Further drop
        strategy.entry("Martingale Buy 2", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 4)
        multiplier := 4

    // Additional conditional entries could follow the same pattern

// Checking for profit target to close positions
if (strategy.position_size > 0 and (close - strategy.position_avg_price) / strategy.position_avg_price >= profitTargetPercent)
    strategy.close_all(comment="Take Profit")
    initialEntryPrice := na // Reset for next cycle


Mais.