Estratégia de negociação de redes dinâmicas

Autora:ChaoZhang, Data: 2023-12-01 14:41:57
Tags:

img

Resumo

A estratégia de negociação de rede dinâmica calcula a linha média móvel e suas faixas superior e inferior para definir dinamicamente o intervalo de negociação da rede.

Princípio da estratégia

A estratégia primeiro calcula a linha média móvel do período n definido e as faixas superior e inferior da linha média móvel. A faixa superior é a linha média móvel * (1 + parâmetro de entrada std), e a faixa inferior é a linha média móvel * (1 - parâmetro de entrada std).

Em seguida, dentro da zona de intervalo, definimos m linhas de grade uniformemente espaçadas. Quando os preços sobem e atravessam uma linha de grade, um sinal longo é emitido nessa linha de grade; quando os preços caem e atravessam uma linha de grade, um sinal de fechamento é emitido na linha de grade anterior correspondente a essa linha de grade. Através desta operação inversa, os lucros podem ser feitos quando os preços flutuam.

Especificamente, usamos um array bool order_array para registrar o status de negociação de cada linha de grade. Quando uma linha de grade desencadeia uma condição longa, o estado correspondente na ordem_array é definido como verdadeiro, indicando que a linha de grade já tem uma posição. Quando os preços caem e quebram a linha de grade, o estado da linha de grade anterior na ordem_array é definido como falso e um sinal de fechamento é emitido.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. O uso de médias móveis para construir um intervalo de negociação ajustado dinamicamente pode ajustar o intervalo com base na volatilidade do mercado para tornar a estratégia mais adaptável ao mercado.

  2. O projeto da grade pode automaticamente obter lucro e parar a perda para evitar a ampliação da perda causada por condições extremas de mercado.

  3. A quantidade de rede e a alocação de capital adotam um espaçamento e uma alocação iguais, o que pode controlar bem o tamanho das posições únicas e reduzir o risco de posições únicas.

  4. As configurações de sinais longos e fechados são razoáveis para negociar ao longo da tendência e obter lucros e parar perdas em tempo hábil.

Análise de riscos

A estratégia apresenta também alguns riscos:

  1. Quando o mercado é fraco a longo prazo e não consegue romper as linhas da grade, a estratégia cairá em negociações oscilantes sem objetivo, e alternar longs e shorts pode causar erosão de capital na conta.

  2. Os parâmetros selecionados std e o número de grades podem não ser completamente razoáveis e precisam ser determinados de acordo com a análise de diferentes variedades de negociação.

  3. A estratégia não tem em conta algumas condições de mercado extremas, tais como diferenças de preços, aumentos ou quedas explosivos a curto prazo, etc. Estas condições podem fazer com que a estratégia atravesse múltiplas redes, resultando em perdas além do controlo do risco.

Orientações de otimização

A estratégia pode também ser otimizada nos seguintes aspectos:

  1. Algoritmos de aprendizagem de máquina podem ser introduzidos para treinar modelos para prever trilhas superiores e inferiores de médias móveis, tornando as zonas de negociação mais inteligentes e dinâmicas.

  2. Os parâmetros, tais como o número de redes, o rácio de alocação de capital, o tamanho da posição, etc., podem ser otimizados de acordo com as características dos diferentes objetivos de negociação, utilizando parâmetros adaptativos.

  3. As ordens condicionais podem ser definidas para definir ordens de stop-loss com antecedência a uma certa distância das linhas da rede para desempenhar o papel de stop-loss prévio e de controle de perdas em condições de mercado extremas.

  4. Projetar um mecanismo de tratamento de exceções para condições de mercado extremas, como aumentar o tamanho da posição inicial, ignorar redes intermediárias diretamente para stop loss, etc., que possa lidar com situações como diferenças de preço.

Resumo

A estratégia de negociação de rede dinâmica é projetada de forma razoável como um todo. Ela pode construir um sistema automático de stop loss de lucro com redes que é adequado para variedades de negociação com flutuações freqüentes de preços. No entanto, ainda há certos riscos de mercado nesta estratégia. Parâmetros e situações excepcionais precisam ser otimizados antes que a estratégia se torne mais robusta.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)

Mais.