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

MA MACD BB Ferramenta de backtesting da estratégia de negociação multi-indicador

Autora:ChaoZhang, Data: 2024-06-03 09:49:08
Tags:MAMACDBB

img

Resumo

A MA MACD BB Multi-Indicator Trading Strategy Backtesting Tool é uma plataforma de desenvolvimento e backtesting de estratégias quantitativas de negociação. A ferramenta suporta três indicadores técnicos comumente usados: Moving Average (MA), Moving Average Convergence Divergence (MACD) e Bollinger Bands (BB). Os usuários podem escolher flexivelmente um deles como o principal indicador de sinal de negociação. Ao mesmo tempo, a ferramenta também suporta negociação longa e curta. Os usuários podem escolher flexivelmente ir longo ou curto de acordo com as tendências do mercado. Em termos de gerenciamento de risco, a ferramenta permite que os usuários definam flexivelmente a proporção de capital de cada transação para melhor controlar. Além disso, a ferramenta também fornece análise detalhada de indicadores de riscos e funções de geração de sinais para ajudar os usuários a entender melhor as oportunidades de negociação.

Princípio da estratégia

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

  1. Quando o utilizador seleciona o MA como indicador principal, a estratégia calcula a média móvel do período especificado e gera sinais de compra e venda, respectivamente, quando o preço ultrapassa a média móvel ou a média móvel.
  2. Quando o usuário seleciona o MACD como o indicador principal, a estratégia calcula o valor do MACD e a linha de sinal, e gera sinais de compra e venda, respectivamente, quando o MACD cruza acima ou abaixo da linha de sinal.
  3. Quando o usuário seleciona o BB como o indicador principal, a estratégia calcula os trilhos superior, médio e inferior da Banda de Bollinger.

Na negociação real, a estratégia calcula automaticamente o tamanho da posição de cada transacção com base na direção de negociação (longa ou curta) e nas configurações de gestão de capital selecionadas pelo utilizador, e executa, em seguida, as operações de abertura e de encerramento correspondentes de acordo com os sinais.

Vantagens da estratégia

  1. Indicadores flexíveis: Os utilizadores podem escolher de forma flexível o MA, o MACD ou o BB como indicador principal de negociação, de acordo com as suas preferências e características de mercado, adaptando-se aos diferentes estilos de negociação e ambientes de mercado.
  2. Negociação bidirecional: A estratégia suporta tanto negociação longa quanto curta. Os usuários podem escolher flexivelmente a direção de negociação de acordo com as tendências do mercado e podem lucrar não apenas em mercados em ascensão, mas também ganhar oportunidades de renda em mercados em queda.
  3. Risco controlado: os utilizadores podem definir de forma flexível o rácio de capital de cada transacção para controlar razoavelmente a exposição ao risco de uma única transacção.
  4. Sinais claros: A estratégia utiliza indicadores técnicos comuns para gerar sinais de negociação objetivos e claros e os exibe intuitivamente através de gráficos, permitindo aos utilizadores identificar claramente as direcções da tendência e o calendário de negociação.
  5. Backtesting conveniente: Os usuários podem usar essa ferramenta para testar dados históricos, avaliar e otimizar rapidamente o desempenho da estratégia e fornecer referências importantes para negociação ao vivo.

Riscos estratégicos

  1. Risco de mercado: Qualquer estratégia de negociação enfrenta o risco de volatilidade e incerteza do mercado, e esta estratégia não é exceção.
  2. Risco de parâmetros: o desempenho desta estratégia depende, em certa medida, dos parâmetros do indicador selecionados pelo utilizador, tais como o período de MA, os períodos de linha rápida e lenta do MACD e o período e a largura do BB.
  3. Risco de sobreajuste: se o usuário otimiza demais os parâmetros da estratégia no backtesting, isso pode fazer com que a estratégia seja muito específica para certos dados históricos e funcione mal no mercado real, ou seja, ocorram problemas de sobreajuste.
  4. Risco de cisne negro: Esta estratégia depende principalmente de indicadores técnicos para gerar sinais de negociação.

A fim de reduzir os riscos acima referidos, os utilizadores devem definir de forma razoável os parâmetros da estratégia, avaliar e ajustar regularmente as estratégias e acompanhar de perto as tendências do mercado, intervenindo manualmente quando necessário.

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

  1. Optimização de parâmetros dinâmicos: atualmente, os parâmetros do indicador da estratégia estão fixos.
  2. Optimização de sinais combinados: atualmente, a estratégia gera principalmente sinais de negociação baseados em um único indicador.
  3. Optimização do gerenciamento de posições: atualmente, a estratégia adota um gerenciamento de posições de relação fixa. Podemos considerar a introdução de métodos mais avançados, como a fórmula Kelly ou a estratégia de equilíbrio dinâmico, para otimizar o tamanho da posição e a relação risco-retorno.
  4. Optimização de stop-loss: atualmente, a estratégia não possui uma lógica de stop-loss clara. Podemos considerar a adição de um mecanismo de stop-loss dinâmico baseado em ATR ou porcentagem para controlar melhor os riscos de queda.
  5. Optimização de vários mercados: atualmente, a estratégia visa apenas um único mercado. Podemos considerar a expansão para vários mercados relacionados ou complementares para alavancar a ligação entre os mercados para melhorar a estabilidade e a lucratividade da estratégia.

As direcções de otimização acima se concentram principalmente em melhorar a adaptabilidade, a robustez, a rentabilidade e o controle de riscos da estratégia, introduzindo métodos mais avançados e flexíveis para melhorar e aperfeiçoar continuamente o desempenho da estratégia.

Resumo

O MA MACD BB Multi-Indicator Trading Strategy Backtesting Tool é uma ferramenta de negociação quantitativa rica em recursos, flexível e prática. Ele captura sinais de negociação através de três indicadores técnicos comuns, ao mesmo tempo em que suporta negociação longa e curta e gerenciamento de risco flexível, adaptando-se a diferentes mercados e estilos de negociação. Os usuários podem usar essa ferramenta para testar e otimizar dados históricos, e também podem aplicá-la à negociação ao vivo. Embora qualquer estratégia enfrente riscos de mercado e riscos de modelo, por meio de configurações razoáveis de parâmetros, controle de risco rigoroso e otimização e melhoria contínua, espera-se que essa estratégia se torne um poderoso assistente para os traders quantitativos, criando retornos estáveis a longo prazo para eles.


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



Relacionados

Mais.