Skip to content

Instantly share code, notes, and snippets.

@0xJchen
Forked from sebjai/OrderFlow.ipynb
Created January 31, 2023 21:59
Show Gist options
  • Save 0xJchen/b77daee8ed4f90c86e1a3869fa1fe685 to your computer and use it in GitHub Desktop.
Save 0xJchen/b77daee8ed4f90c86e1a3869fa1fe685 to your computer and use it in GitHub Desktop.
Optimal trading with order-flow and short-term alpha
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy import interpolate\n",
"# random.seed(20)\n",
"np.random.seed(30)\n",
"np.seterr(divide='ignore', invalid='ignore')\n",
"font = {'family': 'serif',\n",
" 'style': 'italic',\n",
" # 'color': 'darkred',\n",
" 'weight': 1,\n",
" 'size': 16,\n",
" }\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def MakeHeatMap(t, y, fignum=False, nct=20, lower_threshold=0.1, upper_threshold=0.48):\n",
"\n",
" Nbins = 100\n",
"\n",
" miny = np.nanmin(y)\n",
" maxy = np.nanmax(y)\n",
" dy = (maxy - miny) / Nbins\n",
"\n",
" bins = np.linspace(miny, maxy, 100)\n",
"\n",
"\n",
" myNdt = 200\n",
" yr = np.full([myNdt, len(bins)], np.nan)\n",
"\n",
" mydt = (t[-1] - t[0]) / (myNdt - 1)\n",
"\n",
" tr = np.full([myNdt, ], np.nan)\n",
"\n",
" for i in range(myNdt):\n",
" kk = np.where(t < t[0] + mydt * (i + 1))[-1][-1]\n",
" count = np.histogram(y[:, kk], np.arange(miny, maxy + 0.00001, dy))\n",
" yr[i, :] = count[0]\n",
" tr[i] = t[kk].item()\n",
"\n",
" zr = yr.T / len(y[:, 0])\n",
"\n",
" if not fignum:\n",
" fig = plt.figure()\n",
" else:\n",
" fig = plt.figure(fignum)\n",
" plt.tick_params(direction='in', bottom=True, top=True, left=True, right=True)\n",
" axes = fig.gca()\n",
" axes.set_xlim(left=0)\n",
" axes.set_ylim(bottom=0, top=np.max(maxy))\n",
" x_cord_i, y_cord_i = np.meshgrid(tr, bins)\n",
"\n",
" zr[zr < np.max(zr)*lower_threshold] = 0\n",
" zr[zr > np.max(zr)*upper_threshold] = np.max(zr)*upper_threshold\n",
" cmap = plt.get_cmap('YlOrRd')\n",
" #print(x_cord_i.shape)\n",
" #print(y_cord_i.shape)\n",
" #print(zr.shape)\n",
" plt.contour(x_cord_i, y_cord_i, zr, nct, cmap=cmap, levels=np.linspace(zr.min(), zr.max(), 1000))\n",
"\n",
" lim = np.around(np.max(zr), int(np.around(-(np.log(0.10972799999999999)/np.log(10)))))\n",
" plt.colorbar(ticks=np.arange(0, np.max(zr), lim/10))\n",
"\n",
" return [fig, tr, yr, zr]\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def PlotPath(t, T, Y, idxfig, sigma, y_range, title, lw=1):\n",
" fig_1 = plt.figure()\n",
" plt.tick_params(direction='in', bottom=True, top=True, left=True, right=True)\n",
" axes = fig_1.gca()\n",
" axes.set_xlim([0, T])\n",
" axes.set_ylim(y_range)\n",
"\n",
" for i in range(len(idxfig)):\n",
" plt.plot(t, Y[idxfig[i]], linewidth=lw, label=i+1)\n",
"\n",
" plt.ylabel(title, fontdict=font)\n",
" plt.xlabel('Time (Day) ', fontdict=font)\n",
" plt.legend()\n",
" plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def PlotHeatMap(t, Y, Y_AC, title, n=20, lower_threshold=0.1, upper_threshold=0.48):\n",
" out = MakeHeatMap(t, Y, nct=n)\n",
" [fig, tr, yr, zr] = out\n",
" plt.plot(t, Y_AC, '--k')\n",
" plt.ylabel(title, fontdict=font)\n",
" plt.xlabel('Time (Day) ', fontdict=font)\n",
" plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment