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

Sistema de estratégia de média de custos dinâmicos baseado em bandas de Bollinger e RSI

Autora:ChaoZhang, Data: 2024-11-27 16:37:12
Tags:BBRSIDCASMATP

img

Resumo

Esta estratégia é um sistema de negociação quantitativo que combina Bandas de Bollinger, Índice de Força Relativa (RSI) e Média de Custo Dinâmico (DCA). A estratégia implementa a construção automática de posições através de regras estabelecidas de gerenciamento de dinheiro durante as flutuações do mercado, ao mesmo tempo em que integra indicadores técnicos para determinação de sinais de compra / venda para alcançar a execução de risco controlada. O sistema também inclui lógica de lucro e funcionalidade de rastreamento de lucro acumulado para monitoramento e gerenciamento efetivos do desempenho comercial.

Princípios de estratégia

A estratégia baseia-se nos seguintes elementos essenciais:

  1. Bandas de Bollinger para determinar os intervalos de volatilidade dos preços, considerando a compra na faixa inferior e a venda na faixa superior
  2. RSI para confirmar condições de sobrecompra/supervenda, confirmar sobrecompra abaixo de 25 e sobrecompra acima de 75
  3. O módulo DCA calcula de forma dinâmica o tamanho das posições com base no património líquido da conta para gestão de capital adaptativa
  4. O módulo de captação de lucro estabelece um objectivo de lucro de 5% para o encerramento automático de posições
  5. A monitorização do estado do mercado calcula as alterações de mercado de 90 dias para avaliar as tendências globais
  6. O rastreamento do lucro acumulado registra o lucro/perda de cada operação para avaliação do desempenho da estratégia

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 de posições evita os riscos de posição fixa
  3. Condições razoáveis de obtenção de lucros garantem lucros em tempo útil
  4. Capacidades de monitorização das tendências do mercado auxiliam na compreensão do panorama geral
  5. Um sistema abrangente de acompanhamento dos lucros facilita a análise da estratégia
  6. Um sistema de alerta bem configurado proporciona oportunidades de negociação em tempo real

Riscos estratégicos

  1. Os mercados agitados podem desencadear sinais frequentes que aumentam os custos de negociação
  2. Os indicadores do RSI podem ficar atrasados nos mercados em tendência
  3. A taxa fixa de lucro pode sair muito cedo em tendências fortes
  4. A estratégia de DCA pode causar retrações significativas em tendências descendentes prolongadas Recomendações de gestão de riscos:
  • Estabelecer limites máximos de posição
  • Ajustar dinamicamente os parâmetros com base na volatilidade do mercado
  • Adicionar filtros de tendência
  • Implementar uma estratégia de captação de lucros em níveis

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

  1. Optimização dinâmica de parâmetros:
  • Os parâmetros das bandas de Bollinger adaptam-se à volatilidade
  • Os limiares do RSI variam de acordo com os ciclos de mercado
  • A atribuição de DCA é ajustada com o tamanho da conta
  1. Reforço do sistema de sinalização:
  • Adicionar confirmação de volume
  • Incluir análise da linha de tendência
  • Integrar a validação cruzada de indicadores técnicos adicionais
  1. Melhoria do controlo dos riscos:
  • Implementar um stop-loss dinâmico
  • Adicionar controlo de extracção máxima
  • Estabelecer limites de perdas diárias

Resumo

A estratégia constrói um sistema de negociação abrangente através da combinação de análise técnica e métodos de gerenciamento de dinheiro. Seus pontos fortes estão na confirmação de múltiplos sinais e no gerenciamento completo de riscos, embora ainda exija testes e otimização extensivos na negociação ao vivo. Através da melhoria contínua nas configurações de parâmetros e indicadores auxiliares adicionais, a estratégia mostra promessa de desempenho estável na negociação real.


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


Relacionados

Mais.