- Quadrado
- A Estratégia Avellaneda-Stoikov de Khaled Tamim
A Estratégia Avellaneda-Stoikov de Khaled Tamim
Autora:
ChaoZhang, Data: 2024-04-30
Tags:
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:
- Calcule o preço médio, que é a média do preço atual e do preço anterior.
- 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.
- 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.
- 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
- 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.
- A estratégia tem em conta o impacto dos custos de transacção, tornando-a mais realista para situações comerciais reais.
- 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.
- A lógica estratégica é clara e fácil de compreender e implementar.
Riscos estratégicos
- 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.
- 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.
- 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
- Introduzir algoritmos de aprendizagem automática para ajustar dinamicamente os parâmetros da estratégia para se adaptarem às diferentes condições do mercado.
- Combinar outros indicadores técnicos ou informações sobre a microestrutura do mercado para melhorar a precisão do sinal.
- Otimizar o algoritmo de execução de negociações para reduzir os custos de transação e melhorar os retornos da estratégia.
- 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.