Estratégia de negociação de oscilador de equilíbrio multifatorial


Data de criação: 2024-01-12 14:08:33 última modificação: 2024-01-12 14:08:33
cópia: 0 Cliques: 663
1
focar em
1617
Seguidores

Estratégia de negociação de oscilador de equilíbrio multifatorial

Visão geral

A estratégia de negociação de um oscilador de equilíbrio multifatorial é uma estratégia de negociação quantitativa que utiliza vários sinais de indicadores técnicos. A estratégia combina habilmente a energia do indicador de taxa de mudança (ROC), o indicador de força relativa (RSI), o indicador de canais de mercadorias (CCI), o indicador de William (%R) e o indicador de direção média (ADX) para julgar o movimento de uma variedade de mercados e gerar sinais de negociação através da computação de um indicador de flutuação integrado.

A maior vantagem dessa estratégia é a capacidade de julgar o mercado de forma objetiva e sistemática, procurando os melhores momentos de entrada e saída. Quando a linha de indicador de flutuação atravessa a linha de supera compra de 0,75, gera um sinal de compra; Quando a linha de indicador de flutuação atravessa a linha de supera venda de 0,25, gera um sinal de parada.

Princípio da estratégia

O núcleo da estratégia de negociação de um oscilante de equilíbrio multifatorial é o cálculo de um indicador de flutuação integrado. Os passos de cálculo do indicador são os seguintes:

  1. Calcule o valor de cada indicador técnico individual: incluindo o índice de taxa de mudança (ROC), o índice de força relativa (RSI), o índice de canais de mercadorias (CCI), o índice de William (%R) e o índice de direção média (ADX)

  2. Estandardizar os valores de cada indicador técnico para valores dentro do intervalo 0-1, para comparar

  3. Utilizando o pensamento da média ponderada, calcule o valor de um indicador de flutuação integrado. Cada indicador técnico tem um peso ajustável, assumindo ROC 2, RSI 0,5, CCI 2, % R 0,5, ADX 0,5. Multiplicar o valor de cada indicador padronizado pelo correspondente peso, somando-o e dividindo-o pela soma dos pesos, obtém um valor de flutuação integrado na faixa 0-1

  4. Quando esse valor de flutuação sintética atravessa as linhas de sobrecompra e venda apropriadamente definidas, gera o correspondente sinal de negociação.

Pode-se ver que a estratégia usa flexivelmente a energia de vários indicadores técnicos para avaliar a disponibilidade do mercado e tomar decisões de negociação por meio de um método sistemático. Isso evita o ruído do mercado causado por um único indicador técnico e permite manter a estabilidade das decisões de negociação em várias situações.

Vantagens estratégicas

A estratégia de negociação de um oscilador de equilíbrio multifatorial tem as seguintes vantagens:

  1. Fornecer métodos de análise de mercado objetivos e sistemáticos. Usar vários indicadores técnicos evita os defeitos de uma única ferramenta, ao mesmo tempo em que gera sinais de negociação práticos por meio de métodos quantitativos.

  2. Estratégias de otimização de entradas e saídas. A valorização precisa e o tratamento padronizado dos indicadores de flutuação fornecem uma base quantitativa para julgar o mercado.

  3. Altura pode ser personalizada e ajustável. Os pesos e parâmetros dos indicadores podem ser ajustados de acordo com o estilo de negociação individual para se adaptar a diferentes condições de mercado.

  4. Alerta de sinais em tempo real. Pode definir alertas de sinais de compra e de saída, garantindo a atualização dos mercados em tempo real.

  5. Retrospectiva rigorosa e otimização. Antes do disco, através da retrospectiva completa dos dados históricos, os parâmetros da estratégia podem ser julgados e otimizados, aumentando a eficácia da batalha real.

Risco estratégico

Apesar de ter muitos benefícios, a estratégia de negociação de um oscilador de equilíbrio multifatorial também apresenta alguns riscos na prática, como:

  1. Risco de otimização de parâmetros. Se o peso do indicador e a configuração dos parâmetros forem inadequados, isso afetará o desempenho do disco rígido.

  2. O risco de overbought e oversold varia de acordo com a situação.

  3. Risco de dispersação do indicador. Quando uma parte do indicador é dispersa, isso afeta o julgamento do indicador integrado. Nesse caso, pode ser considerado eliminar o indicador ou reduzir o peso.

  4. Limites dos modelos quantitativos. Qualquer modelo quantitativo pode falhar sob certas circunstâncias. Os operadores ainda precisam manter uma consciência de risco adequada.

A fim de evitar riscos, antes do lançamento, é necessário fazer um bom feedback e otimização de parâmetros, compreender as limitações da estratégia, acompanhar o efeito do lançamento, ajustar os parâmetros ou os pesos com flexibilidade conforme a situação. A intervenção humana, quando necessária, também é muito importante.

Direção de otimização

A estratégia de negociação de um oscilador de equilíbrio multifatorial pode ser ainda mais otimizada nos seguintes aspectos:

  1. Continuar a enriquecer o modelo multifatorial. Pode-se considerar a inclusão de mais diferentes tipos de indicadores técnicos, aumentando o discernimento do modelo.

  2. Experimente métodos de aprendizagem de máquina. Modelos avançados, como redes neurais, podem ser treinados para prever indicadores individuais e extrair mais características implícitas.

  3. Combinando o básico com o macroeconômico. Adicionar fatores básicos como dados econômicos e relatórios de desempenho para avaliar a situação do mercado.

  4. Adaptação dos parâmetros. Adaptação dinâmica dos pesos e parâmetros dos indicadores de acordo com as mudanças do ambiente de mercado.

  5. Introduzir mecanismos de suspensão de perdas. Definir limites razoáveis de suspensão de perdas e controlar ativamente as perdas individuais.

  6. Gerenciamento de fundos integrados. Ajustar o tamanho da posição de acordo com o tamanho da posse, para obter gerenciamento de fundos quantitativo.

Resumir

A estratégia de negociação do Multi-Factor Equilibrium Oscillator é uma excelente estratégia de negociação quantitativa. Ela reúne a essência de vários indicadores técnicos para julgar o mercado por meio de um método quantitativo rigoroso. Ao mesmo tempo, possui uma grande flexibilidade de personalização, que pode ser ajustada para o estilo pessoal.

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

// © Julien_Eche

//@version=5
strategy("Ultimate Balance Oscillator Strategy", overlay=true)

// Indicator Weights
weightROC = input.float(2, "Rate of Change (ROC) Weight", group="Weightings")
weightRSI = input.float(0.5, "Relative Strength Index (RSI) Weight", group="Weightings")
weightCCI = input.float(2, "Commodity Channel Index (CCI) Weight", group="Weightings")
weightWilliamsR = input.float(0.5, "Williams %R Weight", group="Weightings")
weightADX = input.float(0.5, "Average Directional Index (ADX) Weight", group="Weightings")

// ROC Settings
rocLength = input.int(20, "Length", minval=1, group="ROC")

// RSI Settings
rsiLength = input.int(14, "Length", minval=1, group="RSI")

// CCI Settings
cciLength = input.int(20, "Length", minval=1, group="CCI")

// Williams %R Settings
williamsRLength = input.int(14, "Length", minval=1, group="Williams %R")

// ADX Settings
adxLength = input.int(14, "ADX Length", minval=1, group="ADX")
adxDiLength = input.int(14, "DI Length", minval=1, group="ADX")

// Source
source_options = input.string("hlc3", "Source", options=["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"])

price_open = request.security(syminfo.tickerid, "D", open)
price_high = request.security(syminfo.tickerid, "D", high)
price_low = request.security(syminfo.tickerid, "D", low)
price_close = request.security(syminfo.tickerid, "D", close)
price_hl2 = request.security(syminfo.tickerid, "D", hl2)
price_hlc3 = request.security(syminfo.tickerid, "D", hlc3)
price_ohlc4 = request.security(syminfo.tickerid, "D", ohlc4)

get_source(source_option) =>
    price = price_close
    if source_option == "open"
        price := price_open
    else if source_option == "high"
        price := price_high
    else if source_option == "low"
        price := price_low
    else if source_option == "close"
        price := price_close
    else if source_option == "hl2"
        price := price_hl2
    else if source_option == "hlc3"
        price := price_hlc3
    else
        price := price_ohlc4
    price

src = get_source(source_options)

// Overbought/Oversold Levels
obLevel = input.float(0.75, "Overbought Level")
osLevel = input.float(0.25, "Oversold Level")

// Calculating the indicators
rocValue = ta.change(close, rocLength)
rsiValue = ta.rsi(close, rsiLength)
cciValue = (src - ta.sma(src, cciLength)) / (0.015 * ta.dev(src, cciLength))
williamsRValue = -100 * (ta.highest(high, williamsRLength) - close) / (ta.highest(high, williamsRLength) - ta.lowest(low, williamsRLength))

dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truerange = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
    minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

adxValue = adx(adxDiLength, adxLength)

// Normalizing the values
normalize(value, min, max) =>
    (value - min) / (max - min)

normalizedROC = normalize(rocValue, ta.lowest(rocValue, rocLength), ta.highest(rocValue, rocLength))
normalizedRSI = normalize(rsiValue, 0, 100)
normalizedCCI = normalize(cciValue, ta.lowest(cciValue, cciLength), ta.highest(cciValue, cciLength))
normalizedWilliamsR = normalize(williamsRValue, ta.lowest(williamsRValue, williamsRLength), ta.highest(williamsRValue, williamsRLength))
normalizedADX = normalize(adxValue, 0, 50)

// Calculating the combined oscillator line
oscillatorLine = (normalizedROC * weightROC + normalizedRSI * weightRSI + normalizedCCI * weightCCI + normalizedWilliamsR * weightWilliamsR + normalizedADX * weightADX) / (weightROC + weightRSI + weightCCI + weightWilliamsR + weightADX)

// Strategy conditions
enterLong = ta.crossover(oscillatorLine, obLevel)
exitLong = ta.crossunder(oscillatorLine, osLevel)

// Strategy orders
if (enterLong)
    strategy.entry("Buy", strategy.long)
if (exitLong)
    strategy.close("Buy")

// Alert conditions
if (enterLong)
    alert("Buy signal")
if (exitLong)
    alert("Exit signal")