
Visão geral
A estratégia de negociação quantitativa de grelha auto-adaptável é uma estratégia de negociação quantitativa baseada no conceito de negociação de grelha e grelha. A estratégia é baseada em calcular uma média móvel simples do preço (SMA) como a linha central da tendência do mercado e, em seguida, estabelecer uma grelha proporcional abaixo da linha central. Quando o preço oscila entre essas linhas de grelha, a estratégia compra quando o preço toca a linha de grelha inferior e vende quando toca a linha de grelha superior.
Princípio da estratégia
O princípio central de uma estratégia de negociação quantitativa de grade uniforme auto-adaptável baseia-se na característica de regressão do valor médio dos preços de mercado. A estratégia é implementada através dos seguintes passos:
- O código usa uma média móvel de 300 horas, um período longo o suficiente para filtrar os movimentos de curto prazo.
- Baseando-se na média móvel, defina a taxa de desvios ascendentes e descendentes (neste caso, 3%) e defina os limites superiores e inferiores das transações na grelha.
- Dependendo do número de linhas de grade definido pelo usuário (no máximo 15 linhas), distribuir linhas de grade uniformemente entre as fronteiras superior e inferior.
- O uso de uma matriz de Boolean para registrar a posição de cada posição da grade para garantir a execução precisa da transação.
- Logística de transação:
- Quando o preço está abaixo de uma certa linha da grelha e a posição não é mantida, é comprado na posição da grelha.
- Quando o preço está acima de uma linha da grelha e a próxima posição mais baixa da grelha já está em posição, a posição de esta posição mais baixa é neutralizada.
A essência da estratégia é capturar a alta frequência de oscilação de preços dentro de um determinado intervalo, para realizar “compra baixa e venda alta”. A estratégia permite a posse simultânea de várias posições (até 15), cada uma correspondendo a uma linha de grelha diferente, o design permite que a estratégia aproveite mais plenamente as flutuações de preços.
Vantagens estratégicas
A estratégia de negociação quantitativa de grade uniforme adaptativa tem as seguintes vantagens significativas:
- Forte adaptaçãoA estratégia é baseada em uma média móvel que ajusta automaticamente a posição da grelha, adaptando-se a diferentes condições de mercado e mudanças nos níveis de preços.
- Dispersão de riscosO objetivo é reduzir o risco de uma única transação, permitindo a dispersão dos fundos através de transações em vários locais da grelha.
- Oportunidades de lucro frequentesNo entanto, a estratégia pode capturar oportunidades de lucro em pequenos movimentos frequentes em mercados turbulentos.
- Um sinal claro de entrada e saída.Os sinais de negociação são baseados em condições de linha de grelha de preço definido, reduzindo o julgamento subjetivo e aumentando a consistência da execução da estratégia.
- Parâmetros simples e flexíveisA estratégia precisa apenas ajustar os três principais parâmetros: comprimento da média móvel, taxa de desvio da grade e número de grades, para facilitar a otimização e a retrospecção.
- A lógica é clara.: Usar uma estrutura de array para armazenar preços de grelha e estados de ordem, a lógica do código é clara, fácil de entender e manter.
- Apoio em visualizaçãoA estratégia fornece uma visualização da linha de grade, permitindo aos traders observar de forma intuitiva os intervalos de negociação e os potenciais pontos de negociação.
Risco estratégico
Apesar do bom desenho da estratégia, existem os seguintes riscos potenciais:
- Risco de mercado de tendênciaEm um mercado de forte tendência, os preços podem continuar a mover-se em uma direção, resultando em uma estratégia de abertura de posição contínua e falta de oportunidades de negociação, aumentando a ocupação de capital e podendo gerar grandes perdas. A solução é aumentar as condições de filtragem de tendência ou definir um limite máximo de posição.
- Sensibilidade do parâmetroA configuração do comprimento da média móvel e da taxa de desvio da grelha tem um grande impacto no desempenho da estratégia. Os parâmetros inadequados podem levar a uma grelha muito ampla (baixas frequências de transação) ou muito estreita (aumento de falsos sinais). É recomendado determinar o melhor conjunto de parâmetros através de uma retrospectiva completa.
- Riscos de gestão de fundosA estratégia permite no máximo 15 posições simultâneas. O controle imprudente da proporção de capital em cada transação pode levar a uma concentração excessiva de capital. Deverá ser configurado o tamanho da posição de proporção de capital fixo ou de ajuste dinâmico em cada transação.
- Ponto de deslizamento e efeitos da taxaA estratégia de negociação de alta frequência é mais sensível a pontos de deslizamento e taxas, especialmente quando a grelha é mais estreita. É recomendável considerar esses fatores de custo no feedback e ajustar a largura da grelha de acordo.
- Risco de liquidez: Em mercados com baixa liquidez ou em períodos de forte volatilidade, pode ser difícil executar negociações de acordo com o preço ideal, afetando o desempenho da estratégia. Deve-se escolher variedades de negociação com liquidez suficiente e considerar a configuração de proteção de deslizamento.
Direção de otimização da estratégia
Com base na análise do código, a estratégia pode ser otimizada nas seguintes direções:
- Adicionar filtro de tendênciaPara avaliar a tendência do mercado, em combinação com outros indicadores técnicos (como MACD, RSI ou DMI), suspender ou ajustar a estratégia de negociação da grelha em mercados de tendência visível para evitar perdas de negociação adversária.
- Largura da grelha dinâmicaAjustar dinamicamente a taxa de desvio da grelha de acordo com a volatilidade do mercado (como o indicador ATR), ampliar o intervalo da grelha quando a volatilidade aumenta, reduzir o intervalo da grelha quando a volatilidade diminui, adaptar-se melhor a diferentes condições de mercado.
- Apresentando um mecanismo de stop loss: Configure as condições de stop loss para cada posição da grelha, para proteger os fundos em caso de volatilidade anormal do mercado. Pode ser considerado o stop loss dinâmico ou o stop loss de proporção fixa baseado no ATR.
- Optimizar a gestão de fundosImplementar a gestão dinâmica de posições, ajustando dinamicamente a proporção de fundos em cada transação de acordo com o capital da conta, a volatilidade do mercado e as posições já mantidas, aumentando a eficiência do uso de fundos e a capacidade de controlar o risco.
- Aumentar o tempo de filtragemAnalisar as características do mercado em diferentes períodos de tempo, ativar estratégias em períodos de tempo adequados para a negociação da grade, reduzir a frequência de negociação ou suspender a negociação em períodos de tempo inadequados.
- Confirmação de múltiplos períodos de tempoO objetivo é reduzir o número de falsos sinais e transações inválidas, combinando com períodos mais longos e mais curtos de confirmação de transações.
- Otimizar a eficiência do código: A parte de visualização de linhas de grelha no código atual usa uma frase de plot repetida, que pode ser usada para otimizar a estrutura de loop, melhorando a simplicidade e a manutenção do código.
Resumir
A estratégia de negociação quantitativa de grade auto-adaptável é um sistema de negociação de grade baseado no princípio da regressão de valor equivalente, que capta as oportunidades de negociação trazidas pela flutuação de preços por meio da configuração da grade em torno da média móvel. A estratégia é concebida de forma simples, com poucos parâmetros e fácil de ajustar, especialmente adequada para aplicações em mercados de turbulência.
No entanto, a estratégia pode ter riscos em mercados de forte tendência e precisa de filtragem de tendência e mecanismo de parada para otimizar. Além disso, também vale a pena explorar direções de otimização, como ajuste dinâmico da largura da grade, aperfeiçoamento do gerenciamento de fundos e aumento da confirmação de múltiplos ciclos de tempo. Com essas otimizações, a estratégia espera obter um desempenho mais estável e excelente em diferentes ambientes de mercado.
Esta estratégia fornece uma boa estrutura básica para os comerciantes de quantidade experientes, que podem ser personalizadas e otimizadas de acordo com o estilo de negociação individual e preferências de risco, exercitando a vantagem de negociação de grades em capturar a volatilidade do mercado.
Código-fonte da estratégia
/*backtest
start: 2025-04-01 00:00:00
end: 2025-06-22 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy('Grid Trading Strategy', overlay=true, pyramiding=15)
// 输入参数设置
ma_length = input.int(300, '移动平均线长度', group='移动平均线条件', step=10)
std = input.float(0.03, title='网格上下偏差率', group='网格条件', step=0.01)
grid = input.int(15, maxval=15, title='网格线数量', group='网格条件')
// 计算移动平均线及网格边界
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)
// 执行交易逻辑
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)