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

A Estratégia Avellaneda-Stoikov de Khaled Tamim

Autora:ChaoZhang, Data: 2024-04-30
Tags:

img

Resumo

A estratégia de Avellaneda-Stoikov é uma estratégia quantitativa de negociação baseada no modelo de Avellaneda-Stoikov. A estratégia determina os sinais de compra e venda calculando o preço médio, o preço de oferta e o preço de compra, considerando os custos da transação. A ideia principal da estratégia é comprar quando o preço está abaixo do preço de venda por um determinado limiar e vender quando o preço está acima do preço de venda por um determinado limiar, capturando assim o lucro do spread.

Princípio da estratégia

O núcleo desta estratégia é o modelo Avellaneda-Stoikov, que calcula os preços de compra e venda através das seguintes etapas:

  1. Calcule o preço médio, que é a média do preço atual e do preço anterior.
  2. Calcule o preço da licitação subtraindo um termo da raiz quadrada contendo Gamma, Sigma, T e k do preço médio e, em seguida, subtraindo o custo da transação.
  3. Calcule o preço de compra adicionando um termo da raiz quadrada contendo Gamma, Sigma, T e k ao preço médio e, em seguida, adicionando o custo da transação.
  4. Gerar um sinal de compra quando o preço estiver abaixo do preço de compra menos o limiar M; gerar um sinal de venda quando o preço estiver acima do preço de compra mais o limiar M.

Vantagens da estratégia

  1. Esta estratégia baseia-se no modelo Avellaneda-Stoikov, que é uma estratégia clássica de criação de mercado com uma base teórica sólida.
  2. A estratégia tem em conta o impacto dos custos de transacção, tornando-a mais realista para situações comerciais reais.
  3. Ao fixar o limiar M, a sensibilidade da estratégia pode ser ajustada de forma flexível para se adaptar aos diferentes ambientes de mercado.
  4. A lógica estratégica é clara e fácil de compreender e implementar.

Riscos estratégicos

  1. O desempenho da estratégia depende da escolha de parâmetros como Gamma, Sigma, T, k e M. Configurações incorretas de parâmetros podem levar a um desempenho de estratégia ruim.
  2. A estratégia não considera o impacto da liquidez do mercado.Em casos de liquidez insuficiente, pode não ser possível negociar ao preço esperado.
  3. Esta estratégia é uma estratégia de negociação de alta frequência que requer baixa latência de negociação e alta eficiência de execução, dificultando a sua implementação.

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

  1. Introduzir algoritmos de aprendizagem automática para ajustar dinamicamente os parâmetros da estratégia para se adaptarem às diferentes condições do mercado.
  2. Combinar outros indicadores técnicos ou informações sobre a microestrutura do mercado para melhorar a precisão do sinal.
  3. Otimizar o algoritmo de execução de negociações para reduzir os custos de transação e melhorar os retornos da estratégia.
  4. Considerar a introdução de um módulo de gestão de riscos para controlar as reduções de estratégia e a exposição ao risco.

Resumo

A estratégia Avellaneda-Stoikov de Khaled Tamim é uma estratégia quantitativa de negociação baseada no modelo clássico de criação de mercado. Ela gera sinais de negociação calculando os preços de oferta e demanda, considerando os custos de transação. As vantagens da estratégia estão em sua base teórica sólida, lógica clara e consideração dos custos de transação. No entanto, o desempenho da estratégia depende da seleção de parâmetros e requer alta eficiência de execução. No futuro, a estratégia pode ser ainda mais otimizada através da introdução de algoritmos de aprendizado de máquina, otimização da execução de negócios, introdução de gerenciamento de risco e outros métodos.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Khaled Tamim's Avellaneda-Stoikov Strategy", overlay=true)

// Avellaneda-Stoikov model logic
avellanedaStoikov(src, gamma, sigma, T, k, M) =>
    midPrice = (src + src[1]) / 2
    sqrtTerm = gamma * sigma * sigma * T
    // Add 0.1% fee to bid and ask quotes
    fee = 0 // 0.1% fee
    bidQuote = midPrice - k * sqrtTerm - (midPrice * fee)
    askQuote = midPrice + k * sqrtTerm + (midPrice * fee)
    longCondition = src < bidQuote - M
    shortCondition = src > askQuote + M
    [bidQuote, askQuote]

// Define strategy parameters
gamma = input.float(2, title="Gamma")
sigma = input.float(8, title="Sigma")
T = input.float(0.0833, title="T")
k = input.float(5, title="k")
M = input.float(0.5, title="M")

// Calculate signals
[bidQuote, askQuote] = avellanedaStoikov(close, gamma, sigma, T, k, M)
longCondition = close < bidQuote - M
shortCondition = close > askQuote + M

// Plot signals
plotshape(series=longCondition ? low : na, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition ? high : na, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Plot bid and ask prices
plot(bidQuote, title="Bid Price", color=color.blue, linewidth=1)
plot(askQuote, title="Ask Price", color=color.red, linewidth=1)

// Plot inventory level as bars in a separate graph
plot(strategy.netprofit, title="Inventory", color=color.new(color.purple, 80), style=plot.style_columns)


// Strategy logic
if (longCondition)
    strategy.entry("Buy", strategy.long)

if (shortCondition)
    strategy.entry("Sell", strategy.short)

Mais.