Estratégia quantitativa de ajuste de posição dinâmica de grade de rastreamento de tendências

TTM EMA GRID DCA ATR SMA
Data de criação: 2024-12-12 11:19:17 última modificação: 2024-12-12 11:19:17
cópia: 0 Cliques: 641
1
focar em
1617
Seguidores

Estratégia quantitativa de ajuste de posição dinâmica de grade de rastreamento de tendências

Visão geral

A estratégia é um sistema de negociação de grelha dinâmica baseado em indicadores TTM, que determina a direção da tendência do mercado através do cálculo da média móvel indexada (EMA) dos pontos altos e baixos, e implanta o sistema de negociação de grelha em torno de preços de referência atualizados dinamicamente. A direção da grelha e os níveis de preço são ajustados dinamicamente de acordo com a tendência, e as transações são executadas quando o preço atravessa o nível de grelha predefinido, com uma porcentagem fixa de risco de cada transação em benefício da contabilidade.

Princípio da estratégia

A lógica central da estratégia reside no cálculo do estado TTM, que é realizado através dos seguintes passos:

  1. Computação de dois EMAs com base no parâmetro ttmPeriod: ponto baixo EMA (lowMA) e ponto alto EMA (highMA)
  2. Entre o highMA e o lowMA, definem-se dois níveis de barreira:
    • lowThird: 1 / 3 posição inferior
    • highThird: posição 23 inferior
  3. Determine o estado do TTM de acordo com a posição do preço de fechamento em relação a esses limites:
    • Quando o preço de fechamento está acima do highThird, retorna para 1 (a tendência ascendente)
    • Quando o preço de fechamento está abaixo de lowThird, retorna a 0 (trend descendente)
    • Quando o preço de fechamento está entre o lowThird e o highThird, retorna para o estado neutro de -1

O sistema de negociação da grelha se adapta dinamicamente ao estado do TTM:

  1. Atualizar o preço de referência da grelha e direção quando o estado do TTM muda
  2. Níveis de preços de compra e venda de acordo com a direção e a distância da grade
  3. Executar a correspondente operação de compra ou venda quando o preço quebra o nível da grade

Vantagens estratégicas

  1. Adaptabilidade dinâmica: a capacidade da estratégia de ajustar dinamicamente a direção da grade e o nível de preços de acordo com as tendências do mercado, aumentando a adaptabilidade e a lucratividade da estratégia
  2. Controle de risco perfeito: administração de posições com porcentagens fixas, controlando efetivamente a abertura de risco de cada transação
  3. Parâmetros ajustáveis: os parâmetros-chave, como o ciclo TTM, o nível de grade e o intervalo, podem ser otimizados para diferentes condições de mercado
  4. Mecanismos de execução são claros: os sinais de negociação são claros, a lógica de execução é simples e intuitiva, facilitando a detecção e a operação em disco

Risco estratégico

  1. Atraso no julgamento de tendências: há um certo atraso no indicador TTM baseado em EMA, o que pode causar um atraso no sinal do ponto de viragem da tendência
  2. Risco de mercado de choque: em mercados de choque horizontal, a frequente mudança de direção da grelha pode levar a perdas de transações excessivas e comissões
  3. Pressão de gerenciamento de fundos: a necessidade de uma maior quantidade de fundos quando várias redes são executadas simultaneamente pode afetar a viabilidade real da estratégia
  4. Efeitos de deslizamento: as negociações de rede de alta frequência podem enfrentar grandes deslizamentos quando a liquidez é insuficiente, afetando o desempenho da estratégia

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

  1. Optimização de tendências:
    • Introdução de análises de múltiplos períodos de tempo para melhorar a precisão de discernimento de tendências
    • Confirmação de tendências em combinação com outros indicadores técnicos como RSI, MACD, etc.
  2. Optimização de parâmetros de grade:
    • Ajustar o intervalo da grade de acordo com a taxa de flutuação
    • Introdução de um mecanismo de ajuste adaptativo a nível da grade
  3. Melhorias na gestão de fundos:
    • Realizar uma distribuição de posições dinâmica
    • Aumento do mecanismo de compensação de risco
  4. Mecanismos de execução:
    • Aumentar os mecanismos de suspensão e parada
    • Otimize o tempo de execução dos pedidos

Resumir

A estratégia, combinando o julgamento de tendências do TTM com a negociação de grades dinâmicas, permite um sistema de negociação altamente adaptável e controlado pelo risco. A estratégia pode se adaptar melhor a diferentes ambientes de mercado, ajustando dinamicamente a direção da grade e os níveis de preços. Embora haja alguns riscos inerentes, a estratégia tem um bom valor prático e potencial de desenvolvimento, através de medidas razoáveis de configuração e otimização de parâmetros.

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

//@version=5
strategy("TTM Grid Strategy", overlay=true)

// Input parameters
int ttmPeriod = input.int(6, minval=1, title="TTM Period")
int gridLevels = input.int(5, minval=2, title="Grid Levels")
float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)")

// Calculate TTM State
ttmState() =>
    lowMA = ta.ema(low, ttmPeriod)
    highMA = ta.ema(high, ttmPeriod)
    lowThird = (highMA - lowMA) / 3 + lowMA
    highThird = 2 * (highMA - lowMA) / 3 + lowMA

    if close > highThird
        1
    else if close < lowThird
        0
    else
        -1

// State tracking variables
var float gridBasePrice = 0.0
var int gridDirection = -1

// Determine grid state
updateGridState(float currentClose, int currentState) =>
    float newBasePrice = gridBasePrice
    int newDirection = gridDirection

    if currentState != -1 and currentState != gridDirection
        newBasePrice := currentClose
        newDirection := currentState
    
    [newBasePrice, newDirection]

// Calculate grid levels
calcGridLevels(float basePrice, int direction, int levels) =>
    float[] buyLevels = array.new_float(levels)
    float[] sellLevels = array.new_float(levels)

    for i = 1 to levels
        multiplier = i * gridSpacing
        if direction == 1  // Buy grid
            array.set(buyLevels, i-1, basePrice * (1 - multiplier))
            array.set(sellLevels, i-1, basePrice * (1 + multiplier))
        else  // Sell grid
            array.set(buyLevels, i-1, basePrice * (1 + multiplier))
            array.set(sellLevels, i-1, basePrice * (1 - multiplier))
    
    [buyLevels, sellLevels]

// Execute grid trades
executeGridTrades(float basePrice, int direction, int levels) =>
    [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels)

    for i = 0 to levels - 1
        float buyLevel = array.get(buyLevels, i)
        float sellLevel = array.get(sellLevels, i)

        if direction == 1  // Buy grid
            if low <= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if high >= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))
        else  // Sell grid
            if high >= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if low <= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))

// Main strategy logic
currentState = ttmState()
[newGridBasePrice, newGridDirection] = updateGridState(close, currentState)

// Update global variables
if newGridBasePrice != gridBasePrice
    gridBasePrice := newGridBasePrice
if newGridDirection != gridDirection
    gridDirection := newGridDirection

// Execute grid trades
executeGridTrades(newGridBasePrice, newGridDirection, gridLevels)

// Visualization
plotColor = newGridDirection == 1 ? color.green : color.red
plot(newGridBasePrice, color=plotColor, style=plot.style_cross)