Sistema de estratégia de média de custos dinâmico baseado em Bandas de Bollinger e RSI

BB RSI DCA SMA TP
Data de criação: 2024-11-27 16:37:12 última modificação: 2024-11-27 16:37:12
cópia: 0 Cliques: 466
1
focar em
1617
Seguidores

Sistema de estratégia de média de custos dinâmico baseado em Bandas de Bollinger e RSI

Visão geral

A estratégia é um sistema de negociação quantitativa que combina Bollinger Bands, Indicadores de Força Relativa (RSI) e Média de Custo Dinâmico (DCA). A estratégia executa automaticamente operações de construção de posição em lotes em meio a flutuações do mercado, através da definição de regras de gerenciamento de fundos, ao mesmo tempo em que combina indicadores técnicos para julgar sinais de compra e venda e executar transações com risco controlado. O sistema também inclui lógica de parada e rastreamento de lucros acumulados, que permitem monitorar e gerenciar efetivamente o desempenho das negociações.

Princípio da estratégia

A estratégia baseia-se principalmente nos seguintes componentes principais:

  1. O indicador de correia de Brin é usado para avaliar oscilações de preços, considerando a compra quando o preço toca a baixa e a venda quando toca a alta
  2. O indicador RSI é usado para confirmar o estado de sobrecompra e sobrevenda no mercado, confirmando o excesso de venda quando o RSI é inferior a 25 e confirmando o excesso de venda quando é superior a 75
  3. O módulo DCA calcula o valor de cada posição em função da dinâmica dos direitos e interesses da conta, permitindo a gestão adaptativa dos fundos
  4. Módulo de stop loss estabelece um objetivo de lucro de 5% para atingir o objetivo de proteção de lucro automática
  5. O módulo de monitoramento do estado do mercado calcula a amplitude de variação do mercado em 90 dias, ajudando a determinar a tendência geral
  6. O módulo de rastreamento de lucros acumulados registra os lucros e perdas de cada transação para avaliar o desempenho da estratégia

Vantagens estratégicas

  1. Aumento da fiabilidade do sinal, combinado com a verificação cruzada de vários indicadores técnicos
  2. Adotar gestão de posições dinâmicas para evitar riscos de posições fixas
  3. Estabelecer condições razoáveis de suspensão e bloquear lucros em tempo hábil
  4. Com a função de monitoramento de tendências de mercado, é mais fácil entender o cenário geral
  5. Sistema de rastreamento de lucro para análise de desempenho estratégico
  6. Alerta em tempo real para oportunidades de negociação

Risco estratégico

  1. Mercado em turbulência pode desencadear sinais frequentes de aumento de custos de transação
  2. O RSI pode ficar para trás no mercado de tendência
  3. A paralisação de percentual fixo pode ser uma saída prematura de um mercado em forte tendência
  4. A estratégia da DCA pode causar um retorno maior em um mercado de queda unilateral As seguintes medidas são recomendadas para gerenciar riscos:
  • Configurar um limite máximo de posição
  • Parâmetros de ajuste dinâmico à volatilidade do mercado
  • Adicionar filtro de tendência
  • Implementar estratégias de suspensão por etapas

Direção de otimização da estratégia

  1. Otimização dinâmica de parâmetros:
  • Os parâmetros da faixa de Bryn podem ser ajustados de acordo com a taxa de flutuação
  • Os limites do RSI podem variar com o ciclo do mercado
  • A proporção de fundos DCA pode ser ajustada com o tamanho da conta
  1. Sistema de sinalização reforçado:
  • Aumentar a confirmação do volume
  • Adição de análise de linha de tendência
  • Combinado com mais indicadores técnicos de verificação cruzada
  1. O risco é controlado:
  • Realização de stop loss dinâmico
  • Adição de controle de retração máxima
  • Configurar um limite de perda diária

Resumir

A estratégia, por meio da aplicação integrada de métodos de análise técnica e de gestão de fundos, constrói um sistema de negociação mais completo. A vantagem da estratégia reside na identificação de múltiplos sinais e na gestão de riscos perfeita, mas ainda precisa de ser plenamente testada e otimizada no mercado real. A estratégia deve ter um desempenho estável em negociações reais, através da melhoria contínua da configuração de parâmetros e do aumento de indicadores auxiliares.

Código-fonte da estratégia
/*backtest
start: 2023-11-27 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true)

// Input Parameters
length = input.int(20, title="BB Length")  // Adjusted BB length
mult = input.float(2.5, title="BB Multiplier")  // Adjusted BB multiplier
rsiLength = input.int(14, title="RSI Length")  // Adjusted RSI length
rsiBuyLevel = input.int(25, title="RSI Buy Level")  // Adjusted RSI Buy Level
rsiSellLevel = input.int(75, title="RSI Sell Level")  // Adjusted RSI Sell Level
dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step")
takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy")

// Calculate DCA position size
equity = strategy.equity  // Account equity
dcaPositionSize = (equity * dcaPositionSizePercent) / 100  // DCA position size as percentage of equity

// Bollinger Bands Calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// RSI Calculation
rsi = ta.rsi(close, rsiLength)

// Plotting Bollinger Bands and RSI levels
plot(upper, color=color.red, title="Bollinger Upper")
plot(lower, color=color.green, title="Bollinger Lower")
hline(rsiBuyLevel, "RSI Buy Level", color=color.green)
hline(rsiSellLevel, "RSI Sell Level", color=color.red)

// Buy and Sell Signals
buySignal = (rsi < rsiBuyLevel and close <= lower)
sellSignal = (rsi > rsiSellLevel and close >= upper)

// DCA Strategy: Enter Long or Short based on signals with calculated position size
if (buySignal)
    strategy.entry("DCA Buy", strategy.long)

if (sellSignal)
    strategy.entry("DCA Sell", strategy.short)

// Take Profit Logic
if (strategy.position_size > 0)  // If long
    strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100))

if (strategy.position_size < 0)  // If short
    strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100))

// Plot Buy/Sell Signals on the chart
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white)

// Alerts for Buy/Sell Signals
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected")

// Cumulative Profit Calculation
var float buyPrice = na
var float profit = na
var float cumulativeProfit = 0.0  // Cumulative profit tracker

if (buySignal)
    buyPrice := close
if (sellSignal and not na(buyPrice))
    profit := (close - buyPrice) / buyPrice * 100
    cumulativeProfit := cumulativeProfit + profit  // Update cumulative profit
    label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down)
    buyPrice := na  // Reset buyPrice after sell

// Plot cumulative profit on the chart
var label cumulativeLabel = na
if (not na(cumulativeProfit))
    if not na(cumulativeLabel)
        label.delete(cumulativeLabel)
    cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up)

// Market Change over 3 months Calculation
threeMonthsBars = 3 * 30 * 24  // Approximation of 3 months in bars (assuming 1 hour per bar)
priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars])
marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100

// Plot market change over 3 months
var label marketChangeLabel = na
if (not na(marketChange))
    if not na(marketChangeLabel)
        label.delete(marketChangeLabel)
    marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up)

// Both labels (cumulative profit and market change) are displayed simultaneously
var label infoLabel = na
if (not na(cumulativeProfit) and not na(marketChange))
    if not na(infoLabel)
        label.delete(infoLabel)
    infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)