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

Tendência de seguir a estratégia de dimensionamento da posição da grade dinâmica

Autora:ChaoZhang, Data: 2024-12-12 11:19:17
Tags:TTMEMAGrelhaDCAATRSMA

img

Resumo

Esta estratégia é um sistema de negociação de rede dinâmica baseado no indicador TTM, que determina a direção da tendência do mercado calculadora de médias móveis exponenciais (EMA) de máximos e mínimos, e implementa um sistema de negociação de rede em torno de um preço base dinâmicamente atualizado.

Princípios de estratégia

A lógica central reside no cálculo do estado TTM, implementado através das seguintes etapas:

  1. Calcular duas EMA com base no parâmetro ttmPeriod: EMA de mínimos (lowMA) e máximos (highMA)
  2. Definir dois níveis de limiar entre a alta e a baixa MA:
    • Baixo Terceiro: 1/3 posição a partir do fundo
    • Alto Terceiro: posição 2/3 a partir do fundo
  3. Determinar o estado do TTM com base na posição de preço de fechamento em relação a estes limiares:
    • Retorna 1 (tendência ascendente) quando o fechamento está acima da altaThird
    • Retorna 0 (tendência descendente) quando o fechamento está abaixo de baixoThird
    • Retorna -1 (estado neutro) quando o close está entre lowThird e highThird

O sistema de negociação de rede ajusta-se dinamicamente com base no estado TTM:

  1. Atualiza o preço de base da rede e a direção quando o estado da TTM muda
  2. Calcula os níveis de preços de compra/venda com base na direção e no espaçamento da grade
  3. Executa as operações de compra ou venda correspondentes quando o preço ultrapassa os níveis da grade

Vantagens da estratégia

  1. Forte adaptabilidade dinâmica: a estratégia pode ajustar dinamicamente a direção da rede e os níveis de preços com base nas tendências do mercado, melhorando a adaptabilidade e a rentabilidade
  2. Controlo robusto do risco: utiliza uma dimensão de posição fixa em percentagem, controlando efetivamente a exposição ao risco por transação
  3. Boa regulabilidade dos parâmetros: os parâmetros-chave, como o período TTM, os níveis de grade e o espaçamento, podem ser otimizados para diferentes condições de mercado
  4. Mecanismo de execução claro: os sinais de negociação são claros, a lógica de execução é simples e intuitiva, facilitando o backtesting e a negociação ao vivo

Riscos estratégicos

  1. Retardo na detecção da tendência: o indicador TTM baseado na EMA tem um atraso inerente, potencialmente causando sinais atrasados nos pontos de virada da tendência
  2. Risco de mercado lateral: mudanças frequentes de direção da rede em mercados variáveis podem levar a excesso de negociação e taxas excessivas
  3. Pressão de gestão de capital: a execução simultânea de vários níveis de rede requer um capital substancial, potencialmente afetando a viabilidade da estratégia
  4. Impacto do deslizamento: a negociação de redes de alta frequência pode enfrentar deslizamentos significativos em condições de baixa liquidez, afetando o desempenho da estratégia

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

  1. Optimização da detecção de tendências:
    • Incorporar análises de quadros de tempo múltiplos para melhorar a precisão da detecção de tendências
    • Combinar com outros indicadores técnicos como RSI, MACD para confirmação da tendência
  2. Optimização de parâmetros da grade:
    • Ajustar dinamicamente o espaçamento da rede com base na volatilidade
    • Implementar um mecanismo de ajustamento adaptativo ao nível da rede
  3. Melhoria da gestão do capital:
    • Implementar uma atribuição de posição dinâmica
    • Adicionar o mecanismo de paridade de riscos
  4. Melhoria do mecanismo de execução:
    • Adicionar mecanismos de stop-loss e take-profit
    • Otimizar o calendário de execução das ordens

Resumo

Esta estratégia combina a detecção de tendências TTM com a negociação dinâmica da rede para criar um sistema de negociação adaptável e controlado pelo risco. Através do ajuste dinâmico da direção da rede e dos níveis de preços, a estratégia pode se adaptar efetivamente a diferentes ambientes de mercado.


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

Relacionados

Mais.