Literature Review on Optimal Order Execution (4)
2018-05-06
Today we implement the order placement strategy in Almgren and Chriss (2000) s.t. for a certain order size $Q$
, we can estimate the probability to perform the optimal strategy in the paper within time horizon of $T$
.
Mathematical Formulation
It is tolerable1 in HFT that we assume stock price evolves according to the discrete time arithmetic Brownian motion:
\begin{cases} dS(t) = \mu dt + \sigma dW(t),\\ dQ(t) = -\dot{Q}(t)dt \end{cases}
where $Q(t)$
is the quantity of stock we still need to order at time $t$
. Now let $\eta$
denote the linear coefficient for temporary market impact, and let $\lambda$
denote the penalty coefficient for risks. To minimize the cost function
$$ C = \eta \int_0^T \dot{Q}^2(t) dt + \lambda\sigma\int_0^T Q(t) dt $$
we have the unique solution given by
where $Q\equiv Q(0)$
is the total and initial quantity to execute, and the optimal liquidation horizon $T^*$
is given by
$$ T^* = \sqrt{\frac{4Q\eta}{\lambda\sigma}}. $$
Here, $\eta$
and $\lambda$
are exogenous parameters and $\sigma$
is estimated from the price time series (see the previous post) within $K$
time units, given by
$$ \hat{\sigma}^2 = \frac{\sum_{i=1}^n (\Delta_i - \hat{\mu}_{\Delta})^2}{(n-1)\tau} $$
where $\\{\Delta_i\\}$
are the first order differences of the stock price using $\tau$
as sample period, $n\equiv\lfloor K / \tau\rfloor$
is the length of the array, and
Notice that $\hat{\sigma}^2$
is proved asymptotically normal with variance
$$ Var(\hat{\sigma}^2) = \frac{2\sigma^4}{n}. $$
Now that we know
which yields
$$ \frac{16Q^2\eta^2}{\lambda^2\hat{\sigma}^2\hat{T}^4}\overset{d}{\to}\mathcal{N}\left(1, \frac{2}{n}\right), $$
to keep consistency of parameters, with $n\equiv \lfloor K/\tau\rfloor \to\infty$
we can also write
$$ \frac{16Q^2\eta^2}{\lambda^2\hat{\sigma}^2\hat{T}^4}\overset{d}{\to}\mathcal{N}\left(1, \frac{2\tau}{K}\right). $$
with which we can estimate the probability of successful strategy performance. Specifically, the execution strategy is given above, and the expected cost of trading is
Implementation
import numpy as np
from scipy.stats import norm
def generate_abm(mu, sigma, K, S0):
np.random.seed(222)
dS = mu - sigma**2 / 2 + sigma * np.random.normal(size=K)
S = np.cumsum(np.append(S0, dS))
return S
class OrderExecution:
def __init__(self, S, tau):
delta = S[tau::tau] - S[:-tau:tau]
self.sigma2 = ((delta - delta.mean())**2).sum() / (len(delta) - 1) / tau
self.tau = tau
self.K = len(S)
def info(self, Q, T, eta, lmd):
statistic = 16 * Q**2 * eta**2 / lmd**2 / self.sigma2 / T**4
prob = 1 - norm.cdf(statistic, loc=1, scale=2 * self.tau / self.K)
retn = np.sqrt(eta * lmd * self.sigma2**.5 * Q**3) * 4 / 3
return retn, prob
S = generate_abm(0.002, 0.06, 50000, 100)
OE = OrderExecution(S, 10)
OE.info(10, 3.6405, 0.02, 1)
(1.465147881156472, 0.8431842483948604)
which means there’s a probability of 84.3% that we can perform our order placement strategy of size 10 within 3.6405 time units and minimize the trading cost of 1.47 at optimum.
-
Over long-term investment time scales or in extremely volatile markets it is important to consider geometric rather than arithmetic Brownian motion; this corresponds to letting
$\sigma$
scale with$S$
But over the short-term trading time horizons of interest the total fractional price changes are small and the difference between arithmetic and geometric Brownian motions is negligible. (Almgren and Chriss, 2000) ↩︎