La stratégie Avellaneda-Stoikov de Khaled Tamim est une stratégie de négociation quantitative basée sur le modèle Avellaneda-Stoikov. Elle détermine les signaux d'achat et de vente en calculant les prix intermédiaires, les prix d'achat et de vente, tout en tenant compte des frais de transaction.
Au cœur de cette stratégie se trouve le modèle Avellaneda-Stoikov, qui calcule les prix d'achat et de vente en suivant les étapes suivantes: 1. Calculer le prix intermédiaire, c'est-à-dire la moyenne du prix actuel par rapport au prix précédent. 2. Calculer le prix d'achat, c'est-à-dire le prix intermédiaire moins la racine carrée d'un élément contenant Gamma, Sigma, T et k, et moins les frais de transaction. 3. Calculer le prix de vente, c'est-à-dire le prix intermédiaire plus une racine carrée contenant Gamma, Sigma, T et k, plus les frais de transaction. 4. Un signal d'achat est généré lorsque le prix est inférieur au prix d'achat moins le seuil M; un signal de vente est généré lorsque le prix est supérieur au prix de vente plus le seuil M.
La stratégie Avellaneda-Stoikov de Khaled Tamim est une stratégie de négociation quantitative basée sur le modèle classique des négociants, qui produit des signaux de négociation en calculant les prix d'achat et de vente, tout en tenant compte des frais de transaction. La stratégie a l'avantage d'être solide sur le plan théorique et logique, tout en tenant compte de l'impact des frais de transaction. Mais la performance de la stratégie dépend de la sélection des paramètres et nécessite une plus grande efficacité d'exécution.
/*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)