Consider a market participant $A$ who is mechanically following an automated liquidity providing algorithm (HFT) in a number of large cap stocks on a specific exchange.
Assume furthermore that we are able to observe all orders placed by $A$ and that we know that the algorithm used by $A$ takes only public market data as input. $A$ starts and ends all trading days with zero inventory.
We want to reverse engineer the algorithm used by $A$. Let's call this algorithm $f(...)$.
The first step in reverse engineering the algorithm $f(...)$ would be to collect potential input variables to the algorithm that can later be used to infer the exact form of $f(...)$.
The first problem we face is which input variables we should collect in order to be able to reverse engineer $f(...)$.
To have a starting point we can consider the input variables used in Avellaneda & Stoikov (2008). In Avellaneda & Stoikov (2008) the authors derive how a rational market maker (non-specialist) should set his bid and ask quotes in a limit order book market. The results are obviously contingent on the assumptions and model choices made in the paper.
The optimal bid (or ask) in Avellaneda & Stoikov (2008) is a function of the following inputs:
- The trader's reservation price, which is a function of the security price ($S$), the market maker's current inventory ($q$) and time left until terminal holding time ($T-t$)
- The relative risk aversion of the trader ($\gamma$) (obviously hard to observe!)
- The frequency of new bid and ask quotes ($\lambda_{bid}$ and $\lambda_{ask}$)
- The latest change in frequency of new bid and ask quotes ($\delta\lambda_{bid}$ and $\delta\lambda_{ask}$)
What potential input variables should we collect in order to be able to reverse engineer $f(...)$?