Ferramenta de backtesting de estratégia de negociação multiindicador MA MACD BB

MA MACD BB
Data de criação: 2024-06-03 09:49:08 última modificação: 2024-06-03 09:49:08
cópia: 0 Cliques: 684
1
focar em
1617
Seguidores

Ferramenta de backtesting de estratégia de negociação multiindicador MA MACD BB

Visão geral

O MA MACD BB Multi Indicator Trading Strategy Feedback Tool é uma plataforma de desenvolvimento e feedback de estratégias de negociação quantitativa de alto desempenho. Suporta o uso de três indicadores técnicos comuns: Moving Average (MA), Moving Average Convergence Scatter Indicator (MACD) e Bollinger Bands (BB), permitindo ao usuário a flexibilidade de escolher um deles como principal indicador de sinal de negociação.

Princípio da estratégia

O princípio central da estratégia é o uso de três indicadores técnicos comuns (MA, MACD e BB) para identificar tendências de mercado e sinais de negociação.

  1. Quando o usuário seleciona o MA como o principal indicador, a estratégia calcula a média móvel do período especificado, gerando um sinal de compra e venda quando o preço sobe ou desce a média móvel.
  2. Quando o usuário seleciona o MACD como o principal indicador, a estratégia calcula o valor do MACD e a linha de sinal, gerando um sinal de compra e venda quando o MACD passa por cima ou por baixo da linha de sinal. Além disso, a estratégia também traça um gráfico em forma de coluna do MACD para mostrar a intensidade da tendência de forma mais intuitiva.
  3. Quando o usuário escolhe BB como o indicador principal, a estratégia calcula o trajeto de alta e baixa da faixa de Bryn, gerando um sinal de compra quando o preço quebra o trajeto de baixa, gerando um sinal de venda quando o preço quebra o trajeto de alta, e fechando a posição quando o preço volta ao centro do trajeto.

No momento da negociação, a estratégia calcula automaticamente o tamanho da posição de cada transação, de acordo com a direção de negociação escolhida pelo usuário (multi-cabeça ou cabeça) e a configuração de gerenciamento de fundos, e executa a correspondente operação de abertura de posição e posição de acordo com o sinal.

Vantagens estratégicas

  1. Indicador de flexibilidade: Os usuários podem escolher MA, MACD ou BB como indicadores de negociação principais, de acordo com suas próprias preferências e características de mercado, adaptando-se a diferentes estilos de negociação e ambientes de mercado.
  2. Negociação bidirecional: a estratégia suporta negociação bidirecional multi-marco, permitindo que o usuário escolha com flexibilidade a direção de negociação de acordo com as tendências do mercado, não apenas para lucrar em situações de alta, mas também para obter oportunidades de lucro em situações de baixa.
  3. Risco controlado: O usuário pode definir a proporção de fundos para cada transação com flexibilidade, controlar razoavelmente a abertura de risco de cada transação, e a estratégia calcula automaticamente o tamanho da posição de cada transação com base no saldo da conta, evitando riscos excessivos.
  4. Claridade do sinal: a estratégia utiliza indicadores técnicos comuns para gerar um sinal de negociação claro e objetivo, e através da visualização intuitiva do gráfico, o usuário pode identificar claramente a direção da tendência e o momento da negociação.
  5. Facilidade de retrospecção: Os usuários podem usar a ferramenta para retrospectar dados históricos, avaliar rapidamente e otimizar o desempenho da estratégia, fornecendo uma referência importante para negociações em disco.

Risco estratégico

  1. Risco de mercado: qualquer estratégia de negociação enfrenta o risco de volatilidade e incerteza no mercado, e esta estratégia não é uma exceção. Se houver uma forte flutuação no mercado ou um comportamento irracional, isso pode levar a estratégias com sinais errados e perdas.
  2. Risco de parâmetros: O desempenho da estratégia depende em parte dos parâmetros indicadores escolhidos pelo usuário, como o período de MA, o período de linha rápida e lenta de MACD, o período e a largura de BB, etc. A configuração inadequada dos parâmetros pode causar má eficácia da estratégia.
  3. Risco de sobreajuste: Se o usuário otimiza demais os parâmetros da estratégia no feedback, isso pode levar a estratégias que são muito direcionadas para dados históricos específicos e não funcionam bem no mercado real, ou seja, há problemas de ajuste.
  4. Risco de Cisne Negro: A estratégia depende principalmente de indicadores técnicos para gerar sinais de negociação, e a estratégia pode não ser capaz de responder em tempo hábil se houver uma mudança fundamental significativa no mercado ou um evento extremo, resultando em grandes perdas.

Para reduzir o risco acima, os usuários devem definir razoavelmente os parâmetros da estratégia, avaliar e ajustar a estratégia periodicamente, acompanhar de perto a movimentação do mercado e, se necessário, intervir manualmente. Além disso, são indispensáveis medidas rigorosas de gerenciamento de risco, como a configuração de stop loss e limites de posição.

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

  1. Otimização de parâmetros dinâmicos: os parâmetros indicadores da estratégia atual são fixos, e pode ser considerado a introdução de mecanismos de adaptação, ajustando dinamicamente os parâmetros de acordo com as mudanças na situação do mercado, a fim de se adaptar melhor ao mercado.
  2. Otimização de sinais combinados: atualmente, a estratégia é gerar sinais de negociação com base em um único indicador. Pode-se considerar a combinação de sinais de vários indicadores, como a combinação de MA e MACD, para aumentar a confiabilidade e a robustez do sinal.
  3. Optimização do gerenciamento de posições: a estratégia atual usa o gerenciamento de posições em proporções fixas, e pode considerar a introdução de métodos mais avançados, como a fórmula de Kelly ou a estratégia de equilíbrio dinâmico, para otimizar o tamanho da posição e o risco-benefício.
  4. Optimização de stop loss: A falta de uma lógica de stop loss clara nas estratégias atuais pode levar a considerar a inclusão de um mecanismo de stop loss dinâmico baseado em ATR ou porcentagem para melhor controlar o risco de queda.
  5. Optimização de vários mercados: atualmente, as estratégias são direcionadas apenas para um único mercado. Pode-se considerar a expansão para vários mercados relacionados ou complementares, aproveitando a interligação entre os mercados para aumentar a estabilidade da estratégia e os níveis de receita.

A orientação de otimização acima é baseada principalmente na perspectiva de melhorar a adaptabilidade, a estabilidade, a rentabilidade e o controle do risco da estratégia, melhorando e aperfeiçoando continuamente o desempenho da estratégia por meio da introdução de métodos mais avançados e flexíveis.

Resumir

A ferramenta de retrospecção de estratégias de negociação de múltiplos indicadores MA MACD BB é uma ferramenta de negociação quantitativa funcional e flexível. Captura sinais de negociação por meio de três indicadores técnicos comuns, ao mesmo tempo em que suporta negociação bidirecional e de múltiplos espaços e gerenciamento flexível de riscos, adaptando-se a diferentes mercados e estilos de negociação. O usuário pode usar a ferramenta para retrospecção e otimização de dados históricos, bem como aplicá-los à negociação em ações reais.

Código-fonte da estratégia
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
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/
// © Future_Billi0naire_

//@version=5
strategy("MA MACD BB Backtester", overlay=true)

//@variable Input for Strategy
which_ta = input.string("MA", title="Select Indicator", options=["MACD", "BB", "MA"])
which_camp = input.string("Long", title="Select Long / Short", options=["Short", "Long"])

//@variable Input parameters for Risk Management
positionSize = input.float(100.0, title="Each position's capital allocation %", minval=0.0, maxval = 100.0) / 100

//@variable Input parameters for MACD
fast_length = input.int(12, title="MACD Fast Length")
slow_length = input.int(26, title="MACD Slow Length")
signal_smoothing = input.int(9, title="MACD Signal Smoothing")
macd_source = input.source(close, title="MACD Source")

//@variable Input parameters for Moving Average
ma_length = input.int(50, title="Moving Average Length")

//@variable Input parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_mult = input.float(2.0, title="Bollinger Bands Multiplier")

// Choosing the Strategy
int x = na
if which_ta == "MA"
    x := 1
else if which_ta == "MACD"
    x := 2
else if which_ta == "BB"
    x := 3

// Calculate MACD and Signal line
[macdLine, signalLine, _] = ta.macd(macd_source, fast_length, slow_length, signal_smoothing)

// Calculate Moving Average
ma = ta.sma(close, ma_length)

// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
dev = bb_mult * ta.stdev(close, bb_length)
upper = basis + dev
lower = basis - dev

// Plotting MACD and Signal lines
plot(x == 2 ? macdLine : na, color=color.blue, title="MACD Line")
plot(x == 2 ? signalLine : na, color=color.red, title="Signal Line")

// Plotting histogram
histogram = macdLine - signalLine
plot(x == 2 ? histogram : na, color=color.gray, style=plot.style_histogram, title="MACD Histogram")

// Plotting Moving Average
plot(x == 1 ? ma : na, color=color.orange, title="Moving Average")

// Plotting Bollinger Bands
plot(x == 3 ? upper : na, color=color.green, title="Upper Bollinger Band")
plot(x == 3 ? lower : na, color=color.red, title="Lower Bollinger Band")
plot(x == 3 ? basis : na, color=color.blue, title="Basis Bollinger Band")

// Generate buy signals
buySignalMACD = ta.crossover(macdLine, signalLine)
buySignalMA = ta.crossover(close, ma)
buySignalBB = close < lower
sellSignalBBExit = close > basis

// Generate sell signals
sellSignalMACD = ta.crossunder(macdLine, signalLine)
sellSignalMA = ta.crossunder(close, ma)
sellSignalBB = close > upper
buySignalBBExit = close < basis

// Plot buy signals on the chart
plotshape(series=buySignalMACD and x == 2 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMACD : na, title="Buy Signal MACD", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MACD")
plotshape(series=buySignalMA and x == 1 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMA : na, title="Buy Signal MA", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MA")
plotshape(series=buySignalBB and x == 3 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalBB : na, title="Buy Signal BB", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY BB")

// Plot sell signals on the chart
plotshape(series=sellSignalMACD and x == 2 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMACD : na, title="Sell Signal MACD", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MACD")
plotshape(series=sellSignalMA and x == 1 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMA : na, title="Sell Signal MA", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MA")
plotshape(series=sellSignalBB and x == 3 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalBB : na, title="Sell Signal BB", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL BB")

// Calculate stop loss and take profit levels
accountSize = strategy.equity
positionSizeAmount = accountSize * positionSize

// Calculate order size based on stop loss amount
orderSize = math.floor(positionSizeAmount / close)

// Enter long positions based on buy signals
if strategy.opentrades == 0
    if (buySignalMACD) and x == 2 and which_camp == "Long"
        strategy.entry("Buy MACD", strategy.long, qty=orderSize)
    if (buySignalMA) and x == 1 and which_camp == "Long"
        strategy.entry("Buy MA", strategy.long, qty=orderSize)
    if (buySignalBB) and x == 3 and which_camp == "Long"
        strategy.entry("Buy BB", strategy.long, qty=orderSize)

// Enter short positions based on sell signals
if strategy.opentrades == 0
    if (sellSignalMACD) and x == 2 and which_camp == "Short"
        strategy.entry("Sell MACD", strategy.short, qty=orderSize)
    if (sellSignalMA) and x == 1 and which_camp == "Short"
        strategy.entry("Sell MA", strategy.short, qty=orderSize)
    if (sellSignalBB) and x == 3 and which_camp == "Short"
        strategy.entry("Sell BB", strategy.short, qty=orderSize)

// Close positions based on exit signals
if (sellSignalMACD) and which_camp == "Long"
    strategy.close("Buy MACD")
if (sellSignalMA) and which_camp == "Long"
    strategy.close("Buy MA")
if (sellSignalBBExit) and which_camp == "Long"
    strategy.close("Buy BB")
if (buySignalMACD) and which_camp == "Short"
    strategy.close("Sell MACD")
if (buySignalMA) and which_camp == "Short"
    strategy.close("Sell MA")
if (buySignalBBExit) and which_camp == "Short"
    strategy.close("Sell BB")