├── Graph
├── CV_Best_Model.png
├── P_L.png
├── Price_B1A1.png
├── Quantity.png
├── depth.png
├── pipline.png
└── prediction.png
├── HFT_factors.ipynb
├── README.md
├── SGX-FTSE-China-A50-Index-Futures.pdf
├── data
├── CN_Futures_2014.01.02.csv
└── order_book_3_2014_1_2.csv
├── data_process.ipynb
├── data_visualization.ipynb
├── feature_engineering.ipynb
├── images
├── CV_result.png
├── best_CV_result.png
├── best_CV_result_all.png
├── best_bid_ask.png
├── bid1ask1.png
├── depth_0000_0900_w.png
├── depth_0000_0915.png
├── depth_0900_1130_w.png
├── depth_0915_1130.png
├── depth_1130_1300.png
├── depth_1130_1300_w.png
├── depth_1300_1600.png
├── depth_1300_1600_w.png
├── prediction.png
├── rise_0000_0915_w.png
├── rise_0915_1130_w.png
├── rise_1130_1300_w.png
├── rise_1300_1600_w.png
└── single_day_accuracy.png
├── model_fitting.ipynb
├── order_book_3_2014_1_2.csv
└── order_book_4_2014_1_2.csv
/Graph/CV_Best_Model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/CV_Best_Model.png
--------------------------------------------------------------------------------
/Graph/P_L.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/P_L.png
--------------------------------------------------------------------------------
/Graph/Price_B1A1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/Price_B1A1.png
--------------------------------------------------------------------------------
/Graph/Quantity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/Quantity.png
--------------------------------------------------------------------------------
/Graph/depth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/depth.png
--------------------------------------------------------------------------------
/Graph/pipline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/pipline.png
--------------------------------------------------------------------------------
/Graph/prediction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/Graph/prediction.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## High Frequency Trading Framework with Machine/Deep Learning
2 |
3 | In this project, we provide a framework/pipeline for high frequency trading using machine/deep learning techniques. More advanced feature engineering (with depth trade and quote data) and models (such as pre-trained models) can be applied in this framework.
4 |
5 | ### Target
6 | - Extract trading signals from level-II orderbook data
7 | - Predict orderbook dynamics using machine learning and deep learning techniques
8 |
9 | ### Data
10 | The SGX FTSE CHINA A50 INDEX Futures (新加坡交易所FTSE中国A50指数期货) tick depth data are used.
11 |
12 | ### Strategy Pipline
13 |
14 |
15 | ### Orderbook Signals
16 | We use limit orderbook data to develop trading signals, including **Depth Ratio**, **Rise Ratio**, and **Orderbook Imbalance (OBI)**.
17 |
18 |
19 |
20 | ### Price Series
21 |
22 |
23 |
24 | ### Feature Engineering & HFT Factors Design
25 | - Simple average depth ratio and OBI:
26 |
27 |
28 |
29 |
30 | - Weighted average depth ratio, OBI, and rise ratio:
31 |
32 |
33 |
34 | ### Model Fitting
35 | - Basic Models:
36 | * RandomForestClassifier
37 | * ExtraTreesClassifier
38 | * AdaBoostClassifier
39 | * GradientBoostingClassifier
40 | * Support Vector Machines
41 | * Other classifiers: Softmax, KNN, MLP, LSTM, etc.
42 |
43 | - Hyperparameters:
44 | * Training window: 30min
45 | * Test window: 10sec
46 | * Prediction label: 15min forward
47 |
48 | ### Performance Metrics
49 | - Prediction accuracy:
50 |
51 |
52 |
53 | - Prediction Accuracy Series:
54 |
55 |
56 | - Cross Validation Mean Accuracy:
57 |
58 |
59 |
60 | - Best Model:
61 |
62 |
63 |
64 |
65 | ### PnL Visualization
66 |
67 |
68 | ### Improvements
69 |
70 | **Feature Engineering**
71 |
72 | Other potentially useful signals:
73 | - volume imbalance signal
74 | - trade imbalance signal
75 | - technical indicators of bid and ask series (RSI, MACD...)
76 | - WAP/WPR, weighted average price, VWAP, TWAP
77 | - .....
78 |
79 | Signal generating techniques:
80 | - consider different weights on different level of orderbook data for a particular signal
81 | - consider moving average with period n (hyperparameter)
82 | - consider weighted average of signals, such as weighted average of trade imbalance and orderbook imbalance
83 | - Lasso regression, genetic programming
84 | - .....
85 |
86 | **Models**
87 |
88 | This project only provides a baseline. More advanced models are welcomed:
89 | - CNN
90 | - GRU/LSTM
91 | - XGBoost, AdaBoost, GBDT, LightGBM
92 | - Attention, Auto-encoder
93 | - TabNet
94 | - Pre-trained models
95 | - .....
96 |
97 | **Performance Metrics**
98 |
99 | The performance metrics are subject to amendment, including the PnL calculation, commission fee consideration, etc.
100 |
101 |
--------------------------------------------------------------------------------
/SGX-FTSE-China-A50-Index-Futures.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/SGX-FTSE-China-A50-Index-Futures.pdf
--------------------------------------------------------------------------------
/data_process.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "### **High Frequency Trading Strategies Design using ML and DL**"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "# -*- coding: utf-8 -*-\n",
17 | "\"\"\"\n",
18 | "Created on Sun Mar 13 22:40:00 2022\n",
19 | "\n",
20 | "@author: Bradley\n",
21 | "\n",
22 | "HFT: Machine Learning Techniques on Full Orderbook Tick Data\n",
23 | "\"\"\""
24 | ]
25 | },
26 | {
27 | "cell_type": "code",
28 | "execution_count": 2,
29 | "metadata": {},
30 | "outputs": [],
31 | "source": [
32 | "import numpy as np\n",
33 | "import pandas as pd\n",
34 | "import matplotlib.pyplot as plt\n",
35 | "import seaborn as sns\n",
36 | "import statsmodels.api as sm\n",
37 | "from datetime import datetime\n",
38 | "import csv\n",
39 | "\n",
40 | "plt.rcParams['font.family'] = ['sans-serif']\n",
41 | "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
42 | "plt.rcParams['axes.unicode_minus'] = False\n",
43 | "plt.rcParams['figure.figsize'] = (8,5) #提前设置图片形状大小\n",
44 | "\n",
45 | "%config InlineBackend.figure_format = 'svg'\n",
46 | "\n",
47 | "%matplotlib inline\n",
48 | "\n",
49 | "import warnings\n",
50 | "warnings.filterwarnings('ignore') # 忽略一些warnings\n",
51 | "\n",
52 | "from IPython.core.interactiveshell import InteractiveShell\n",
53 | "InteractiveShell.ast_node_interactivity = \"all\"\n",
54 | "\n",
55 | "from IPython.display import display\n",
56 | "pd.set_option('expand_frame_repr', False)\n",
57 | "pd.set_option('display.unicode.ambiguous_as_wide', True)\n",
58 | "pd.set_option('display.unicode.east_asian_width', True)\n",
59 | "pd.set_option('display.width', 180)"
60 | ]
61 | },
62 | {
63 | "cell_type": "markdown",
64 | "metadata": {},
65 | "source": [
66 | "#### **Data Pre-processing**"
67 | ]
68 | },
69 | {
70 | "cell_type": "markdown",
71 | "metadata": {},
72 | "source": [
73 | "**Goal: Transform from full orderbook data (`CN_Futures_2014.01.02.csv`) to organized tick data (`order_book_3_2014_1_2.csv`)**"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "**我们分析的对象是SGX China A50 Futures在2014年1月2日的高频订单簿数据。目标是根据其订单簿数据挖掘因子并实现使用机器学习算法滚动预测买卖时点。**"
81 | ]
82 | },
83 | {
84 | "cell_type": "code",
85 | "execution_count": 7,
86 | "metadata": {},
87 | "outputs": [],
88 | "source": [
89 | "\n",
90 | "def order_book_tranform(year,month,day,path,best_price_number,series):\n",
91 | " ## read file\n",
92 | " def read_file(year,month,day,path,series):\n",
93 | " data = []\n",
94 | " if len(str(month)) == 1:\n",
95 | " month_ = '0' + str(month)\n",
96 | " else:\n",
97 | " month_ = str(month)\n",
98 | " if len(str(day)) == 1:\n",
99 | " day_ = '0' + str(day)\n",
100 | " else:\n",
101 | " day_ = str(day)\n",
102 | " datapath = str(path) + str(year) + '.' + str(month_) + '.' + str(day_) + '.csv'\n",
103 | " data = pd.read_csv(datapath)\n",
104 | " data = data[data.Series == series]\n",
105 | " return data.reset_index(drop = True)\n",
106 | "\n",
107 | " def insert(order_book_data,data_to_insert,ob_position):\n",
108 | " top = order_book_data[0:ob_position]\n",
109 | " bottom = order_book_data[ob_position:]\n",
110 | " return pd.concat((top,data_to_insert,bottom)).reset_index(drop = True)\n",
111 | "\n",
112 | " def draw_out(order_book_data,ob_position):\n",
113 | " top = order_book_data[0:ob_position]\n",
114 | " bottom = order_book_data[ob_position + 1:]\n",
115 | " return pd.concat((top,bottom)).reset_index(drop = True)\n",
116 | "\n",
117 | " def order_book_to_csv(order_book_bid,order_book_ask,data,i):\n",
118 | " \n",
119 | " order_book_bid_sum = order_book_bid[['Price','QuantityDifference']].groupby(by = ['Price'],as_index = False,sort = False).sum()\n",
120 | " order_book_ask_sum = order_book_ask[['Price','QuantityDifference']].groupby(by = ['Price'],as_index = False).sum()\n",
121 | " order_book_bid_sum = order_book_bid_sum[order_book_bid_sum.QuantityDifference != 0.0].reset_index(drop = True)\n",
122 | " order_book_ask_sum = order_book_ask_sum[order_book_ask_sum.QuantityDifference != 0.0].reset_index(drop = True)\n",
123 | " order_book_bid_ask = pd.concat([order_book_bid_sum[['Price','QuantityDifference']],order_book_ask_sum[['Price','QuantityDifference']]],axis = 1) \n",
124 | " \n",
125 | " with open('order_book_'+str(best_price_number)+'_'+str(year)+'_'+str(month)+'_'+str(day)+'.csv','a') as f:\n",
126 | " order_book = csv.writer(f)\n",
127 | " order_book.writerow([\"TimeStamp\",data.TimeStamp[i-1:i].iloc[0]])\n",
128 | " order_book = csv.writer(f,delimiter=',')\n",
129 | " for i in range(0,min(len(order_book_bid_ask),best_price_number),1):\n",
130 | " order_book.writerow(order_book_bid_ask[i:i+1].values.tolist()[0])\n",
131 | " return order_book_bid_sum,order_book_ask_sum\n",
132 | "\n",
133 | " data = read_file(year,month,day,path,series)\n",
134 | " \n",
135 | " with open('order_book_' + str(best_price_number) + '_' + str(year) + '_' + str(month) + '_' + str(day) + '.csv', 'wb') as csvfile:\n",
136 | " f = csv.writer(csvfile) \n",
137 | "\n",
138 | " data[['QuantityDifference']] = data[['QuantityDifference']].astype(float)\n",
139 | " data['QuantityDifference_'] = data['QuantityDifference']\n",
140 | " data_ask = data[(data.BidOrAsk == 'A')].reset_index(drop=True)\n",
141 | " data_bid = data[(data.BidOrAsk == 'B')].reset_index(drop=True)\n",
142 | " order_book_bid = []\n",
143 | " order_book_ask = []\n",
144 | " x1 = data[(data.BidOrAsk == 'A')].TimeStamp.unique()\n",
145 | " x2 = data[(data.BidOrAsk == 'B')].TimeStamp.unique()\n",
146 | " temp_ask = 0\n",
147 | " temp_bid = 0\n",
148 | " \n",
149 | " def first_order_create(index_,data):\n",
150 | " timestamp = data.TimeStamp.unique()[index_]\n",
151 | " print('timestamp = %s'%(timestamp)) \n",
152 | " bid = []\n",
153 | " ask = []\n",
154 | " timestamp_ = []\n",
155 | " index_find = data[data['TimeStamp'].str.contains(timestamp)].index[-1]\n",
156 | " y = data[:index_find + 1]\n",
157 | " bid.append(y[(y.BidOrAsk == 'B')][[\"Price\",\"OrderNumber\",\"QuantityDifference\",\"QuantityDifference_\"]]) # bid\n",
158 | " ask.append(y[(y.BidOrAsk == 'A')][[\"Price\",\"OrderNumber\",\"QuantityDifference\",\"QuantityDifference_\"]]) # ask\n",
159 | " a = bid[0].sort_values(by=['Price'], ascending = [False])\n",
160 | " b = ask[0].sort_values(by=['Price'], ascending = [True])\n",
161 | " # a = bid[0].sort(['Price'],ascending = [False])\n",
162 | " # b = ask[0].sort(['Price'],ascending = [True])\n",
163 | " order_book_bid = a[a.QuantityDifference != 0].reset_index(drop = True)\n",
164 | " order_book_ask = b[b.QuantityDifference != 0].reset_index(drop = True)\n",
165 | " order_book_bid_sum = order_book_bid[['Price','QuantityDifference']].groupby(by = ['Price'],as_index = False,sort = False).sum()\n",
166 | " order_book_ask_sum = order_book_ask[['Price','QuantityDifference']].groupby(by = ['Price'],as_index = False).sum()\n",
167 | " \n",
168 | " if len(order_book_bid_sum[order_book_bid_sum.QuantityDifference == 0.0]) != 0 and len(order_book_ask_sum[order_book_ask_sum.QuantityDifference == 0.0]) != 0:\n",
169 | " \n",
170 | " print('Exist Bid Ask Order Book Price = Zero')\n",
171 | " price_bid_zero = order_book_bid_sum[order_book_bid_sum.QuantityDifference == 0.0]['Price'][0]\n",
172 | " price_ask_zero = order_book_ask_sum[order_book_ask_sum.QuantityDifference == 0.0]['Price'][0]\n",
173 | " order_book_bid = order_book_bid[order_book_bid.Price != price_bid_zero]\n",
174 | " order_book_ask = order_book_ask[order_book_ask.Price != price_ask_zero]\n",
175 | " elif len(order_book_bid_sum[order_book_bid_sum.QuantityDifference == 0.0]) != 0 and len(order_book_ask_sum[order_book_ask_sum.QuantityDifference == 0.0]) == 0:\n",
176 | " \n",
177 | " print('Exist Bid Order Book Price = Zero')\n",
178 | " price_bid_zero = order_book_bid_sum[order_book_bid_sum.QuantityDifference == 0.0]['Price'][0]\n",
179 | " order_book_bid = order_book_bid[order_book_bid.Price != price_bid_zero]\n",
180 | "\n",
181 | " elif len(order_book_bid_sum[order_book_bid_sum.QuantityDifference == 0.0]) == 0 and len(order_book_ask_sum[order_book_ask_sum.QuantityDifference == 0.0]) != 0:\n",
182 | " \n",
183 | " print('Exist Ask Order Book Price = Zero')\n",
184 | " price_ask_zero = order_book_ask_sum[order_book_ask_sum.QuantityDifference == 0.0]['Price'][0]\n",
185 | " order_book_ask = order_book_ask[order_book_ask.Price != price_ask_zero]\n",
186 | "\n",
187 | " order_book_bid_sum = order_book_bid_sum[order_book_bid_sum.QuantityDifference != 0].reset_index(drop = True)\n",
188 | " order_book_ask_sum = order_book_ask_sum[order_book_ask_sum.QuantityDifference != 0].reset_index(drop = True)\n",
189 | " order_book_bid_ask = pd.concat([order_book_bid_sum[['Price','QuantityDifference']],order_book_ask_sum[['Price','QuantityDifference']]],axis = 1) \n",
190 | " \n",
191 | " return order_book_bid, order_book_ask, order_book_bid_ask, timestamp, y, index_find\n",
192 | " \n",
193 | " def with_first_order_book(best_price_number,year,month,day,timestamp,order_book_bid_ask,index_):\n",
194 | " with open('order_book_'+str(best_price_number)+'_'+str(year)+'_'+str(month)+'_'+str(day)+'.csv','a') as f: \n",
195 | " order_book = csv.writer(f)\n",
196 | " if index_ == 0:\n",
197 | " order_book.writerow([\"Bid\",\"Bid_Quantity\",\"Ask\",\"Ask_Quantity\"])\n",
198 | " order_book.writerow([\"TimeStamp\",timestamp])\n",
199 | " order_book = csv.writer(f,delimiter=',')\n",
200 | " for i in range(0,min(len(order_book_bid_ask),best_price_number),1):\n",
201 | " order_book.writerow(order_book_bid_ask[i:i+1].values.tolist()[0]) \n",
202 | " \n",
203 | " # 建立初始委託簿\n",
204 | " first_order_book_data_lenth = 0\n",
205 | " order_book_bid_time = 0\n",
206 | " order_book_ask_time = 0\n",
207 | " \n",
208 | " for time in range(0,1000,1):\n",
209 | " index_ = time\n",
210 | " order_book_bid, order_book_ask, order_book_bid_ask,\\\n",
211 | " timestamp, y, index_find = first_order_create(index_, data) \n",
212 | "\n",
213 | " if len(order_book_bid) != 0 and len(order_book_ask) != 0:\n",
214 | " with_first_order_book(best_price_number,year,month,day,timestamp,order_book_bid_ask,index_) \n",
215 | " break\n",
216 | " elif len(order_book_bid) == 0 and len(order_book_ask) != 0: \n",
217 | " with_first_order_book(best_price_number,year,month,day,timestamp,order_book_bid_ask,index_)\n",
218 | " temp_ask +=1\n",
219 | " elif len(order_book_bid) != 0 and len(order_book_ask) == 0:\n",
220 | " with_first_order_book(best_price_number,year,month,day,timestamp,order_book_bid_ask,index_)\n",
221 | " temp_bid +=1\n",
222 | " \n",
223 | " print('-------------------------------------------')\n",
224 | " print('index_find = %s'%(index_find))\n",
225 | " \n",
226 | " # 这里作为举例,只取了100条,可以取全部length的data,生成的结果就是\"order_book_3_2014_1_2.csv\"文件\n",
227 | " for i in range(index_find + 1,100,1):#len(data), 1):\n",
228 | " print('---------------------------------')\n",
229 | " print(data[['Price','QuantityDifference','BidOrAsk','TimeStamp']][i:i+1])\n",
230 | " print(i ,temp_bid, temp_ask)\n",
231 | " print(data.TimeStamp[i], x2[temp_bid], x1[temp_ask])\n",
232 | " time_second = int(data[i:i+1].TimeStamp.iloc[0][18]) + int(data[i:i+1].TimeStamp.iloc[0][17])*10 +\\\n",
233 | " int(data[i:i+1].TimeStamp.iloc[0][15])*60 + int(data[i:i+1].TimeStamp.iloc[0][14])*600 +\\\n",
234 | " int(data[i:i+1].TimeStamp.iloc[0][12])*3600 + int(data[i:i+1].TimeStamp.iloc[0][11])*36000\n",
235 | "\n",
236 | " if time_second > 57600:\n",
237 | " break\n",
238 | " if time_second == 32400 and time_second >= 57300:\n",
239 | " order_book_bid = order_book_bid.sort(['Price'],ascending = [False]).reset_index(drop = True)\n",
240 | " order_book_ask = order_book_ask.sort(['Price'],ascending = [True]).reset_index(drop = True)\n",
241 | " pass \n",
242 | " \n",
243 | " if data.BidOrAsk[i] == 'A':\n",
244 | " data_ask_Quantity = data.BestQuantity[i]\n",
245 | " if int(data[['QuantityDifference']][i:i+1].values) > 0 :\n",
246 | " if order_book_bid.Price[0] >= data[i:i+1].Price.iloc[0] and time_second < 32400:\n",
247 | " for k in range(0,len(order_book_bid)):\n",
248 | " diff = order_book_bid.QuantityDifference_[k] - data[i:i+1].QuantityDifference_.iloc[0] \n",
249 | " if order_book_bid.Price[k] >= data[i:i+1].Price.iloc[0] and diff >= 0:\n",
250 | " order_book_bid.QuantityDifference_[k] = diff\n",
251 | " data[i:i+1].QuantityDifference_.iloc[0] = 0\n",
252 | " break\n",
253 | " elif order_book_bid.Price[k] >= data[i:i+1].Price.iloc[0] and diff < 0: \n",
254 | " order_book_bid.QuantityDifference_[k] = 0\n",
255 | " data[i:i+1].QuantityDifference_.iloc[0] = -diff\n",
256 | " pass\n",
257 | " else:\n",
258 | " break\n",
259 | " if data.TimeStamp[i] == x1[temp_ask]:\n",
260 | " \n",
261 | " position_ = int(data[['OrderBookPosition']][i:i+1].iloc[0]) - 1 \n",
262 | " order_book_ask = insert(order_book_ask,data[['Price','OrderNumber','QuantityDifference','QuantityDifference_']][i:i+1],position_)\n",
263 | " if time_second > 32400 and time_second < 57300: \n",
264 | " if position_ == 0 and len(order_book_ask) > 1: \n",
265 | " if order_book_ask[position_ + 1:position_ + 1 + 1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
266 | " print('Some error1(Ask & Q>0 & timestamp not change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
267 | " break\n",
268 | " else:\n",
269 | " pass\n",
270 | " elif 0 < position_< (len(order_book_ask)-1):\n",
271 | " if order_book_ask[position_ + 1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_ask[position_ - 1:position_ - 1 + 1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]:\n",
272 | " print('Some error1(Ask & Q>0 & timestamp not change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
273 | " break\n",
274 | " else:\n",
275 | " pass\n",
276 | " elif position_ == len(order_book_ask)-1: \n",
277 | " if order_book_ask[position_ - 1:position_ - 1 + 1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
278 | " print('Some error1(Ask & Q>0 & timestamp not change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
279 | " break\n",
280 | " else:\n",
281 | " pass\n",
282 | " elif position_ == 0 and len(order_book_ask) == 1:\n",
283 | " pass\n",
284 | " else:\n",
285 | " pass\n",
286 | " elif data.TimeStamp[i] != x1[temp_ask]:\n",
287 | " if temp_ask == 0:\n",
288 | " temp_ask = temp_ask + 1\n",
289 | " best_price = data[i:(i+1)]['BestPrice']\n",
290 | " position_ = int(data[['OrderBookPosition']][i:i+1].iloc[0]) - 1 \n",
291 | " order_book_ask = insert(order_book_ask,data[['Price','OrderNumber','QuantityDifference','QuantityDifference_']][i:i+1],position_) \n",
292 | "\n",
293 | " if time_second > 32400 and time_second < 57300:\n",
294 | " if position_ == 0 and len(order_book_ask) > 1:\n",
295 | " if order_book_ask[position_+1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]:\n",
296 | " print('Some error2(Ask & Q>0 & timestamp change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
297 | " break\n",
298 | " else:\n",
299 | " pass\n",
300 | " elif 0 < position_< len(order_book_ask)-1:\n",
301 | " if order_book_ask[position_+ 1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_ask[position_-1:position_-1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
302 | " print('Some error2(Ask & Q>0 & timestamp change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
303 | " break\n",
304 | " else:\n",
305 | " pass\n",
306 | " elif position_ == len(order_book_ask)-1: \n",
307 | " if order_book_ask[position_-1:position_-1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
308 | " print('Some error2(Ask & Q>0 & timestamp change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
309 | " break\n",
310 | " else:\n",
311 | " pass\n",
312 | " elif position_ == 0 and len(order_book_ask) == 1:\n",
313 | " pass\n",
314 | " else:\n",
315 | " pass\n",
316 | " else:\n",
317 | " order_book_bid_sum,order_book_ask_sum = order_book_to_csv(order_book_bid,order_book_ask,data,i)\n",
318 | " if time_second > 32400 and time_second < 57300:\n",
319 | " if round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) > 0.03 or\\\n",
320 | " round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) < 0:\n",
321 | " if data[i-1:i].BidOrAsk.iloc[0] == 'A':\n",
322 | " if order_book_ask_sum[0:1].values.tolist()[0][1] == data[i-1:i].BestQuantity.iloc[0]:\n",
323 | " pass\n",
324 | " else:\n",
325 | " # print 'Best ask quantity is false'\n",
326 | " pass\n",
327 | " #break \n",
328 | " else:\n",
329 | " j = i - 1\n",
330 | " while j >= 1:\n",
331 | " if data[j-1:j].BidOrAsk.iloc[0] == 'A':\n",
332 | " if order_book_ask_sum[0:1].values.tolist()[0][1] == data[j-1:j].BestQuantity.iloc[0]:\n",
333 | " break\n",
334 | " else:\n",
335 | " j = j - 1\n",
336 | " pass\n",
337 | " else:\n",
338 | " pass\n",
339 | " else:\n",
340 | " pass\n",
341 | " position_ = int(data[['OrderBookPosition']][i:i+1].iloc[0]) - 1 \n",
342 | " temp_ask = temp_ask + 1\n",
343 | " \n",
344 | " order_book_ask = insert(order_book_ask,data[['Price','OrderNumber','QuantityDifference','QuantityDifference_']][i:i+1],position_)\n",
345 | " if time_second > 32400 and time_second < 57300:\n",
346 | " if position_ == 0:\n",
347 | " \n",
348 | " if order_book_ask[position_+1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
349 | " print('Some error3(Ask & Q>0 & timestamp change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
350 | " break\n",
351 | " else:\n",
352 | " pass\n",
353 | " elif 0 < position_< len(order_book_ask)-1:\n",
354 | " if order_book_ask[position_+1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
355 | " print('Some error3(Ask & Q>0 & timestamp change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
356 | " break\n",
357 | " else:\n",
358 | " pass\n",
359 | " elif position_ == len(order_book_ask)-1: \n",
360 | " if order_book_ask[position_-1:position_-1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
361 | " print('Some error3(Ask & Q>0 & timestamp change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
362 | " break\n",
363 | " else:\n",
364 | " pass\n",
365 | " elif position_ == 0 and len(order_book_ask[0]) == 1:\n",
366 | " pass\n",
367 | " else:\n",
368 | " pass\n",
369 | " elif int(data[['QuantityDifference']][i:i+1].values) < 0: \n",
370 | " if data.TimeStamp[i] == x1[temp_ask]: \n",
371 | " order_number_ = data['OrderNumber'][i:i + 1].iloc[0]\n",
372 | " position_ = order_book_ask[order_book_ask.OrderNumber == order_number_].index[0] \n",
373 | " price_ = data[i:i+1]['Price'].iloc[0]\n",
374 | " if time_second > 32400 and time_second < 57300:\n",
375 | " if position_ == 0 and len(order_book_ask) > 1:\n",
376 | " if order_book_ask[position_+1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
377 | " print('Some error4(Ask & Q<0 & timestamp not change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
378 | " break\n",
379 | " else: \n",
380 | " pass\n",
381 | " elif 0 < position_< len(order_book_ask)-1:\n",
382 | " if order_book_ask[position_+1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
383 | " print('Some error4(Ask & Q<0 & timestamp not change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
384 | " break\n",
385 | " else: \n",
386 | " pass \n",
387 | " elif position_ == len(order_book_ask)-1:\n",
388 | " if position_ > 0 and order_book_ask[position_-1:position_-1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
389 | " print('Some error4(Ask & Q<0 & timestamp not change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
390 | " break\n",
391 | " elif position_ == 0:\n",
392 | " pass \n",
393 | " else: \n",
394 | " pass\n",
395 | " elif position_ == 0 and len(order_book_ask) == 1: \n",
396 | " pass\n",
397 | " else:\n",
398 | " pass\n",
399 | " if order_book_ask[(order_book_ask.OrderNumber == order_number_)&(order_book_ask.Price == price_)]['QuantityDifference'].iloc[0] == abs(data[i:i+1]['QuantityDifference'].iloc[0]):\n",
400 | " order_book_ask = order_book_ask.drop(order_book_ask.index[[position_]]).reset_index(drop = True) \n",
401 | " else:\n",
402 | " order_book_ask['QuantityDifference'][order_book_ask.OrderNumber == order_number_] = order_book_ask['QuantityDifference'][order_book_ask.OrderNumber == order_number_] + data[i:i+1]['QuantityDifference'].iloc[0]\n",
403 | "\n",
404 | " elif data.TimeStamp[i] != x1[temp_ask]:\n",
405 | " \n",
406 | " order_book_bid_sum,order_book_ask_sum = order_book_to_csv(order_book_bid,order_book_ask,data,i)\n",
407 | " if time_second > 32400 and time_second < 57300:\n",
408 | " if round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) > 0.03 or\\\n",
409 | " round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) < 0:\n",
410 | " if data[i-1:i].BidOrAsk.iloc[0] == 'A':\n",
411 | " if order_book_ask_sum[0:1].values.tolist()[0][1] == data[i-1:i].BestQuantity.iloc[0]:\n",
412 | " pass\n",
413 | " else:\n",
414 | " print('Best ask quantity is false')\n",
415 | " #break\n",
416 | " pass\n",
417 | " else:\n",
418 | " j = i - 1\n",
419 | " while j >= 1:\n",
420 | " if data[j-1:j].BidOrAsk.iloc[0] == 'A':\n",
421 | " if order_book_ask_sum[0:1].values.tolist()[0][1] == data[j-1:j].BestQuantity.iloc[0]:\n",
422 | " break\n",
423 | " else:\n",
424 | " j = j - 1\n",
425 | " pass\n",
426 | " else:\n",
427 | " pass\n",
428 | " order_number_ = data['OrderNumber'][i : i + 1].iloc[0]\n",
429 | " position_ = order_book_ask[order_book_ask.OrderNumber == order_number_].index[0]\n",
430 | " price_ = data[i:i+1]['Price'].iloc[0]\n",
431 | " temp_ask = temp_ask + 1\n",
432 | " if time_second > 32400 and time_second < 57300:\n",
433 | " if position_ == 0 and len(order_book_ask) > 1:\n",
434 | " if order_book_ask[position_ + 1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]:\n",
435 | " print('Some error5(Ask & Q<0 & timestamp change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
436 | " break\n",
437 | " else:\n",
438 | " pass\n",
439 | " elif 0 < position_< len(order_book_ask)-1: \n",
440 | " if order_book_ask[position_ + 1:position_+1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
441 | " print('Some error5(Ask & Q<0 & timestamp change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
442 | " break\n",
443 | " else:\n",
444 | " pass\n",
445 | " elif position_ == len(order_book_ask)-1:\n",
446 | " if position_ > 0 and order_book_ask[position_-1:position_-1 + 1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
447 | " print('Some error5(Ask & Q<0 & timestamp change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
448 | " break\n",
449 | " elif position_ == 0:\n",
450 | " pass \n",
451 | " else: \n",
452 | " pass\n",
453 | " elif position_ == 0 and len(order_book_ask) == 1:\n",
454 | " pass \n",
455 | " else:\n",
456 | " pass\n",
457 | " if order_book_ask[(order_book_ask.OrderNumber == order_number_)&(order_book_ask.Price == price_)]['QuantityDifference'].iloc[0] == abs(data[i:i+1]['QuantityDifference'].iloc[0]): \n",
458 | " order_book_ask = order_book_ask.drop(order_book_ask.index[[position_]]).reset_index(drop = True)\n",
459 | " else:\n",
460 | " order_book_ask['QuantityDifference'][order_book_ask.OrderNumber == order_number_] = order_book_ask['QuantityDifference'][order_book_ask.OrderNumber == order_number_] + data[i:i+1]['QuantityDifference'].iloc[0]\n",
461 | "\n",
462 | " elif data.BidOrAsk[i] == 'B':\n",
463 | " data_bid_Quantity = data.BestQuantity[i]\n",
464 | " if int(data[['QuantityDifference']][i:i+1].values) > 0: \n",
465 | " \n",
466 | " if order_book_ask.Price[0] <= data[i:i+1].Price.iloc[0] and time_second < 32400:\n",
467 | " for k in range(0,len(order_book_ask)):\n",
468 | " diff = order_book_ask.QuantityDifference_[k] - data[i:i+1].QuantityDifference_.iloc[0]\n",
469 | " if order_book_ask.Price[k] <= data[i:i+1].Price.iloc[0] and diff >= 0:\n",
470 | " order_book_ask.QuantityDifference_[k] = diff\n",
471 | " data[i:i+1].QuantityDifference_.iloc[0] = 0\n",
472 | " break\n",
473 | " elif order_book_ask.Price[k] <= data[i:i+1].Price.iloc[0] and diff < 0:\n",
474 | " order_book_ask.QuantityDifference_[k] = 0\n",
475 | " data[i:i+1].QuantityDifference_.iloc[0] = - diff\n",
476 | " pass\n",
477 | " else:\n",
478 | " break\n",
479 | " if data.TimeStamp[i] == x2[temp_bid]:\n",
480 | " position_ = int(data[['OrderBookPosition']][i:i+1].iloc[0]) - 1 \n",
481 | " order_book_bid = insert(order_book_bid,data[['Price','OrderNumber','QuantityDifference','QuantityDifference_']][i:i+1],position_) \n",
482 | " if time_second > 32400 and time_second < 57300:\n",
483 | " if position_ == 0 and len(order_book_bid) > 1: \n",
484 | " if order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
485 | " print('Some error1(Bid & Q>0 & timestamp not change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
486 | " break\n",
487 | " else: \n",
488 | " pass \n",
489 | " elif 0 < position_< len(order_book_bid)-1: \n",
490 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
491 | " print('Some error1(Bid & Q>0 & timestamp not change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
492 | " break \n",
493 | " else: \n",
494 | " pass \n",
495 | " elif position_ == len(order_book_bid)-1 and len(order_book_bid) > 1: \n",
496 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
497 | " print('Some error1(Bid & Q>0 & timestamp not change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
498 | " break\n",
499 | " else: \n",
500 | " pass\n",
501 | " elif position_ == 0 and len(order_book_bid[temp_bid]) == 1:\n",
502 | " pass \n",
503 | " else:\n",
504 | " pass\n",
505 | " elif data.TimeStamp[i] != x2[temp_bid]:\n",
506 | " if temp_bid == 0:\n",
507 | " best_price = data[i:(i+1)]['BestPrice'] \n",
508 | " position_ = int(data[['OrderBookPosition']][i:i+1].iloc[0]) - 1 \n",
509 | " temp_bid = temp_bid + 1 \n",
510 | " order_book_bid = insert(order_book_bid,data[['Price','OrderNumber','QuantityDifference','QuantityDifference_']][i:i+1],position_) \n",
511 | " if time_second > 32400 and time_second < 57300:\n",
512 | " if position_ == 0 and len(order_book_bid) > 1:\n",
513 | " if order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0] or order_book_bid['Price'][0:1].iloc[0] != data['BestPrice'][i]: \n",
514 | " print('Some error2(Bid & Q>0 & timestamp change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0]) + data['OrderNumber'][i:i+1].iloc[0])\n",
515 | " break\n",
516 | " else: \n",
517 | " pass \n",
518 | " elif 0 < position_< len(order_book_bid)-1: \n",
519 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
520 | " print('Some error2(Bid & Q>0 & timestamp change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
521 | " break\n",
522 | " else: \n",
523 | " pass\n",
524 | " elif position_ == len(order_book_bid)-1:\n",
525 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid['Price'][0:1].iloc[0] != data['BestPrice'][i]: \n",
526 | " print('Some error2(Bid & Q>0 & timestamp change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
527 | " pass\n",
528 | " else:\n",
529 | " pass\n",
530 | " elif position_ == 0 and len(order_book_bid) == 1: \n",
531 | " pass\n",
532 | " else:\n",
533 | " pass\n",
534 | " else:\n",
535 | " if time_second > 32400 and time_second < 57300:\n",
536 | " if round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) > 0.03 or\\\n",
537 | " round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) < 0:\n",
538 | " order_book_bid_sum,order_book_ask_sum = order_book_to_csv(order_book_bid,order_book_ask,data,i) \n",
539 | " if data[i-1:i].BidOrAsk.iloc[0] == 'B':\n",
540 | " if order_book_bid_sum[0:1].values.tolist()[0][1] == data[i-1:i].BestQuantity.iloc[0]:\n",
541 | " pass\n",
542 | " else:\n",
543 | " print('Best bid quantity is false')\n",
544 | " #break\n",
545 | " pass\n",
546 | " else:\n",
547 | " j = i - 1\n",
548 | " while j >= 1:\n",
549 | " if data[j-1:j].BidOrAsk.iloc[0] == 'B':\n",
550 | " if order_book_bid_sum[0:1].values.tolist()[0][1] == data[j-1:j].BestQuantity.iloc[0]:\n",
551 | " break\n",
552 | " else:\n",
553 | " print('Best bid quantity is false')\n",
554 | " #break\n",
555 | " pass\n",
556 | " else:\n",
557 | " j = j - 1\n",
558 | " pass\n",
559 | " else:\n",
560 | " pass\n",
561 | " position_ = int(data[['OrderBookPosition']][i:i+1].iloc[0]) - 1 \n",
562 | " temp_bid = temp_bid + 1 \n",
563 | " order_book_bid = insert(order_book_bid,data[['Price','OrderNumber','QuantityDifference','QuantityDifference_']][i:i+1],position_) \n",
564 | " if time_second > 32400 and time_second < 57300:\n",
565 | " if position_ == 0 and len(order_book_bid) > 1:\n",
566 | " if order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0] or order_book_bid['Price'][0:1].iloc[0] != data['BestPrice'][i]: \n",
567 | " print('Some error3(Bid & Q>0 & timestamp change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
568 | " break\n",
569 | " else: \n",
570 | " pass\n",
571 | " elif 0 < position_< len(order_book_bid)-1: \n",
572 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
573 | " print('Some error3(Bid & Q>0 & timestamp change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
574 | " break\n",
575 | " else: \n",
576 | " pass\n",
577 | " elif position_ == len(order_book_bid)-1: \n",
578 | " if order_book_bid[position_-1:position_-1 + 1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid['Price'][0:1].iloc[0] != data['BestPrice'][i]: \n",
579 | " print('Some error3(Bid & Q>0 & timestamp change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
580 | " break\n",
581 | " else: \n",
582 | " pass\n",
583 | " elif position_ == 0 and len(order_book_bid[0]) == 1:\n",
584 | " pass\n",
585 | " else:\n",
586 | " pass\n",
587 | " elif int(data[['QuantityDifference']][i:i+1].values) < 0: \n",
588 | " if data.TimeStamp[i] == x2[temp_bid]: \n",
589 | " order_number_ = data['OrderNumber'][i : i + 1].iloc[0]\n",
590 | " position_ = order_book_bid[order_book_bid.OrderNumber == order_number_].index[0] \n",
591 | " price_ = data[i:i+1]['Price'].iloc[0]\n",
592 | " if time_second > 32400 and time_second < 57300:\n",
593 | " if position_ == 0 and len(order_book_bid) > 1: \n",
594 | " if order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
595 | " print('Some error4(Bid & Q<0 & timestamp not change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
596 | " break\n",
597 | " else: \n",
598 | " pass \n",
599 | " elif 0 < position_< len(order_book_bid)-1: \n",
600 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
601 | " print('Some error4(Bid & Q<0 & timestamp not change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
602 | " break\n",
603 | " else: \n",
604 | " pass\n",
605 | " elif position_ == len(order_book_bid)-1: \n",
606 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
607 | " print('Some error4(Bid & Q<0 & timestamp not change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0])) \n",
608 | " break\n",
609 | " elif position_ == 0:\n",
610 | " pass\n",
611 | " else: \n",
612 | " pass\n",
613 | " elif position_ == 0 and len(order_book_bid) == 1:\n",
614 | " pass\n",
615 | " else:\n",
616 | " pass\n",
617 | " if order_book_bid[(order_book_bid.OrderNumber == order_number_)&(order_book_bid.Price == price_)]['QuantityDifference'].iloc[0] == abs(data[i:i+1]['QuantityDifference'].iloc[0]): \n",
618 | " order_book_bid = order_book_bid.drop(order_book_bid.index[[position_]]).reset_index(drop = True) \n",
619 | " else:\n",
620 | " order_book_bid['QuantityDifference'][order_book_bid.OrderNumber == order_number_] = order_book_bid['QuantityDifference'][order_book_bid.OrderNumber == order_number_] + data[i:i+1]['QuantityDifference'].iloc[0] \n",
621 | " elif data.TimeStamp[i] != x2[temp_bid]:\n",
622 | " if time_second > 32400 and time_second < 57300:\n",
623 | " if round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) > 0.03 or\\\n",
624 | " round(float(data[i:i+1].TimeStamp.iloc[0][18:29]) - float(data[i-1:i].TimeStamp.iloc[0][18:28]),4) < 0:\n",
625 | " order_book_bid_sum,order_book_ask_sum = order_book_to_csv(order_book_bid,order_book_ask,data,i)\n",
626 | " if data[i-1:i].BidOrAsk.iloc[0] == 'B':\n",
627 | " if order_book_bid_sum[0:1].values.tolist()[0][1] == data[i-1:i].BestQuantity.iloc[0]:\n",
628 | " pass\n",
629 | " else:\n",
630 | " print('Best bid quantity is false')\n",
631 | " #break\n",
632 | " pass\n",
633 | " else:\n",
634 | " j = i - 1\n",
635 | " while j >= 1:\n",
636 | " if data[j-1:j].BidOrAsk.iloc[0] == 'B':\n",
637 | " if order_book_bid_sum[0:1].values.tolist()[0][1] == data[j-1:j].BestQuantity.iloc[0]:\n",
638 | " break\n",
639 | " else:\n",
640 | " print('Best bid quantity is false')\n",
641 | " #break\n",
642 | " pass\n",
643 | " else:\n",
644 | " j = j - 1\n",
645 | " pass\n",
646 | " else:\n",
647 | " pass\n",
648 | " order_number_ = data['OrderNumber'][i:i+1].iloc[0]\n",
649 | " position_ = order_book_bid[order_book_bid.OrderNumber == order_number_].index[0]\n",
650 | " price_ = data[i:i+1]['Price'].iloc[0]\n",
651 | " temp_bid = temp_bid + 1\n",
652 | " if time_second > 32400 and time_second < 57300:\n",
653 | " if position_ == 0 and len(order_book_bid) > 1: \n",
654 | " if order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
655 | " print('Some error5(Bid & Q<0 & timestamp change & 1),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
656 | " break\n",
657 | " else: \n",
658 | " pass \n",
659 | " elif 0 < position_< len(order_book_bid)-1: \n",
660 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0] or order_book_bid[position_+1:position_+1+1][\"Price\"].iloc[0] > data['Price'][i:i+1].iloc[0]: \n",
661 | " print('Some error5(Bid & Q<0 & timestamp change & 2),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
662 | " break\n",
663 | " else: \n",
664 | " pass\n",
665 | " elif position_ == len(order_book_bid)-1: \n",
666 | " if order_book_bid[position_-1:position_-1+1][\"Price\"].iloc[0] < data['Price'][i:i+1].iloc[0]: \n",
667 | " print('Some error5(Bid & Q<0 & timestamp change & 3),position = %d,index = %d,price = %d,OrderNumber = %s'%(position_,i,data['Price'][i:i+1].iloc[0],data['OrderNumber'][i:i+1].iloc[0]))\n",
668 | " break\n",
669 | " elif position_ == 0:\n",
670 | " pass\n",
671 | " else: \n",
672 | " pass \n",
673 | " elif position_ == 0 and len(order_book_bid) == 1:\n",
674 | " pass \n",
675 | " else:\n",
676 | " pass\n",
677 | " if order_book_bid[(order_book_bid.OrderNumber == order_number_)&(order_book_bid.Price == price_)]['QuantityDifference'].iloc[0] == abs(data[i:i+1]['QuantityDifference'].iloc[0]):\n",
678 | " order_book_bid = order_book_bid.drop(order_book_bid.index[[position_]]).reset_index(drop = True) \n",
679 | " else:\n",
680 | " order_book_bid['QuantityDifference'][order_book_bid.OrderNumber == order_number_] = order_book_bid['QuantityDifference'][order_book_bid.OrderNumber == order_number_] + data[i:i+1]['QuantityDifference'].iloc[0]\n",
681 | " return data, order_book_bid, order_book_ask, order_book_bid_sum, order_book_ask_sum"
682 | ]
683 | },
684 | {
685 | "cell_type": "code",
686 | "execution_count": 8,
687 | "metadata": {},
688 | "outputs": [
689 | {
690 | "name": "stdout",
691 | "output_type": "stream",
692 | "text": [
693 | "2\n",
694 | "timestamp = 2014-01-02D04:19:51.857166800\n",
695 | "-------------------------------------------\n",
696 | "index_find = 16\n",
697 | "---------------------------------\n",
698 | " Price QuantityDifference BidOrAsk TimeStamp\n",
699 | "17 0 210.0 A 2014-01-02D08:45:00.130582600\n",
700 | "17 0 0\n",
701 | "2014-01-02D08:45:00.130582600 2014-01-02D04:19:51.857166800 2014-01-02D04:19:51.857166800\n",
702 | "---------------------------------\n",
703 | " Price QuantityDifference BidOrAsk TimeStamp\n",
704 | "18 700500 -2.0 B 2014-01-02D08:45:00.131582600\n",
705 | "18 0 1\n",
706 | "2014-01-02D08:45:00.131582600 2014-01-02D04:19:51.857166800 2014-01-02D08:45:00.130582600\n",
707 | "---------------------------------\n",
708 | " Price QuantityDifference BidOrAsk TimeStamp\n",
709 | "19 682000 2.0 B 2014-01-02D08:45:00.131582600\n",
710 | "19 1 1\n",
711 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
712 | "---------------------------------\n",
713 | " Price QuantityDifference BidOrAsk TimeStamp\n",
714 | "20 699000 -2.0 B 2014-01-02D08:45:00.131582600\n",
715 | "20 1 1\n",
716 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
717 | "---------------------------------\n",
718 | " Price QuantityDifference BidOrAsk TimeStamp\n",
719 | "21 682000 2.0 B 2014-01-02D08:45:00.131582600\n",
720 | "21 1 1\n",
721 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
722 | "---------------------------------\n",
723 | " Price QuantityDifference BidOrAsk TimeStamp\n",
724 | "22 697500 -1.0 B 2014-01-02D08:45:00.131582600\n",
725 | "22 1 1\n",
726 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
727 | "---------------------------------\n",
728 | " Price QuantityDifference BidOrAsk TimeStamp\n",
729 | "23 682000 1.0 B 2014-01-02D08:45:00.131582600\n",
730 | "23 1 1\n",
731 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
732 | "---------------------------------\n",
733 | " Price QuantityDifference BidOrAsk TimeStamp\n",
734 | "24 690500 -1.0 B 2014-01-02D08:45:00.131582600\n",
735 | "24 1 1\n",
736 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
737 | "---------------------------------\n",
738 | " Price QuantityDifference BidOrAsk TimeStamp\n",
739 | "25 682000 1.0 B 2014-01-02D08:45:00.131582600\n",
740 | "25 1 1\n",
741 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
742 | "---------------------------------\n",
743 | " Price QuantityDifference BidOrAsk TimeStamp\n",
744 | "26 690000 -2.0 B 2014-01-02D08:45:00.131582600\n",
745 | "26 1 1\n",
746 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
747 | "---------------------------------\n",
748 | " Price QuantityDifference BidOrAsk TimeStamp\n",
749 | "27 682000 2.0 B 2014-01-02D08:45:00.131582600\n",
750 | "27 1 1\n",
751 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
752 | "---------------------------------\n",
753 | " Price QuantityDifference BidOrAsk TimeStamp\n",
754 | "28 685000 -2.0 B 2014-01-02D08:45:00.131582600\n",
755 | "28 1 1\n",
756 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
757 | "---------------------------------\n",
758 | " Price QuantityDifference BidOrAsk TimeStamp\n",
759 | "29 682000 2.0 B 2014-01-02D08:45:00.131582600\n",
760 | "29 1 1\n",
761 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
762 | "---------------------------------\n",
763 | " Price QuantityDifference BidOrAsk TimeStamp\n",
764 | "30 683500 -1.0 B 2014-01-02D08:45:00.131582600\n",
765 | "30 1 1\n",
766 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
767 | "---------------------------------\n",
768 | " Price QuantityDifference BidOrAsk TimeStamp\n",
769 | "31 682000 1.0 B 2014-01-02D08:45:00.131582600\n",
770 | "31 1 1\n",
771 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
772 | "---------------------------------\n",
773 | " Price QuantityDifference BidOrAsk TimeStamp\n",
774 | "32 0 -210.0 A 2014-01-02D08:45:00.131582600\n",
775 | "32 1 1\n",
776 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.130582600\n",
777 | "---------------------------------\n",
778 | " Price QuantityDifference BidOrAsk TimeStamp\n",
779 | "33 682000 210.0 A 2014-01-02D08:45:00.131582600\n",
780 | "33 1 2\n",
781 | "2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600\n",
782 | "---------------------------------\n",
783 | " Price QuantityDifference BidOrAsk TimeStamp\n",
784 | "34 682000 210.0 B 2014-01-02D08:45:00.296582600\n",
785 | "34 1 2\n",
786 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600 2014-01-02D08:45:00.131582600\n",
787 | "---------------------------------\n",
788 | " Price QuantityDifference BidOrAsk TimeStamp\n",
789 | "35 682000 -210.0 B 2014-01-02D08:45:00.296582600\n",
790 | "35 2 2\n",
791 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
792 | "---------------------------------\n",
793 | " Price QuantityDifference BidOrAsk TimeStamp\n",
794 | "36 708000 210.0 B 2014-01-02D08:45:00.296582600\n",
795 | "36 2 2\n",
796 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
797 | "---------------------------------\n",
798 | " Price QuantityDifference BidOrAsk TimeStamp\n",
799 | "37 682000 -2.0 B 2014-01-02D08:45:00.296582600\n",
800 | "37 2 2\n",
801 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
802 | "---------------------------------\n",
803 | " Price QuantityDifference BidOrAsk TimeStamp\n",
804 | "38 700500 2.0 B 2014-01-02D08:45:00.296582600\n",
805 | "38 2 2\n",
806 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
807 | "---------------------------------\n",
808 | " Price QuantityDifference BidOrAsk TimeStamp\n",
809 | "39 682000 -2.0 B 2014-01-02D08:45:00.296582600\n",
810 | "39 2 2\n",
811 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
812 | "---------------------------------\n",
813 | " Price QuantityDifference BidOrAsk TimeStamp\n",
814 | "40 699000 2.0 B 2014-01-02D08:45:00.296582600\n",
815 | "40 2 2\n",
816 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
817 | "---------------------------------\n",
818 | " Price QuantityDifference BidOrAsk TimeStamp\n",
819 | "41 682000 -1.0 B 2014-01-02D08:45:00.296582600\n",
820 | "41 2 2\n",
821 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
822 | "---------------------------------\n",
823 | " Price QuantityDifference BidOrAsk TimeStamp\n",
824 | "42 697500 1.0 B 2014-01-02D08:45:00.296582600\n",
825 | "42 2 2\n",
826 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
827 | "---------------------------------\n",
828 | " Price QuantityDifference BidOrAsk TimeStamp\n",
829 | "43 682000 -1.0 B 2014-01-02D08:45:00.296582600\n",
830 | "43 2 2\n",
831 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
832 | "---------------------------------\n",
833 | " Price QuantityDifference BidOrAsk TimeStamp\n",
834 | "44 690500 1.0 B 2014-01-02D08:45:00.296582600\n",
835 | "44 2 2\n",
836 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
837 | "---------------------------------\n",
838 | " Price QuantityDifference BidOrAsk TimeStamp\n",
839 | "45 682000 -2.0 B 2014-01-02D08:45:00.296582600\n",
840 | "45 2 2\n",
841 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
842 | "---------------------------------\n",
843 | " Price QuantityDifference BidOrAsk TimeStamp\n",
844 | "46 690000 2.0 B 2014-01-02D08:45:00.296582600\n",
845 | "46 2 2\n",
846 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
847 | "---------------------------------\n",
848 | " Price QuantityDifference BidOrAsk TimeStamp\n",
849 | "47 682000 -2.0 B 2014-01-02D08:45:00.296582600\n",
850 | "47 2 2\n",
851 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
852 | "---------------------------------\n",
853 | " Price QuantityDifference BidOrAsk TimeStamp\n",
854 | "48 685000 2.0 B 2014-01-02D08:45:00.296582600\n",
855 | "48 2 2\n",
856 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
857 | "---------------------------------\n",
858 | " Price QuantityDifference BidOrAsk TimeStamp\n",
859 | "49 682000 -1.0 B 2014-01-02D08:45:00.296582600\n",
860 | "49 2 2\n",
861 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
862 | "---------------------------------\n",
863 | " Price QuantityDifference BidOrAsk TimeStamp\n",
864 | "50 683500 1.0 B 2014-01-02D08:45:00.296582600\n",
865 | "50 2 2\n",
866 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
867 | "---------------------------------\n",
868 | " Price QuantityDifference BidOrAsk TimeStamp\n",
869 | "51 682000 -210.0 A 2014-01-02D08:45:00.296582600\n",
870 | "51 2 2\n",
871 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.131582600\n",
872 | "---------------------------------\n",
873 | " Price QuantityDifference BidOrAsk TimeStamp\n",
874 | "52 708000 210.0 A 2014-01-02D08:45:00.296582600\n",
875 | "52 2 3\n",
876 | "2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600\n",
877 | "---------------------------------\n",
878 | " Price QuantityDifference BidOrAsk TimeStamp\n",
879 | "53 695500 1.0 B 2014-01-02D08:45:00.398582300\n",
880 | "53 2 3\n",
881 | "2014-01-02D08:45:00.398582300 2014-01-02D08:45:00.296582600 2014-01-02D08:45:00.296582600\n",
882 | "---------------------------------\n",
883 | " Price QuantityDifference BidOrAsk TimeStamp\n",
884 | "54 748000 5.0 A 2014-01-02D08:45:13.857414600\n",
885 | "54 3 3\n",
886 | "2014-01-02D08:45:13.857414600 2014-01-02D08:45:00.398582300 2014-01-02D08:45:00.296582600\n",
887 | "---------------------------------\n",
888 | " Price QuantityDifference BidOrAsk TimeStamp\n",
889 | "55 738000 4.0 A 2014-01-02D08:45:14.337414600\n",
890 | "55 3 4\n",
891 | "2014-01-02D08:45:14.337414600 2014-01-02D08:45:00.398582300 2014-01-02D08:45:13.857414600\n",
892 | "---------------------------------\n",
893 | " Price QuantityDifference BidOrAsk TimeStamp\n",
894 | "56 683500 3.0 B 2014-01-02D08:45:14.977402600\n",
895 | "56 3 5\n",
896 | "2014-01-02D08:45:14.977402600 2014-01-02D08:45:00.398582300 2014-01-02D08:45:14.337414600\n",
897 | "---------------------------------\n",
898 | " Price QuantityDifference BidOrAsk TimeStamp\n",
899 | "57 759000 5.0 A 2014-01-02D08:45:15.557390600\n",
900 | "57 4 5\n",
901 | "2014-01-02D08:45:15.557390600 2014-01-02D08:45:14.977402600 2014-01-02D08:45:14.337414600\n",
902 | "---------------------------------\n",
903 | " Price QuantityDifference BidOrAsk TimeStamp\n",
904 | "58 653500 3.0 B 2014-01-02D08:45:17.727366600\n",
905 | "58 4 6\n",
906 | "2014-01-02D08:45:17.727366600 2014-01-02D08:45:14.977402600 2014-01-02D08:45:15.557390600\n",
907 | "---------------------------------\n",
908 | " Price QuantityDifference BidOrAsk TimeStamp\n",
909 | "59 663500 3.0 B 2014-01-02D08:45:18.317366600\n",
910 | "59 5 6\n",
911 | "2014-01-02D08:45:18.317366600 2014-01-02D08:45:17.727366600 2014-01-02D08:45:15.557390600\n",
912 | "---------------------------------\n",
913 | " Price QuantityDifference BidOrAsk TimeStamp\n",
914 | "60 725000 4.0 A 2014-01-02D08:45:30.059222600\n",
915 | "60 6 6\n",
916 | "2014-01-02D08:45:30.059222600 2014-01-02D08:45:18.317366600 2014-01-02D08:45:15.557390600\n",
917 | "---------------------------------\n",
918 | " Price QuantityDifference BidOrAsk TimeStamp\n",
919 | "61 731500 1.0 A 2014-01-02D08:45:36.809138600\n",
920 | "61 6 7\n",
921 | "2014-01-02D08:45:36.809138600 2014-01-02D08:45:18.317366600 2014-01-02D08:45:30.059222600\n",
922 | "---------------------------------\n",
923 | " Price QuantityDifference BidOrAsk TimeStamp\n",
924 | "62 736000 1.0 A 2014-01-02D08:45:52.185958600\n",
925 | "62 6 8\n",
926 | "2014-01-02D08:45:52.185958600 2014-01-02D08:45:18.317366600 2014-01-02D08:45:36.809138600\n",
927 | "---------------------------------\n",
928 | " Price QuantityDifference BidOrAsk TimeStamp\n",
929 | "63 690000 75.0 B 2014-01-02D08:46:00.014862600\n",
930 | "63 6 9\n",
931 | "2014-01-02D08:46:00.014862600 2014-01-02D08:45:18.317366600 2014-01-02D08:45:52.185958600\n",
932 | "---------------------------------\n",
933 | " Price QuantityDifference BidOrAsk TimeStamp\n",
934 | "64 712000 2.0 A 2014-01-02D08:46:00.018862600\n",
935 | "64 7 9\n",
936 | "2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.014862600 2014-01-02D08:45:52.185958600\n",
937 | "---------------------------------\n",
938 | " Price QuantityDifference BidOrAsk TimeStamp\n",
939 | "65 708000 -210.0 B 2014-01-02D08:46:00.018862600\n",
940 | "65 7 10\n",
941 | "2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.014862600 2014-01-02D08:46:00.018862600\n",
942 | "---------------------------------\n",
943 | " Price QuantityDifference BidOrAsk TimeStamp\n",
944 | "66 706500 210.0 B 2014-01-02D08:46:00.018862600\n",
945 | "66 8 10\n",
946 | "2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600\n",
947 | "---------------------------------\n",
948 | " Price QuantityDifference BidOrAsk TimeStamp\n",
949 | "67 708000 -210.0 A 2014-01-02D08:46:00.018862600\n",
950 | "67 8 10\n",
951 | "2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600\n",
952 | "---------------------------------\n",
953 | " Price QuantityDifference BidOrAsk TimeStamp\n",
954 | "68 706500 210.0 A 2014-01-02D08:46:00.018862600\n",
955 | "68 8 10\n",
956 | "2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600\n",
957 | "---------------------------------\n",
958 | " Price QuantityDifference BidOrAsk TimeStamp\n",
959 | "69 770000 6.0 A 2014-01-02D08:46:00.018862600\n",
960 | "69 8 10\n",
961 | "2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600\n",
962 | "---------------------------------\n",
963 | " Price QuantityDifference BidOrAsk TimeStamp\n",
964 | "70 754000 3.0 A 2014-01-02D08:46:00.021862600\n",
965 | "70 8 10\n",
966 | "2014-01-02D08:46:00.021862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.018862600\n",
967 | "---------------------------------\n",
968 | " Price QuantityDifference BidOrAsk TimeStamp\n",
969 | "71 760000 15.0 A 2014-01-02D08:46:00.022862600\n",
970 | "71 8 11\n",
971 | "2014-01-02D08:46:00.022862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.021862600\n",
972 | "---------------------------------\n",
973 | " Price QuantityDifference BidOrAsk TimeStamp\n",
974 | "72 770000 6.0 A 2014-01-02D08:46:00.024862600\n",
975 | "72 8 12\n",
976 | "2014-01-02D08:46:00.024862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.022862600\n",
977 | "---------------------------------\n",
978 | " Price QuantityDifference BidOrAsk TimeStamp\n",
979 | "73 770000 2.0 A 2014-01-02D08:46:00.025862600\n",
980 | "73 8 13\n",
981 | "2014-01-02D08:46:00.025862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.024862600\n",
982 | "---------------------------------\n",
983 | " Price QuantityDifference BidOrAsk TimeStamp\n",
984 | "74 770000 6.0 A 2014-01-02D08:46:00.029862600\n",
985 | "74 8 14\n",
986 | "2014-01-02D08:46:00.029862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.025862600\n",
987 | "---------------------------------\n",
988 | " Price QuantityDifference BidOrAsk TimeStamp\n",
989 | "75 770000 6.0 A 2014-01-02D08:46:00.029862600\n",
990 | "75 8 15\n",
991 | "2014-01-02D08:46:00.029862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.029862600\n",
992 | "---------------------------------\n",
993 | " Price QuantityDifference BidOrAsk TimeStamp\n",
994 | "76 702000 1.0 B 2014-01-02D08:46:00.033862600\n",
995 | "76 8 15\n",
996 | "2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.018862600 2014-01-02D08:46:00.029862600\n",
997 | "---------------------------------\n",
998 | " Price QuantityDifference BidOrAsk TimeStamp\n",
999 | "77 706500 -210.0 B 2014-01-02D08:46:00.033862600\n",
1000 | "77 9 15\n",
1001 | "2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.029862600\n",
1002 | "---------------------------------\n",
1003 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1004 | "78 707000 210.0 B 2014-01-02D08:46:00.033862600\n",
1005 | "78 9 15\n",
1006 | "2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.029862600\n",
1007 | "---------------------------------\n",
1008 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1009 | "79 706500 -210.0 A 2014-01-02D08:46:00.033862600\n",
1010 | "79 9 15\n",
1011 | "2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.029862600\n",
1012 | "---------------------------------\n",
1013 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1014 | "80 707000 210.0 A 2014-01-02D08:46:00.033862600\n",
1015 | "80 9 16\n",
1016 | "2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600\n",
1017 | "---------------------------------\n",
1018 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1019 | "81 673000 8.0 B 2014-01-02D08:46:00.033862600\n",
1020 | "81 9 16\n",
1021 | "2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600\n",
1022 | "---------------------------------\n",
1023 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1024 | "82 748000 5.0 A 2014-01-02D08:46:00.036862600\n",
1025 | "82 9 16\n",
1026 | "2014-01-02D08:46:00.036862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.033862600\n",
1027 | "---------------------------------\n",
1028 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1029 | "83 725000 1.0 A 2014-01-02D08:46:00.037862600\n",
1030 | "83 9 17\n",
1031 | "2014-01-02D08:46:00.037862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.036862600\n",
1032 | "---------------------------------\n",
1033 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1034 | "84 744000 1.0 A 2014-01-02D08:46:00.039862600\n",
1035 | "84 9 18\n",
1036 | "2014-01-02D08:46:00.039862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.037862600\n",
1037 | "---------------------------------\n",
1038 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1039 | "85 701000 1.0 B 2014-01-02D08:46:00.040862600\n",
1040 | "85 9 19\n",
1041 | "2014-01-02D08:46:00.040862600 2014-01-02D08:46:00.033862600 2014-01-02D08:46:00.039862600\n",
1042 | "---------------------------------\n",
1043 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1044 | "86 707000 1.0 B 2014-01-02D08:46:00.043862600\n",
1045 | "86 10 19\n",
1046 | "2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.040862600 2014-01-02D08:46:00.039862600\n",
1047 | "---------------------------------\n",
1048 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1049 | "87 707000 -210.0 B 2014-01-02D08:46:00.043862600\n",
1050 | "87 11 19\n",
1051 | "2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.039862600\n",
1052 | "---------------------------------\n",
1053 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1054 | "88 709500 210.0 B 2014-01-02D08:46:00.043862600\n",
1055 | "88 11 19\n",
1056 | "2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.039862600\n",
1057 | "---------------------------------\n",
1058 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1059 | "89 707000 -210.0 A 2014-01-02D08:46:00.043862600\n",
1060 | "89 11 19\n",
1061 | "2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.039862600\n",
1062 | "---------------------------------\n",
1063 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1064 | "90 709500 210.0 A 2014-01-02D08:46:00.043862600\n",
1065 | "90 11 20\n",
1066 | "2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.043862600\n",
1067 | "---------------------------------\n",
1068 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1069 | "91 747000 2.0 A 2014-01-02D08:46:00.045862600\n",
1070 | "91 11 20\n",
1071 | "2014-01-02D08:46:00.045862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.043862600\n",
1072 | "---------------------------------\n",
1073 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1074 | "92 712000 2.0 A 2014-01-02D08:46:00.048862600\n",
1075 | "92 11 21\n",
1076 | "2014-01-02D08:46:00.048862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.045862600\n",
1077 | "---------------------------------\n",
1078 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1079 | "93 736000 1.0 A 2014-01-02D08:46:00.048862600\n",
1080 | "93 11 22\n",
1081 | "2014-01-02D08:46:00.048862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.048862600\n",
1082 | "---------------------------------\n",
1083 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1084 | "94 756000 1.0 A 2014-01-02D08:46:00.052862600\n",
1085 | "94 11 22\n",
1086 | "2014-01-02D08:46:00.052862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.048862600\n",
1087 | "---------------------------------\n",
1088 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1089 | "95 746000 1.0 A 2014-01-02D08:46:00.056862600\n",
1090 | "95 11 23\n",
1091 | "2014-01-02D08:46:00.056862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.052862600\n",
1092 | "---------------------------------\n",
1093 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1094 | "96 720000 2.0 A 2014-01-02D08:46:00.061862600\n",
1095 | "96 11 24\n",
1096 | "2014-01-02D08:46:00.061862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.056862600\n",
1097 | "---------------------------------\n",
1098 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1099 | "97 760000 4.0 A 2014-01-02D08:46:00.065862600\n",
1100 | "97 11 25\n",
1101 | "2014-01-02D08:46:00.065862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.061862600\n",
1102 | "---------------------------------\n",
1103 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1104 | "98 680000 2.0 B 2014-01-02D08:46:00.069862600\n",
1105 | "98 11 26\n",
1106 | "2014-01-02D08:46:00.069862600 2014-01-02D08:46:00.043862600 2014-01-02D08:46:00.065862600\n",
1107 | "---------------------------------\n",
1108 | " Price QuantityDifference BidOrAsk TimeStamp\n",
1109 | "99 675000 2.0 B 2014-01-02D08:46:00.069862600\n",
1110 | "99 12 26\n",
1111 | "2014-01-02D08:46:00.069862600 2014-01-02D08:46:00.069862600 2014-01-02D08:46:00.065862600\n",
1112 | "Total time = 1.131267\n"
1113 | ]
1114 | }
1115 | ],
1116 | "source": [
1117 | "import time\n",
1118 | "\n",
1119 | "if __name__ == '__main__':\n",
1120 | " path = './data/CN_Futures_'\n",
1121 | " year = 2014\n",
1122 | " # 决定生成的每一个tick中有多少组bid和ask\n",
1123 | " best_price_number = 3\n",
1124 | " \n",
1125 | " # Future Delivery Months 近月合約代碼 : series\n",
1126 | " # 2014 :CNF14:1月, CNG14:2月, CNH14:3月, CNJ14:4月, CNK14:5月, CNM14:6月,\n",
1127 | " # CNN14:7月, CNQ14:8月, CNU14:9月, CNV14:10月, CNX14:11月, CNZ14:12月\n",
1128 | " # 2015 :CNF15:1月, CNG15:2月, CNH15:3月, CNJ15:4月, CNK15:5月, CNM15:6月,\n",
1129 | " # CNN15:7月, CNQ15:8月, CNU15:9月, CNV15:10月, CNX15:11月, CNZ15:12月\n",
1130 | " \n",
1131 | " series = 'CNF14' \n",
1132 | " month = 1\n",
1133 | " day_ = [2]\n",
1134 | " for i in day_:\n",
1135 | " print(i)\n",
1136 | " start = time.time()\n",
1137 | " data, order_book_bid, order_book_ask, order_book_bid_sum, order_book_ask_sum = order_book_tranform(year,month,i,path,best_price_number,series)\n",
1138 | " end = time.time()\n",
1139 | " print(\"Total time = %f\"%(end - start)) "
1140 | ]
1141 | },
1142 | {
1143 | "cell_type": "code",
1144 | "execution_count": 9,
1145 | "metadata": {},
1146 | "outputs": [
1147 | {
1148 | "data": {
1149 | "text/html": [
1150 | "
\n",
1151 | "\n",
1164 | "
\n",
1165 | " \n",
1166 | " \n",
1167 | " | \n",
1168 | " Series | \n",
1169 | " SequenceNumber | \n",
1170 | " TimeStamp | \n",
1171 | " OrderNumber | \n",
1172 | " OrderBookPosition | \n",
1173 | " Price | \n",
1174 | " QuantityDifference | \n",
1175 | " Trade | \n",
1176 | " BidOrAsk | \n",
1177 | " BestPrice | \n",
1178 | " BestQuantity | \n",
1179 | " QuantityDifference_ | \n",
1180 | "
\n",
1181 | " \n",
1182 | " \n",
1183 | " \n",
1184 | " 0 | \n",
1185 | " CNF14 | \n",
1186 | " 1 | \n",
1187 | " 2014-01-02D04:19:51.857166800 | \n",
1188 | " 642F9A8039E51EE5 | \n",
1189 | " 1 | \n",
1190 | " 757000 | \n",
1191 | " 3.0 | \n",
1192 | " | \n",
1193 | " A | \n",
1194 | " 715500 | \n",
1195 | " 2 | \n",
1196 | " 3.0 | \n",
1197 | "
\n",
1198 | " \n",
1199 | " 1 | \n",
1200 | " CNF14 | \n",
1201 | " 2 | \n",
1202 | " 2014-01-02D04:19:51.857166800 | \n",
1203 | " 490D725B88E56DE5 | \n",
1204 | " 1 | \n",
1205 | " 755000 | \n",
1206 | " 10.0 | \n",
1207 | " | \n",
1208 | " A | \n",
1209 | " 715500 | \n",
1210 | " 2 | \n",
1211 | " 10.0 | \n",
1212 | "
\n",
1213 | " \n",
1214 | " 2 | \n",
1215 | " CNF14 | \n",
1216 | " 3 | \n",
1217 | " 2014-01-02D04:19:51.857166800 | \n",
1218 | " E1C9F25394A679A6 | \n",
1219 | " 1 | \n",
1220 | " 719500 | \n",
1221 | " 1.0 | \n",
1222 | " | \n",
1223 | " A | \n",
1224 | " 715500 | \n",
1225 | " 2 | \n",
1226 | " 1.0 | \n",
1227 | "
\n",
1228 | " \n",
1229 | " 3 | \n",
1230 | " CNF14 | \n",
1231 | " 4 | \n",
1232 | " 2014-01-02D04:19:51.857166800 | \n",
1233 | " ECA71A88142AF92B | \n",
1234 | " 4 | \n",
1235 | " 768500 | \n",
1236 | " 1.0 | \n",
1237 | " | \n",
1238 | " A | \n",
1239 | " 715500 | \n",
1240 | " 2 | \n",
1241 | " 1.0 | \n",
1242 | "
\n",
1243 | " \n",
1244 | " 4 | \n",
1245 | " CNF14 | \n",
1246 | " 5 | \n",
1247 | " 2014-01-02D04:19:51.857166800 | \n",
1248 | " E325782FEB07CE67 | \n",
1249 | " 1 | \n",
1250 | " 700500 | \n",
1251 | " 2.0 | \n",
1252 | " | \n",
1253 | " B | \n",
1254 | " 700500 | \n",
1255 | " 2 | \n",
1256 | " 2.0 | \n",
1257 | "
\n",
1258 | " \n",
1259 | " ... | \n",
1260 | " ... | \n",
1261 | " ... | \n",
1262 | " ... | \n",
1263 | " ... | \n",
1264 | " ... | \n",
1265 | " ... | \n",
1266 | " ... | \n",
1267 | " ... | \n",
1268 | " ... | \n",
1269 | " ... | \n",
1270 | " ... | \n",
1271 | " ... | \n",
1272 | "
\n",
1273 | " \n",
1274 | " 97475 | \n",
1275 | " CNF14 | \n",
1276 | " 97476 | \n",
1277 | " 2014-01-03D02:20:00.060617300 | \n",
1278 | " E3B7552341112551 | \n",
1279 | " 13 | \n",
1280 | " 770000 | \n",
1281 | " -6.0 | \n",
1282 | " | \n",
1283 | " A | \n",
1284 | " 708500 | \n",
1285 | " 2 | \n",
1286 | " -6.0 | \n",
1287 | "
\n",
1288 | " \n",
1289 | " 97476 | \n",
1290 | " CNF14 | \n",
1291 | " 97477 | \n",
1292 | " 2014-01-03D02:20:00.060617300 | \n",
1293 | " 473C5923A5D088F0 | \n",
1294 | " 13 | \n",
1295 | " 770000 | \n",
1296 | " -2.0 | \n",
1297 | " | \n",
1298 | " A | \n",
1299 | " 708500 | \n",
1300 | " 2 | \n",
1301 | " -2.0 | \n",
1302 | "
\n",
1303 | " \n",
1304 | " 97477 | \n",
1305 | " CNF14 | \n",
1306 | " 97478 | \n",
1307 | " 2014-01-03D02:20:00.060617300 | \n",
1308 | " 633F552361CA460A | \n",
1309 | " 13 | \n",
1310 | " 770000 | \n",
1311 | " -6.0 | \n",
1312 | " | \n",
1313 | " A | \n",
1314 | " 708500 | \n",
1315 | " 2 | \n",
1316 | " -6.0 | \n",
1317 | "
\n",
1318 | " \n",
1319 | " 97478 | \n",
1320 | " CNF14 | \n",
1321 | " 97479 | \n",
1322 | " 2014-01-03D02:20:00.060617300 | \n",
1323 | " 47BC592368224B42 | \n",
1324 | " 13 | \n",
1325 | " 770000 | \n",
1326 | " -6.0 | \n",
1327 | " | \n",
1328 | " A | \n",
1329 | " 708500 | \n",
1330 | " 2 | \n",
1331 | " -6.0 | \n",
1332 | "
\n",
1333 | " \n",
1334 | " 97479 | \n",
1335 | " CNF14 | \n",
1336 | " 97480 | \n",
1337 | " 2014-01-03D02:20:00.060617300 | \n",
1338 | " E3BFD52B096BEDAC | \n",
1339 | " 13 | \n",
1340 | " 770000 | \n",
1341 | " -6.0 | \n",
1342 | " | \n",
1343 | " A | \n",
1344 | " 708500 | \n",
1345 | " 2 | \n",
1346 | " -6.0 | \n",
1347 | "
\n",
1348 | " \n",
1349 | "
\n",
1350 | "
97480 rows × 12 columns
\n",
1351 | "
"
1352 | ],
1353 | "text/plain": [
1354 | " Series SequenceNumber TimeStamp OrderNumber OrderBookPosition Price QuantityDifference Trade BidOrAsk BestPrice BestQuantity QuantityDifference_\n",
1355 | "0 CNF14 1 2014-01-02D04:19:51.857166800 642F9A8039E51EE5 1 757000 3.0 A 715500 2 3.0\n",
1356 | "1 CNF14 2 2014-01-02D04:19:51.857166800 490D725B88E56DE5 1 755000 10.0 A 715500 2 10.0\n",
1357 | "2 CNF14 3 2014-01-02D04:19:51.857166800 E1C9F25394A679A6 1 719500 1.0 A 715500 2 1.0\n",
1358 | "3 CNF14 4 2014-01-02D04:19:51.857166800 ECA71A88142AF92B 4 768500 1.0 A 715500 2 1.0\n",
1359 | "4 CNF14 5 2014-01-02D04:19:51.857166800 E325782FEB07CE67 1 700500 2.0 B 700500 2 2.0\n",
1360 | "... ... ... ... ... ... ... ... ... ... ... ... ...\n",
1361 | "97475 CNF14 97476 2014-01-03D02:20:00.060617300 E3B7552341112551 13 770000 -6.0 A 708500 2 -6.0\n",
1362 | "97476 CNF14 97477 2014-01-03D02:20:00.060617300 473C5923A5D088F0 13 770000 -2.0 A 708500 2 -2.0\n",
1363 | "97477 CNF14 97478 2014-01-03D02:20:00.060617300 633F552361CA460A 13 770000 -6.0 A 708500 2 -6.0\n",
1364 | "97478 CNF14 97479 2014-01-03D02:20:00.060617300 47BC592368224B42 13 770000 -6.0 A 708500 2 -6.0\n",
1365 | "97479 CNF14 97480 2014-01-03D02:20:00.060617300 E3BFD52B096BEDAC 13 770000 -6.0 A 708500 2 -6.0\n",
1366 | "\n",
1367 | "[97480 rows x 12 columns]"
1368 | ]
1369 | },
1370 | "execution_count": 9,
1371 | "metadata": {},
1372 | "output_type": "execute_result"
1373 | }
1374 | ],
1375 | "source": [
1376 | "data"
1377 | ]
1378 | },
1379 | {
1380 | "cell_type": "code",
1381 | "execution_count": 10,
1382 | "metadata": {},
1383 | "outputs": [
1384 | {
1385 | "data": {
1386 | "text/html": [
1387 | "\n",
1388 | "\n",
1401 | "
\n",
1402 | " \n",
1403 | " \n",
1404 | " | \n",
1405 | " Price | \n",
1406 | " OrderNumber | \n",
1407 | " QuantityDifference | \n",
1408 | " QuantityDifference_ | \n",
1409 | "
\n",
1410 | " \n",
1411 | " \n",
1412 | " \n",
1413 | " 0 | \n",
1414 | " 709500 | \n",
1415 | " C7C3FA1363164816 | \n",
1416 | " 210.0 | \n",
1417 | " 0.0 | \n",
1418 | "
\n",
1419 | " \n",
1420 | " 1 | \n",
1421 | " 707000 | \n",
1422 | " 43E3747FD245B565 | \n",
1423 | " 1.0 | \n",
1424 | " 1.0 | \n",
1425 | "
\n",
1426 | " \n",
1427 | " 2 | \n",
1428 | " 702000 | \n",
1429 | " C36B74779D8980A9 | \n",
1430 | " 1.0 | \n",
1431 | " 1.0 | \n",
1432 | "
\n",
1433 | " \n",
1434 | " 3 | \n",
1435 | " 701000 | \n",
1436 | " EF3D516B3FA423E4 | \n",
1437 | " 1.0 | \n",
1438 | " 1.0 | \n",
1439 | "
\n",
1440 | " \n",
1441 | " 4 | \n",
1442 | " 700500 | \n",
1443 | " E325782FEB07CE67 | \n",
1444 | " 2.0 | \n",
1445 | " 2.0 | \n",
1446 | "
\n",
1447 | " \n",
1448 | " 5 | \n",
1449 | " 699000 | \n",
1450 | " 4959765357F03CF0 | \n",
1451 | " 2.0 | \n",
1452 | " 2.0 | \n",
1453 | "
\n",
1454 | " \n",
1455 | " 6 | \n",
1456 | " 697500 | \n",
1457 | " 43A57467BFB59F55 | \n",
1458 | " 1.0 | \n",
1459 | " 1.0 | \n",
1460 | "
\n",
1461 | " \n",
1462 | " 7 | \n",
1463 | " 695500 | \n",
1464 | " E70A765B175EFC1F | \n",
1465 | " 1.0 | \n",
1466 | " 1.0 | \n",
1467 | "
\n",
1468 | " \n",
1469 | " 8 | \n",
1470 | " 690500 | \n",
1471 | " B3F5144E612645E6 | \n",
1472 | " 1.0 | \n",
1473 | " 1.0 | \n",
1474 | "
\n",
1475 | " \n",
1476 | " 9 | \n",
1477 | " 690000 | \n",
1478 | " E27C9AD83BDC20DC | \n",
1479 | " 2.0 | \n",
1480 | " 2.0 | \n",
1481 | "
\n",
1482 | " \n",
1483 | " 10 | \n",
1484 | " 690000 | \n",
1485 | " 43E3747730341354 | \n",
1486 | " 75.0 | \n",
1487 | " 75.0 | \n",
1488 | "
\n",
1489 | " \n",
1490 | " 11 | \n",
1491 | " 685000 | \n",
1492 | " CACB3B94B2C19781 | \n",
1493 | " 2.0 | \n",
1494 | " 2.0 | \n",
1495 | "
\n",
1496 | " \n",
1497 | " 12 | \n",
1498 | " 683500 | \n",
1499 | " 336D9C4E88C46D84 | \n",
1500 | " 1.0 | \n",
1501 | " 1.0 | \n",
1502 | "
\n",
1503 | " \n",
1504 | " 13 | \n",
1505 | " 683500 | \n",
1506 | " E14CDA075D093F49 | \n",
1507 | " 3.0 | \n",
1508 | " 3.0 | \n",
1509 | "
\n",
1510 | " \n",
1511 | " 14 | \n",
1512 | " 682000 | \n",
1513 | " 1335141E47F92CF9 | \n",
1514 | " 100.0 | \n",
1515 | " 0.0 | \n",
1516 | "
\n",
1517 | " \n",
1518 | " 15 | \n",
1519 | " 680000 | \n",
1520 | " 6FBDD1633B411F81 | \n",
1521 | " 2.0 | \n",
1522 | " 2.0 | \n",
1523 | "
\n",
1524 | " \n",
1525 | " 16 | \n",
1526 | " 675000 | \n",
1527 | " C3EB747F49582C78 | \n",
1528 | " 2.0 | \n",
1529 | " 2.0 | \n",
1530 | "
\n",
1531 | " \n",
1532 | " 17 | \n",
1533 | " 673000 | \n",
1534 | " 6F3D516B2DF71237 | \n",
1535 | " 8.0 | \n",
1536 | " 8.0 | \n",
1537 | "
\n",
1538 | " \n",
1539 | " 18 | \n",
1540 | " 663500 | \n",
1541 | " 69C45A07D1B9B3F9 | \n",
1542 | " 3.0 | \n",
1543 | " 3.0 | \n",
1544 | "
\n",
1545 | " \n",
1546 | " 19 | \n",
1547 | " 653500 | \n",
1548 | " E1CCDA0FA8338A73 | \n",
1549 | " 3.0 | \n",
1550 | " 3.0 | \n",
1551 | "
\n",
1552 | " \n",
1553 | "
\n",
1554 | "
"
1555 | ],
1556 | "text/plain": [
1557 | " Price OrderNumber QuantityDifference QuantityDifference_\n",
1558 | "0 709500 C7C3FA1363164816 210.0 0.0\n",
1559 | "1 707000 43E3747FD245B565 1.0 1.0\n",
1560 | "2 702000 C36B74779D8980A9 1.0 1.0\n",
1561 | "3 701000 EF3D516B3FA423E4 1.0 1.0\n",
1562 | "4 700500 E325782FEB07CE67 2.0 2.0\n",
1563 | "5 699000 4959765357F03CF0 2.0 2.0\n",
1564 | "6 697500 43A57467BFB59F55 1.0 1.0\n",
1565 | "7 695500 E70A765B175EFC1F 1.0 1.0\n",
1566 | "8 690500 B3F5144E612645E6 1.0 1.0\n",
1567 | "9 690000 E27C9AD83BDC20DC 2.0 2.0\n",
1568 | "10 690000 43E3747730341354 75.0 75.0\n",
1569 | "11 685000 CACB3B94B2C19781 2.0 2.0\n",
1570 | "12 683500 336D9C4E88C46D84 1.0 1.0\n",
1571 | "13 683500 E14CDA075D093F49 3.0 3.0\n",
1572 | "14 682000 1335141E47F92CF9 100.0 0.0\n",
1573 | "15 680000 6FBDD1633B411F81 2.0 2.0\n",
1574 | "16 675000 C3EB747F49582C78 2.0 2.0\n",
1575 | "17 673000 6F3D516B2DF71237 8.0 8.0\n",
1576 | "18 663500 69C45A07D1B9B3F9 3.0 3.0\n",
1577 | "19 653500 E1CCDA0FA8338A73 3.0 3.0"
1578 | ]
1579 | },
1580 | "execution_count": 10,
1581 | "metadata": {},
1582 | "output_type": "execute_result"
1583 | }
1584 | ],
1585 | "source": [
1586 | "order_book_bid"
1587 | ]
1588 | },
1589 | {
1590 | "cell_type": "code",
1591 | "execution_count": 11,
1592 | "metadata": {},
1593 | "outputs": [
1594 | {
1595 | "data": {
1596 | "text/html": [
1597 | "\n",
1598 | "\n",
1611 | "
\n",
1612 | " \n",
1613 | " \n",
1614 | " | \n",
1615 | " Price | \n",
1616 | " OrderNumber | \n",
1617 | " QuantityDifference | \n",
1618 | " QuantityDifference_ | \n",
1619 | "
\n",
1620 | " \n",
1621 | " \n",
1622 | " \n",
1623 | " 0 | \n",
1624 | " 709500 | \n",
1625 | " 47C3FA130EB2F3B3 | \n",
1626 | " 210.0 | \n",
1627 | " 0.0 | \n",
1628 | "
\n",
1629 | " \n",
1630 | " 1 | \n",
1631 | " 712000 | \n",
1632 | " 6F35516BC930AD70 | \n",
1633 | " 2.0 | \n",
1634 | " 2.0 | \n",
1635 | "
\n",
1636 | " \n",
1637 | " 2 | \n",
1638 | " 712000 | \n",
1639 | " C363747FE0C9C3E9 | \n",
1640 | " 2.0 | \n",
1641 | " 2.0 | \n",
1642 | "
\n",
1643 | " \n",
1644 | " 3 | \n",
1645 | " 715500 | \n",
1646 | " C365FC27C2C8A628 | \n",
1647 | " 2.0 | \n",
1648 | " 2.0 | \n",
1649 | "
\n",
1650 | " \n",
1651 | " 4 | \n",
1652 | " 717500 | \n",
1653 | " CBADF86F77EA578A | \n",
1654 | " 1.0 | \n",
1655 | " 1.0 | \n",
1656 | "
\n",
1657 | " \n",
1658 | " 5 | \n",
1659 | " 719500 | \n",
1660 | " E1C9F25394A679A6 | \n",
1661 | " 1.0 | \n",
1662 | " 1.0 | \n",
1663 | "
\n",
1664 | " \n",
1665 | " 6 | \n",
1666 | " 720000 | \n",
1667 | " EFB5D16396077A47 | \n",
1668 | " 2.0 | \n",
1669 | " 2.0 | \n",
1670 | "
\n",
1671 | " \n",
1672 | " 7 | \n",
1673 | " 725000 | \n",
1674 | " 6BF7787F751753F7 | \n",
1675 | " 4.0 | \n",
1676 | " 4.0 | \n",
1677 | "
\n",
1678 | " \n",
1679 | " 8 | \n",
1680 | " 725000 | \n",
1681 | " 6FBD516B9E438283 | \n",
1682 | " 1.0 | \n",
1683 | " 1.0 | \n",
1684 | "
\n",
1685 | " \n",
1686 | " 9 | \n",
1687 | " 731500 | \n",
1688 | " E14C560FA31A855A | \n",
1689 | " 1.0 | \n",
1690 | " 1.0 | \n",
1691 | "
\n",
1692 | " \n",
1693 | " 10 | \n",
1694 | " 736000 | \n",
1695 | " 6144D60F9AB47CF4 | \n",
1696 | " 1.0 | \n",
1697 | " 1.0 | \n",
1698 | "
\n",
1699 | " \n",
1700 | " 11 | \n",
1701 | " 736000 | \n",
1702 | " 6F35D1636FCB540B | \n",
1703 | " 1.0 | \n",
1704 | " 1.0 | \n",
1705 | "
\n",
1706 | " \n",
1707 | " 12 | \n",
1708 | " 738000 | \n",
1709 | " 61C4DA0743E52625 | \n",
1710 | " 4.0 | \n",
1711 | " 4.0 | \n",
1712 | "
\n",
1713 | " \n",
1714 | " 13 | \n",
1715 | " 740000 | \n",
1716 | " E8ABBA801F3C015C | \n",
1717 | " 2.0 | \n",
1718 | " 2.0 | \n",
1719 | "
\n",
1720 | " \n",
1721 | " 14 | \n",
1722 | " 744000 | \n",
1723 | " 4363747FF224D544 | \n",
1724 | " 1.0 | \n",
1725 | " 1.0 | \n",
1726 | "
\n",
1727 | " \n",
1728 | " 15 | \n",
1729 | " 745000 | \n",
1730 | " C90D7253BB41A041 | \n",
1731 | " 10.0 | \n",
1732 | " 10.0 | \n",
1733 | "
\n",
1734 | " \n",
1735 | " 16 | \n",
1736 | " 746000 | \n",
1737 | " 436B747F53EA370A | \n",
1738 | " 1.0 | \n",
1739 | " 1.0 | \n",
1740 | "
\n",
1741 | " \n",
1742 | " 17 | \n",
1743 | " 747000 | \n",
1744 | " EFBD516BFFA9E3E9 | \n",
1745 | " 2.0 | \n",
1746 | " 2.0 | \n",
1747 | "
\n",
1748 | " \n",
1749 | " 18 | \n",
1750 | " 748000 | \n",
1751 | " E14C5A0F8D8C6FCC | \n",
1752 | " 5.0 | \n",
1753 | " 5.0 | \n",
1754 | "
\n",
1755 | " \n",
1756 | " 19 | \n",
1757 | " 748000 | \n",
1758 | " C3EB747740052325 | \n",
1759 | " 5.0 | \n",
1760 | " 5.0 | \n",
1761 | "
\n",
1762 | " \n",
1763 | " 20 | \n",
1764 | " 754000 | \n",
1765 | " 6FB5516B20B104F1 | \n",
1766 | " 3.0 | \n",
1767 | " 3.0 | \n",
1768 | "
\n",
1769 | " \n",
1770 | " 21 | \n",
1771 | " 755000 | \n",
1772 | " 490D725B88E56DE5 | \n",
1773 | " 10.0 | \n",
1774 | " 10.0 | \n",
1775 | "
\n",
1776 | " \n",
1777 | " 22 | \n",
1778 | " 756000 | \n",
1779 | " 6FB5D1635CBF40FF | \n",
1780 | " 1.0 | \n",
1781 | " 1.0 | \n",
1782 | "
\n",
1783 | " \n",
1784 | " 23 | \n",
1785 | " 757000 | \n",
1786 | " 642F9A8039E51EE5 | \n",
1787 | " 3.0 | \n",
1788 | " 3.0 | \n",
1789 | "
\n",
1790 | " \n",
1791 | " 24 | \n",
1792 | " 757000 | \n",
1793 | " 64A79A88F278D778 | \n",
1794 | " 1.0 | \n",
1795 | " 1.0 | \n",
1796 | "
\n",
1797 | " \n",
1798 | " 25 | \n",
1799 | " 759000 | \n",
1800 | " 61C4DA0FFA35DC75 | \n",
1801 | " 5.0 | \n",
1802 | " 5.0 | \n",
1803 | "
\n",
1804 | " \n",
1805 | " 26 | \n",
1806 | " 760000 | \n",
1807 | " C3E3747718A3FBC4 | \n",
1808 | " 15.0 | \n",
1809 | " 15.0 | \n",
1810 | "
\n",
1811 | " \n",
1812 | " 27 | \n",
1813 | " 760000 | \n",
1814 | " 6F3DD163510F354F | \n",
1815 | " 4.0 | \n",
1816 | " 4.0 | \n",
1817 | "
\n",
1818 | " \n",
1819 | " 28 | \n",
1820 | " 768500 | \n",
1821 | " ECA71A88142AF92B | \n",
1822 | " 1.0 | \n",
1823 | " 1.0 | \n",
1824 | "
\n",
1825 | " \n",
1826 | " 29 | \n",
1827 | " 770000 | \n",
1828 | " C3637477EF36D256 | \n",
1829 | " 6.0 | \n",
1830 | " 6.0 | \n",
1831 | "
\n",
1832 | " \n",
1833 | " 30 | \n",
1834 | " 770000 | \n",
1835 | " EF35516B374E1B8E | \n",
1836 | " 6.0 | \n",
1837 | " 6.0 | \n",
1838 | "
\n",
1839 | " \n",
1840 | " 31 | \n",
1841 | " 770000 | \n",
1842 | " 436B747707D5EAF6 | \n",
1843 | " 2.0 | \n",
1844 | " 2.0 | \n",
1845 | "
\n",
1846 | " \n",
1847 | " 32 | \n",
1848 | " 770000 | \n",
1849 | " EFB5516B13DFF7E0 | \n",
1850 | " 6.0 | \n",
1851 | " 6.0 | \n",
1852 | "
\n",
1853 | " \n",
1854 | " 33 | \n",
1855 | " 770000 | \n",
1856 | " 43EB7477305D137D | \n",
1857 | " 6.0 | \n",
1858 | " 6.0 | \n",
1859 | "
\n",
1860 | " \n",
1861 | "
\n",
1862 | "
"
1863 | ],
1864 | "text/plain": [
1865 | " Price OrderNumber QuantityDifference QuantityDifference_\n",
1866 | "0 709500 47C3FA130EB2F3B3 210.0 0.0\n",
1867 | "1 712000 6F35516BC930AD70 2.0 2.0\n",
1868 | "2 712000 C363747FE0C9C3E9 2.0 2.0\n",
1869 | "3 715500 C365FC27C2C8A628 2.0 2.0\n",
1870 | "4 717500 CBADF86F77EA578A 1.0 1.0\n",
1871 | "5 719500 E1C9F25394A679A6 1.0 1.0\n",
1872 | "6 720000 EFB5D16396077A47 2.0 2.0\n",
1873 | "7 725000 6BF7787F751753F7 4.0 4.0\n",
1874 | "8 725000 6FBD516B9E438283 1.0 1.0\n",
1875 | "9 731500 E14C560FA31A855A 1.0 1.0\n",
1876 | "10 736000 6144D60F9AB47CF4 1.0 1.0\n",
1877 | "11 736000 6F35D1636FCB540B 1.0 1.0\n",
1878 | "12 738000 61C4DA0743E52625 4.0 4.0\n",
1879 | "13 740000 E8ABBA801F3C015C 2.0 2.0\n",
1880 | "14 744000 4363747FF224D544 1.0 1.0\n",
1881 | "15 745000 C90D7253BB41A041 10.0 10.0\n",
1882 | "16 746000 436B747F53EA370A 1.0 1.0\n",
1883 | "17 747000 EFBD516BFFA9E3E9 2.0 2.0\n",
1884 | "18 748000 E14C5A0F8D8C6FCC 5.0 5.0\n",
1885 | "19 748000 C3EB747740052325 5.0 5.0\n",
1886 | "20 754000 6FB5516B20B104F1 3.0 3.0\n",
1887 | "21 755000 490D725B88E56DE5 10.0 10.0\n",
1888 | "22 756000 6FB5D1635CBF40FF 1.0 1.0\n",
1889 | "23 757000 642F9A8039E51EE5 3.0 3.0\n",
1890 | "24 757000 64A79A88F278D778 1.0 1.0\n",
1891 | "25 759000 61C4DA0FFA35DC75 5.0 5.0\n",
1892 | "26 760000 C3E3747718A3FBC4 15.0 15.0\n",
1893 | "27 760000 6F3DD163510F354F 4.0 4.0\n",
1894 | "28 768500 ECA71A88142AF92B 1.0 1.0\n",
1895 | "29 770000 C3637477EF36D256 6.0 6.0\n",
1896 | "30 770000 EF35516B374E1B8E 6.0 6.0\n",
1897 | "31 770000 436B747707D5EAF6 2.0 2.0\n",
1898 | "32 770000 EFB5516B13DFF7E0 6.0 6.0\n",
1899 | "33 770000 43EB7477305D137D 6.0 6.0"
1900 | ]
1901 | },
1902 | "execution_count": 11,
1903 | "metadata": {},
1904 | "output_type": "execute_result"
1905 | }
1906 | ],
1907 | "source": [
1908 | "order_book_ask"
1909 | ]
1910 | },
1911 | {
1912 | "cell_type": "code",
1913 | "execution_count": 15,
1914 | "metadata": {},
1915 | "outputs": [
1916 | {
1917 | "data": {
1918 | "text/html": [
1919 | "\n",
1920 | "\n",
1933 | "
\n",
1934 | " \n",
1935 | " \n",
1936 | " | \n",
1937 | " Price | \n",
1938 | " QuantityDifference | \n",
1939 | "
\n",
1940 | " \n",
1941 | " \n",
1942 | " \n",
1943 | " 0 | \n",
1944 | " 709500 | \n",
1945 | " 210.0 | \n",
1946 | "
\n",
1947 | " \n",
1948 | " 1 | \n",
1949 | " 712000 | \n",
1950 | " 4.0 | \n",
1951 | "
\n",
1952 | " \n",
1953 | " 2 | \n",
1954 | " 715500 | \n",
1955 | " 2.0 | \n",
1956 | "
\n",
1957 | " \n",
1958 | " 3 | \n",
1959 | " 717500 | \n",
1960 | " 1.0 | \n",
1961 | "
\n",
1962 | " \n",
1963 | " 4 | \n",
1964 | " 719500 | \n",
1965 | " 1.0 | \n",
1966 | "
\n",
1967 | " \n",
1968 | " 5 | \n",
1969 | " 720000 | \n",
1970 | " 2.0 | \n",
1971 | "
\n",
1972 | " \n",
1973 | " 6 | \n",
1974 | " 725000 | \n",
1975 | " 5.0 | \n",
1976 | "
\n",
1977 | " \n",
1978 | " 7 | \n",
1979 | " 731500 | \n",
1980 | " 1.0 | \n",
1981 | "
\n",
1982 | " \n",
1983 | " 8 | \n",
1984 | " 736000 | \n",
1985 | " 2.0 | \n",
1986 | "
\n",
1987 | " \n",
1988 | " 9 | \n",
1989 | " 738000 | \n",
1990 | " 4.0 | \n",
1991 | "
\n",
1992 | " \n",
1993 | " 10 | \n",
1994 | " 740000 | \n",
1995 | " 2.0 | \n",
1996 | "
\n",
1997 | " \n",
1998 | " 11 | \n",
1999 | " 744000 | \n",
2000 | " 1.0 | \n",
2001 | "
\n",
2002 | " \n",
2003 | " 12 | \n",
2004 | " 745000 | \n",
2005 | " 10.0 | \n",
2006 | "
\n",
2007 | " \n",
2008 | " 13 | \n",
2009 | " 746000 | \n",
2010 | " 1.0 | \n",
2011 | "
\n",
2012 | " \n",
2013 | " 14 | \n",
2014 | " 747000 | \n",
2015 | " 2.0 | \n",
2016 | "
\n",
2017 | " \n",
2018 | " 15 | \n",
2019 | " 748000 | \n",
2020 | " 10.0 | \n",
2021 | "
\n",
2022 | " \n",
2023 | " 16 | \n",
2024 | " 754000 | \n",
2025 | " 3.0 | \n",
2026 | "
\n",
2027 | " \n",
2028 | " 17 | \n",
2029 | " 755000 | \n",
2030 | " 10.0 | \n",
2031 | "
\n",
2032 | " \n",
2033 | " 18 | \n",
2034 | " 756000 | \n",
2035 | " 1.0 | \n",
2036 | "
\n",
2037 | " \n",
2038 | " 19 | \n",
2039 | " 757000 | \n",
2040 | " 4.0 | \n",
2041 | "
\n",
2042 | " \n",
2043 | " 20 | \n",
2044 | " 759000 | \n",
2045 | " 5.0 | \n",
2046 | "
\n",
2047 | " \n",
2048 | " 21 | \n",
2049 | " 760000 | \n",
2050 | " 15.0 | \n",
2051 | "
\n",
2052 | " \n",
2053 | " 22 | \n",
2054 | " 768500 | \n",
2055 | " 1.0 | \n",
2056 | "
\n",
2057 | " \n",
2058 | " 23 | \n",
2059 | " 770000 | \n",
2060 | " 26.0 | \n",
2061 | "
\n",
2062 | " \n",
2063 | "
\n",
2064 | "
"
2065 | ],
2066 | "text/plain": [
2067 | " Price QuantityDifference\n",
2068 | "0 709500 210.0\n",
2069 | "1 712000 4.0\n",
2070 | "2 715500 2.0\n",
2071 | "3 717500 1.0\n",
2072 | "4 719500 1.0\n",
2073 | "5 720000 2.0\n",
2074 | "6 725000 5.0\n",
2075 | "7 731500 1.0\n",
2076 | "8 736000 2.0\n",
2077 | "9 738000 4.0\n",
2078 | "10 740000 2.0\n",
2079 | "11 744000 1.0\n",
2080 | "12 745000 10.0\n",
2081 | "13 746000 1.0\n",
2082 | "14 747000 2.0\n",
2083 | "15 748000 10.0\n",
2084 | "16 754000 3.0\n",
2085 | "17 755000 10.0\n",
2086 | "18 756000 1.0\n",
2087 | "19 757000 4.0\n",
2088 | "20 759000 5.0\n",
2089 | "21 760000 15.0\n",
2090 | "22 768500 1.0\n",
2091 | "23 770000 26.0"
2092 | ]
2093 | },
2094 | "execution_count": 15,
2095 | "metadata": {},
2096 | "output_type": "execute_result"
2097 | }
2098 | ],
2099 | "source": [
2100 | "order_book_ask_sum"
2101 | ]
2102 | },
2103 | {
2104 | "cell_type": "code",
2105 | "execution_count": 13,
2106 | "metadata": {},
2107 | "outputs": [
2108 | {
2109 | "data": {
2110 | "text/html": [
2111 | "\n",
2112 | "\n",
2125 | "
\n",
2126 | " \n",
2127 | " \n",
2128 | " | \n",
2129 | " Price | \n",
2130 | " QuantityDifference | \n",
2131 | "
\n",
2132 | " \n",
2133 | " \n",
2134 | " \n",
2135 | " 0 | \n",
2136 | " 709500 | \n",
2137 | " 210.0 | \n",
2138 | "
\n",
2139 | " \n",
2140 | " 1 | \n",
2141 | " 707000 | \n",
2142 | " 1.0 | \n",
2143 | "
\n",
2144 | " \n",
2145 | " 2 | \n",
2146 | " 702000 | \n",
2147 | " 1.0 | \n",
2148 | "
\n",
2149 | " \n",
2150 | " 3 | \n",
2151 | " 701000 | \n",
2152 | " 1.0 | \n",
2153 | "
\n",
2154 | " \n",
2155 | " 4 | \n",
2156 | " 700500 | \n",
2157 | " 2.0 | \n",
2158 | "
\n",
2159 | " \n",
2160 | " 5 | \n",
2161 | " 699000 | \n",
2162 | " 2.0 | \n",
2163 | "
\n",
2164 | " \n",
2165 | " 6 | \n",
2166 | " 697500 | \n",
2167 | " 1.0 | \n",
2168 | "
\n",
2169 | " \n",
2170 | " 7 | \n",
2171 | " 695500 | \n",
2172 | " 1.0 | \n",
2173 | "
\n",
2174 | " \n",
2175 | " 8 | \n",
2176 | " 690500 | \n",
2177 | " 1.0 | \n",
2178 | "
\n",
2179 | " \n",
2180 | " 9 | \n",
2181 | " 690000 | \n",
2182 | " 77.0 | \n",
2183 | "
\n",
2184 | " \n",
2185 | " 10 | \n",
2186 | " 685000 | \n",
2187 | " 2.0 | \n",
2188 | "
\n",
2189 | " \n",
2190 | " 11 | \n",
2191 | " 683500 | \n",
2192 | " 4.0 | \n",
2193 | "
\n",
2194 | " \n",
2195 | " 12 | \n",
2196 | " 682000 | \n",
2197 | " 100.0 | \n",
2198 | "
\n",
2199 | " \n",
2200 | " 13 | \n",
2201 | " 673000 | \n",
2202 | " 8.0 | \n",
2203 | "
\n",
2204 | " \n",
2205 | " 14 | \n",
2206 | " 663500 | \n",
2207 | " 3.0 | \n",
2208 | "
\n",
2209 | " \n",
2210 | " 15 | \n",
2211 | " 653500 | \n",
2212 | " 3.0 | \n",
2213 | "
\n",
2214 | " \n",
2215 | "
\n",
2216 | "
"
2217 | ],
2218 | "text/plain": [
2219 | " Price QuantityDifference\n",
2220 | "0 709500 210.0\n",
2221 | "1 707000 1.0\n",
2222 | "2 702000 1.0\n",
2223 | "3 701000 1.0\n",
2224 | "4 700500 2.0\n",
2225 | "5 699000 2.0\n",
2226 | "6 697500 1.0\n",
2227 | "7 695500 1.0\n",
2228 | "8 690500 1.0\n",
2229 | "9 690000 77.0\n",
2230 | "10 685000 2.0\n",
2231 | "11 683500 4.0\n",
2232 | "12 682000 100.0\n",
2233 | "13 673000 8.0\n",
2234 | "14 663500 3.0\n",
2235 | "15 653500 3.0"
2236 | ]
2237 | },
2238 | "execution_count": 13,
2239 | "metadata": {},
2240 | "output_type": "execute_result"
2241 | }
2242 | ],
2243 | "source": [
2244 | "order_book_bid_sum"
2245 | ]
2246 | },
2247 | {
2248 | "cell_type": "code",
2249 | "execution_count": null,
2250 | "metadata": {},
2251 | "outputs": [],
2252 | "source": []
2253 | }
2254 | ],
2255 | "metadata": {
2256 | "interpreter": {
2257 | "hash": "ed225720166559e7176d3793db16a2fd8d295f725007103b21ac3099d2a89ee8"
2258 | },
2259 | "kernelspec": {
2260 | "display_name": "Python 3.9.7 ('base')",
2261 | "language": "python",
2262 | "name": "python3"
2263 | },
2264 | "language_info": {
2265 | "codemirror_mode": {
2266 | "name": "ipython",
2267 | "version": 3
2268 | },
2269 | "file_extension": ".py",
2270 | "mimetype": "text/x-python",
2271 | "name": "python",
2272 | "nbconvert_exporter": "python",
2273 | "pygments_lexer": "ipython3",
2274 | "version": "3.9.7"
2275 | },
2276 | "orig_nbformat": 4
2277 | },
2278 | "nbformat": 4,
2279 | "nbformat_minor": 2
2280 | }
2281 |
--------------------------------------------------------------------------------
/feature_engineering.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "### **High Frequency Trading Strategies Design using ML and DL**"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "# -*- coding: utf-8 -*-\n",
17 | "\"\"\"\n",
18 | "Created on Sun Mar 13 22:40:00 2022\n",
19 | "\n",
20 | "@author: Bradley\n",
21 | "\n",
22 | "HFT: Machine Learning Techniques on Full Orderbook Tick Data\n",
23 | "\"\"\""
24 | ]
25 | },
26 | {
27 | "cell_type": "code",
28 | "execution_count": 18,
29 | "metadata": {},
30 | "outputs": [],
31 | "source": [
32 | "import numpy as np\n",
33 | "import pandas as pd\n",
34 | "import matplotlib.pyplot as plt\n",
35 | "import seaborn as sns\n",
36 | "import statsmodels.api as sm\n",
37 | "from datetime import datetime\n",
38 | "import csv\n",
39 | "\n",
40 | "plt.rcParams['font.family'] = ['sans-serif']\n",
41 | "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
42 | "plt.rcParams['axes.unicode_minus'] = False\n",
43 | "plt.rcParams['figure.figsize'] = (8,5) #提前设置图片形状大小\n",
44 | "\n",
45 | "%config InlineBackend.figure_format = 'svg'\n",
46 | "\n",
47 | "%matplotlib inline\n",
48 | "\n",
49 | "import warnings\n",
50 | "warnings.filterwarnings('ignore') # 忽略一些warnings\n",
51 | "\n",
52 | "# from IPython.core.interactiveshell import InteractiveShell\n",
53 | "# InteractiveShell.ast_node_interactivity = \"all\"\n",
54 | "\n",
55 | "from IPython.display import display\n",
56 | "pd.set_option('expand_frame_repr', False)\n",
57 | "pd.set_option('display.unicode.ambiguous_as_wide', True)\n",
58 | "pd.set_option('display.unicode.east_asian_width', True)\n",
59 | "pd.set_option('display.width', 180)"
60 | ]
61 | },
62 | {
63 | "cell_type": "markdown",
64 | "metadata": {},
65 | "source": [
66 | "### **Feature Engineering**"
67 | ]
68 | },
69 | {
70 | "cell_type": "code",
71 | "execution_count": 19,
72 | "metadata": {},
73 | "outputs": [],
74 | "source": [
75 | "# read the data\n",
76 | "def order_book(month,day):\n",
77 | " datapath = './data/order_book_3_2014' + '_' + str(month) + '_' + str(day) + '.csv'\n",
78 | " order = pd.read_csv(datapath,sep=',') #隔一个取一个\n",
79 | " bid_price_1 = np.array(order['Bid'][1::4].astype(\"float64\"))/100 #bid1\n",
80 | " bid_price_2 = np.array(order['Bid'][2::4].astype(\"float64\"))/100 #bid2\n",
81 | " bid_price_3 = np.array(order['Bid'][3::4].astype(\"float64\"))/100 #bid3\n",
82 | " timestamp = np.array(order['Bid_Quantity'][0::4]) #每个tick data的时间\n",
83 | " bid_quantity_1 = np.array(order['Bid_Quantity'][1::4].astype(\"float64\"))/100 #bidqty1\n",
84 | " bid_quantity_2 = np.array(order['Bid_Quantity'][2::4].astype(\"float64\"))/100 #bidqty2\n",
85 | " bid_quantity_3 = np.array(order['Bid_Quantity'][3::4].astype(\"float64\"))/100 #bidqty3\n",
86 | " ask_price_1 = np.array(order['Ask'][1::4].astype(\"float64\"))/100 #ask1\n",
87 | " ask_price_2 = np.array(order['Ask'][2::4].astype(\"float64\"))/100 #ask2\n",
88 | " ask_price_3 = np.array(order['Ask'][3::4].astype(\"float64\"))/100 #ask3\n",
89 | " ask_quantity_1 = np.array(order['Ask_Quantity'][1::4].astype(\"float64\"))/100 #askqty1\n",
90 | " ask_quantity_2 = np.array(order['Ask_Quantity'][2::4].astype(\"float64\"))/100 #askqty1\n",
91 | " ask_quantity_3 = np.array(order['Ask_Quantity'][3::4].astype(\"float64\"))/100 #askqty1\n",
92 | " \n",
93 | " # 填充缺失值为0\n",
94 | " bid_quantity_1[np.isnan(bid_quantity_1)] = 0\n",
95 | " bid_quantity_2[np.isnan(bid_quantity_2)] = 0\n",
96 | " bid_quantity_3[np.isnan(bid_quantity_3)] = 0\n",
97 | " ask_quantity_1[np.isnan(ask_quantity_1)] = 0\n",
98 | " ask_quantity_2[np.isnan(ask_quantity_2)] = 0\n",
99 | " ask_quantity_3[np.isnan(ask_quantity_3)] = 0\n",
100 | " \n",
101 | " return timestamp,order,bid_price_1,bid_price_2,bid_price_3,bid_quantity_1,\\\n",
102 | " bid_quantity_2,bid_quantity_3,ask_price_1,ask_price_2,ask_price_3,ask_quantity_1,\\\n",
103 | " ask_quantity_2,ask_quantity_3"
104 | ]
105 | },
106 | {
107 | "cell_type": "code",
108 | "execution_count": 20,
109 | "metadata": {},
110 | "outputs": [],
111 | "source": [
112 | "# time_second是将timestamp数据格式转换为全按分钟计算\n",
113 | "# time_second_basic是讲上面的转换结果减去一个32400\n",
114 | "# 作用是使得上午的交易时间[0, 9000]对应09:00 ~ 11:30,下午的交易时间[14400, 25200]对应13:00 ~ 16:00,借以将上下午分开\n",
115 | "def time_transform(timestamp_time):\n",
116 | " time_second_basic = []\n",
117 | " time_second = []\n",
118 | " for i in range(0,len(timestamp_time),1):\n",
119 | " second = float(timestamp_time[i][11])*36000 + float(timestamp_time[i][12])*3600+\\\n",
120 | " float(timestamp_time[i][14])*600 + float(timestamp_time[i][15])*60+\\\n",
121 | " float(timestamp_time[i][17])*10 + float(timestamp_time[i][18]) \n",
122 | " time_second_basic.append(second - 32400.0)\n",
123 | " time_second.append(second)\n",
124 | " return np.array(time_second),np.array(time_second_basic)"
125 | ]
126 | },
127 | {
128 | "cell_type": "code",
129 | "execution_count": 21,
130 | "metadata": {},
131 | "outputs": [],
132 | "source": [
133 | "# rise factor\n",
134 | "def rise_ask(Ask1,timestamp_time_second,before_time):\n",
135 | " Ask1[Ask1 == 0] = np.mean(Ask1)\n",
136 | " rise_ratio = []\n",
137 | " index = np.where(timestamp_time_second >= before_time)[0][0]\n",
138 | " #open first before_time mins\n",
139 | " for i in range(0, index, 1):\n",
140 | " rise_ratio_ = round((Ask1[i] - Ask1[0])*(1.0)/Ask1[0]*100,5)\n",
141 | " rise_ratio.append(rise_ratio_)\n",
142 | " for i in range(index,len(Ask1),1):\n",
143 | " #print np.where(timestamp_time_second[:i] >= timestamp_time_second[i] - before_time)\n",
144 | " #print timestamp_time_second[i],timestamp_time_second[i] - before_time\n",
145 | " index_start = np.where(timestamp_time_second[:i] >= timestamp_time_second[i] - before_time)[0][0]\n",
146 | " rise_ratio_ = round((Ask1[i] - Ask1[index_start])*(1.0)/Ask1[index_start]*100,5)\n",
147 | " rise_ratio.append(rise_ratio_)\n",
148 | " return np.array(rise_ratio)"
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": 22,
154 | "metadata": {},
155 | "outputs": [],
156 | "source": [
157 | "# level-3 OBI and Depth Ratio\n",
158 | "def weight_pecentage(w1,w2,w3,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3):\n",
159 | " Weight_Ask = (w1 * ask_quantity_1 + w2 * ask_quantity_2 + w3 * ask_quantity_3)\n",
160 | " Weight_Bid = (w1 * bid_quantity_1 + w2 * bid_quantity_2 + w3 * bid_quantity_3)\n",
161 | "\n",
162 | " W_AB = Weight_Ask/Weight_Bid\n",
163 | " W_A_B = (Weight_Ask - Weight_Bid)/(Weight_Ask + Weight_Bid)\n",
164 | " return W_AB, W_A_B"
165 | ]
166 | },
167 | {
168 | "cell_type": "code",
169 | "execution_count": 23,
170 | "metadata": {},
171 | "outputs": [],
172 | "source": [
173 | "# 定义每个second的要predict的label,以及对应second级别的各类输入factor/feature,由于是second级别,输出的dataframe会比原来小\n",
174 | "# 可以根据需要更改成tick级别的label和feature数据,这样输出的dataframe和原来大小差不多\n",
175 | "def traded_label_one_second(time1,time2,time_second_basic,bid_price_1,ask_price_1, bid_quantity_1, ask_quantity_1, traded_time,\\\n",
176 | " rise_ratio_ask_1,rise_ratio_ask_2,rise_ratio_ask_3,rise_ratio_ask_4,\\\n",
177 | " rise_ratio_ask_5,rise_ratio_ask_6,rise_ratio_ask_7,rise_ratio_ask_8,\\\n",
178 | " rise_ratio_ask_9,rise_ratio_ask_10,rise_ratio_ask_11,rise_ratio_ask_12,\\\n",
179 | " rise_ratio_ask_13,rise_ratio_ask_14,rise_ratio_ask_15,rise_ratio_ask_16,\\\n",
180 | " rise_ratio_ask_17,rise_ratio_ask_18,rise_ratio_ask_19,rise_ratio_ask_20,\\\n",
181 | " rise_ratio_ask_21,rise_ratio_ask_22,rise_ratio_ask_23,rise_ratio_ask_24,\\\n",
182 | " rise_ratio_ask_25,rise_ratio_ask_26,rise_ratio_ask_27,rise_ratio_ask_28,\\\n",
183 | " rise_ratio_ask_29,rise_ratio_ask_30,W_AB_100, W_A_B_100, W_AB_010, W_A_B_010,\\\n",
184 | " W_AB_001,W_A_B_001, W_AB_910, W_A_B_910, W_AB_820, W_A_B_820, W_AB_730,\\\n",
185 | " W_A_B_730,W_AB_640, W_A_B_640, W_AB_550, W_A_B_550,W_AB_721, W_A_B_721,\\\n",
186 | " W_AB_532,W_A_B_532, W_AB_111, W_A_B_111, W_AB_190, W_A_B_190, W_AB_280,\\\n",
187 | " W_A_B_280,W_AB_370, W_A_B_370, W_AB_460, W_A_B_460, W_AB_127, W_A_B_127,\\\n",
188 | " W_AB_235, W_A_B_235):\n",
189 | " global index\n",
190 | " \n",
191 | " traded = []\n",
192 | " index_ = []\n",
193 | " \n",
194 | " rise_ratio_second_1 = []\n",
195 | " rise_ratio_second_2 = [] \n",
196 | " rise_ratio_second_3 = []\n",
197 | " rise_ratio_second_4 = []\n",
198 | " rise_ratio_second_5 = []\n",
199 | " rise_ratio_second_6 = []\n",
200 | " rise_ratio_second_7 = []\n",
201 | " rise_ratio_second_8 = []\n",
202 | " rise_ratio_second_9 = []\n",
203 | " rise_ratio_second_10 = []\n",
204 | " rise_ratio_second_11 = []\n",
205 | " rise_ratio_second_12 = []\n",
206 | " rise_ratio_second_13 = []\n",
207 | " rise_ratio_second_14 = []\n",
208 | " rise_ratio_second_15 = []\n",
209 | " rise_ratio_second_16 = []\n",
210 | " rise_ratio_second_17 = []\n",
211 | " rise_ratio_second_18 = []\n",
212 | " rise_ratio_second_19 = []\n",
213 | " rise_ratio_second_20 = []\n",
214 | " rise_ratio_second_21 = []\n",
215 | " rise_ratio_second_22 = []\n",
216 | " rise_ratio_second_23 = []\n",
217 | " rise_ratio_second_24 = []\n",
218 | " rise_ratio_second_25 = []\n",
219 | " rise_ratio_second_26 = []\n",
220 | " rise_ratio_second_27 = []\n",
221 | " rise_ratio_second_28 = []\n",
222 | " rise_ratio_second_29 = []\n",
223 | " rise_ratio_second_30 = []\n",
224 | "\n",
225 | " w_divid_100 = []\n",
226 | " w_diff_100 = []\n",
227 | " w_divid_010 = []\n",
228 | " w_diff_010 = []\n",
229 | " w_divid_001 = []\n",
230 | " w_diff_001 = []\n",
231 | " w_divid_910 = []\n",
232 | " w_diff_910 = []\n",
233 | " w_divid_820 = []\n",
234 | " w_diff_820 = []\n",
235 | " w_divid_730 = []\n",
236 | " w_diff_730 = []\n",
237 | " w_divid_640 = []\n",
238 | " w_diff_640 = []\n",
239 | " w_divid_550 = []\n",
240 | " w_diff_550 = []\n",
241 | " w_divid_721 = []\n",
242 | " w_diff_721 = []\n",
243 | " w_divid_532 = []\n",
244 | " w_diff_532 = []\n",
245 | " w_divid_111 = []\n",
246 | " w_diff_111 = []\n",
247 | " w_divid_190 = []\n",
248 | " w_diff_190 = []\n",
249 | " w_divid_280 = []\n",
250 | " w_diff_280 = []\n",
251 | " w_divid_370 = []\n",
252 | " w_diff_370 = []\n",
253 | " w_divid_460 = []\n",
254 | " w_diff_460 = []\n",
255 | " w_divid_127 = []\n",
256 | " w_diff_127 = []\n",
257 | " w_divid_235 = []\n",
258 | " w_diff_235 = []\n",
259 | " spread = []\n",
260 | " ask = []\n",
261 | " bid = []\n",
262 | " # micsecond = time_second_basic[np.where((time_second_basic >= time1) & (time_second_basic <= time2))]\n",
263 | " # for i in range(0,len(micsecond),1):\n",
264 | " \n",
265 | " # index = np.where(time_second_basic <= micsecond[i])[0][-1]\n",
266 | " # if i == 0:\n",
267 | " # index_.append(index)\n",
268 | " # if i == len(micsecond) - 1:\n",
269 | " # index_.append(index)\n",
270 | " # if micsecond[i] <= 25200 - traded_time:\n",
271 | " # index_min = np.where(time_second_basic <= micsecond[i] + traded_time)[0][-1]\n",
272 | " # if bid_price_1[index] > min(ask_price_1[index:index_min]):\n",
273 | " # traded.append(1)\n",
274 | " # else:\n",
275 | " # traded.append(0)\n",
276 | " # elif micsecond[i] > 25200 - traded_time:\n",
277 | " # if bid_price_1[index] > ask_price_1[-1]:\n",
278 | " # traded.append(1)\n",
279 | " # else:\n",
280 | " # traded.append(0)\n",
281 | "\n",
282 | " if time1 == 0:\n",
283 | " index_one = np.where(time_second_basic <= 0)[0][-1]\n",
284 | " elif time1 == 14400:\n",
285 | " index_one = np.where(time_second_basic <= 14400)[0][-1]\n",
286 | " \n",
287 | " for i in range(time1, time2, 1):\n",
288 | " if i == 0 or i == 14400:\n",
289 | " index_array = np.where(time_second_basic <= i)[-1]\n",
290 | " else:\n",
291 | " index_array = np.where((time_second_basic < i+1) & (time_second_basic >= i))[-1]\n",
292 | " \n",
293 | " if len(index_array) > 0:\n",
294 | " index = index_array[-1]\n",
295 | " if i == time1:\n",
296 | " index_.append(index)\n",
297 | " if i == time2 - 1:\n",
298 | " index_.append(index)\n",
299 | " if i < 25200 - traded_time:\n",
300 | " index_min = np.where(time_second_basic <= i + traded_time)[0][-1]\n",
301 | " traded_min = ask_price_1[index:index_min]\n",
302 | " if bid_price_1[index] > min(traded_min):\n",
303 | " traded.append(1)\n",
304 | " else:\n",
305 | " traded.append(0)\n",
306 | " elif i >= 25200 - traded_time:\n",
307 | " if bid_price_1[index] > ask_price_1[-1]:\n",
308 | " traded.append(1)\n",
309 | " else:\n",
310 | " traded.append(0)\n",
311 | " ask0 = ask_price_1[index]\n",
312 | " bid0 = bid_price_1[index]\n",
313 | " ask.append(ask0)\n",
314 | " bid.append(bid0)\n",
315 | " spread.append(10000*(ask0-bid0)*2/(ask0+bid0))\n",
316 | " rise_ratio_second_1.append(rise_ratio_ask_1[(index - index_one)])\n",
317 | " rise_ratio_second_2.append(rise_ratio_ask_2[(index - index_one)])\n",
318 | " rise_ratio_second_3.append(rise_ratio_ask_3[(index - index_one)])\n",
319 | " rise_ratio_second_4.append(rise_ratio_ask_4[(index - index_one)])\n",
320 | " rise_ratio_second_5.append(rise_ratio_ask_5[(index - index_one)])\n",
321 | " rise_ratio_second_6.append(rise_ratio_ask_6[(index - index_one)])\n",
322 | " rise_ratio_second_7.append(rise_ratio_ask_7[(index - index_one)])\n",
323 | " rise_ratio_second_8.append(rise_ratio_ask_8[(index - index_one)])\n",
324 | " rise_ratio_second_9.append(rise_ratio_ask_9[(index - index_one)])\n",
325 | " rise_ratio_second_10.append(rise_ratio_ask_10[(index - index_one)])\n",
326 | " rise_ratio_second_11.append(rise_ratio_ask_11[(index - index_one)])\n",
327 | " rise_ratio_second_12.append(rise_ratio_ask_12[(index - index_one)])\n",
328 | " rise_ratio_second_13.append(rise_ratio_ask_13[(index - index_one)])\n",
329 | " rise_ratio_second_14.append(rise_ratio_ask_14[(index - index_one)])\n",
330 | " rise_ratio_second_15.append(rise_ratio_ask_15[(index - index_one)])\n",
331 | " rise_ratio_second_16.append(rise_ratio_ask_16[(index - index_one)])\n",
332 | " rise_ratio_second_17.append(rise_ratio_ask_17[(index - index_one)])\n",
333 | " rise_ratio_second_18.append(rise_ratio_ask_18[(index - index_one)])\n",
334 | " rise_ratio_second_19.append(rise_ratio_ask_19[(index - index_one)])\n",
335 | " rise_ratio_second_20.append(rise_ratio_ask_20[(index - index_one)])\n",
336 | " rise_ratio_second_21.append(rise_ratio_ask_21[(index - index_one)])\n",
337 | " rise_ratio_second_22.append(rise_ratio_ask_22[(index - index_one)])\n",
338 | " rise_ratio_second_23.append(rise_ratio_ask_23[(index - index_one)])\n",
339 | " rise_ratio_second_24.append(rise_ratio_ask_24[(index - index_one)])\n",
340 | " rise_ratio_second_25.append(rise_ratio_ask_25[(index - index_one)])\n",
341 | " rise_ratio_second_26.append(rise_ratio_ask_26[(index - index_one)])\n",
342 | " rise_ratio_second_27.append(rise_ratio_ask_27[(index - index_one)])\n",
343 | " rise_ratio_second_28.append(rise_ratio_ask_28[(index - index_one)])\n",
344 | " rise_ratio_second_29.append(rise_ratio_ask_29[(index - index_one)])\n",
345 | " rise_ratio_second_30.append(rise_ratio_ask_30[(index - index_one)])\n",
346 | " \n",
347 | " w_divid_100.append(W_AB_100[index_one + (index - index_one)])\n",
348 | " w_diff_100.append(W_A_B_100[index_one + (index - index_one)])\n",
349 | " w_divid_010.append(W_AB_010[index_one + (index - index_one)])\n",
350 | " w_diff_010.append(W_A_B_010[index_one + (index - index_one)])\n",
351 | " w_divid_001.append(W_AB_001[index_one + (index - index_one)])\n",
352 | " w_diff_001.append(W_A_B_001[index_one + (index - index_one)])\n",
353 | " w_divid_910.append(W_AB_910[index_one + (index - index_one)])\n",
354 | " w_diff_910.append(W_A_B_910[index_one + (index - index_one)])\n",
355 | " w_divid_820.append(W_AB_820[index_one + (index - index_one)])\n",
356 | " w_diff_820.append(W_A_B_820[index_one + (index - index_one)])\n",
357 | " w_divid_730.append(W_AB_730[index_one + (index - index_one)])\n",
358 | " w_diff_730.append(W_A_B_730[index_one + (index - index_one)])\n",
359 | " w_divid_640.append(W_AB_640[index_one + (index - index_one)])\n",
360 | " w_diff_640.append(W_A_B_640[index_one + (index - index_one)])\n",
361 | " w_divid_550.append(W_AB_550[index_one + (index - index_one)])\n",
362 | " w_diff_550.append(W_A_B_550[index_one + (index - index_one)])\n",
363 | " w_divid_721.append(W_AB_721[index_one + (index - index_one)])\n",
364 | " w_diff_721.append(W_A_B_721[index_one + (index - index_one)])\n",
365 | " w_divid_532.append(W_AB_532[index_one + (index - index_one)])\n",
366 | " w_diff_532.append(W_A_B_532[index_one + (index - index_one)])\n",
367 | " w_divid_111.append(W_AB_111[index_one + (index - index_one)])\n",
368 | " w_diff_111.append(W_A_B_111[index_one + (index - index_one)])\n",
369 | " w_divid_190.append(W_AB_190[index_one + (index - index_one)])\n",
370 | " w_diff_190.append(W_A_B_190[index_one + (index - index_one)])\n",
371 | " w_divid_280.append(W_AB_280[index_one + (index - index_one)])\n",
372 | " w_diff_280.append(W_A_B_280[index_one + (index - index_one)])\n",
373 | " w_divid_370.append(W_AB_370[index_one + (index - index_one)])\n",
374 | " w_diff_370.append(W_A_B_370[index_one + (index - index_one)])\n",
375 | " w_divid_460.append(W_AB_460[index_one + (index - index_one)])\n",
376 | " w_diff_460.append(W_A_B_460[index_one + (index - index_one)])\n",
377 | " w_divid_127.append(W_AB_127[index_one + (index - index_one)])\n",
378 | " w_diff_127.append(W_A_B_127[index_one + (index - index_one)])\n",
379 | " w_divid_235.append(W_AB_235[index_one + (index - index_one)])\n",
380 | " w_diff_235.append(W_A_B_235[index_one + (index - index_one)])\n",
381 | " \n",
382 | " elif len(index_array) == 0:\n",
383 | " if i < 25200 - traded_time:\n",
384 | " index_min = np.where(time_second_basic <= i + traded_time)[0][-1]\n",
385 | " traded_min = ask_price_1[index:index_min]\n",
386 | " if bid_price_1[index] > min(traded_min):\n",
387 | " traded.append(1)\n",
388 | " else:\n",
389 | " traded.append(0)\n",
390 | " elif i >= 25200 - traded_time:\n",
391 | " if bid_price_1[index] > ask_price_1[-1]:\n",
392 | " traded.append(1)\n",
393 | " else:\n",
394 | " traded.append(0)\n",
395 | "\n",
396 | " ask0 = ask_price_1[index]\n",
397 | " bid0 = bid_price_1[index]\n",
398 | " ask.append(ask0)\n",
399 | " bid.append(bid0)\n",
400 | " spread.append(10000*(ask0-bid0)*2/(ask0+bid0))\n",
401 | " rise_ratio_second_1.append(rise_ratio_second_1[-1])\n",
402 | " rise_ratio_second_2.append(rise_ratio_second_2[-1])\n",
403 | " rise_ratio_second_3.append(rise_ratio_second_3[-1])\n",
404 | " rise_ratio_second_4.append(rise_ratio_second_4[-1])\n",
405 | " rise_ratio_second_5.append(rise_ratio_second_5[-1])\n",
406 | " rise_ratio_second_6.append(rise_ratio_second_6[-1])\n",
407 | " rise_ratio_second_7.append(rise_ratio_second_7[-1])\n",
408 | " rise_ratio_second_8.append(rise_ratio_second_8[-1])\n",
409 | " rise_ratio_second_9.append(rise_ratio_second_9[-1])\n",
410 | " rise_ratio_second_10.append(rise_ratio_second_10[-1])\n",
411 | " rise_ratio_second_11.append(rise_ratio_second_11[-1])\n",
412 | " rise_ratio_second_12.append(rise_ratio_second_12[-1])\n",
413 | " rise_ratio_second_13.append(rise_ratio_second_13[-1])\n",
414 | " rise_ratio_second_14.append(rise_ratio_second_14[-1])\n",
415 | " rise_ratio_second_15.append(rise_ratio_second_15[-1])\n",
416 | " rise_ratio_second_16.append(rise_ratio_second_16[-1])\n",
417 | " rise_ratio_second_17.append(rise_ratio_second_17[-1])\n",
418 | " rise_ratio_second_18.append(rise_ratio_second_18[-1])\n",
419 | " rise_ratio_second_19.append(rise_ratio_second_19[-1])\n",
420 | " rise_ratio_second_20.append(rise_ratio_second_20[-1])\n",
421 | " rise_ratio_second_21.append(rise_ratio_second_21[-1])\n",
422 | " rise_ratio_second_22.append(rise_ratio_second_22[-1])\n",
423 | " rise_ratio_second_23.append(rise_ratio_second_23[-1])\n",
424 | " rise_ratio_second_24.append(rise_ratio_second_24[-1])\n",
425 | " rise_ratio_second_25.append(rise_ratio_second_25[-1])\n",
426 | " rise_ratio_second_26.append(rise_ratio_second_26[-1])\n",
427 | " rise_ratio_second_27.append(rise_ratio_second_27[-1])\n",
428 | " rise_ratio_second_28.append(rise_ratio_second_28[-1])\n",
429 | " rise_ratio_second_29.append(rise_ratio_second_29[-1])\n",
430 | " rise_ratio_second_30.append(rise_ratio_second_30[-1])\n",
431 | " \n",
432 | " w_divid_100.append(w_divid_100[-1])\n",
433 | " w_diff_100.append(w_diff_100[-1])\n",
434 | " w_divid_010.append(w_divid_010[-1])\n",
435 | " w_diff_010.append(w_diff_010[-1])\n",
436 | " w_divid_001.append(w_divid_001[-1])\n",
437 | " w_diff_001.append(w_diff_001[-1])\n",
438 | " w_divid_910.append(w_divid_910[-1])\n",
439 | " w_diff_910.append(w_diff_910[-1])\n",
440 | " w_divid_820.append(w_divid_820[-1])\n",
441 | " w_diff_820.append(w_diff_820[-1])\n",
442 | " w_divid_730.append(w_divid_730[-1])\n",
443 | " w_diff_730.append(w_diff_730[-1])\n",
444 | " w_divid_640.append(w_divid_640[-1])\n",
445 | " w_diff_640.append(w_diff_640[-1])\n",
446 | " w_divid_550.append(w_divid_550[-1])\n",
447 | " w_diff_550.append(w_diff_550[-1])\n",
448 | " w_divid_721.append(w_divid_721[-1])\n",
449 | " w_diff_721.append(w_diff_721[-1])\n",
450 | " w_divid_532.append(w_divid_532[-1])\n",
451 | " w_diff_532.append(w_diff_532[-1])\n",
452 | " w_divid_111.append(w_divid_111[-1])\n",
453 | " w_diff_111.append(w_diff_111[-1])\n",
454 | " w_divid_190.append(w_divid_190[-1])\n",
455 | " w_diff_190.append(w_diff_190[-1])\n",
456 | " w_divid_280.append(w_divid_280[-1])\n",
457 | " w_diff_280.append(w_diff_280[-1])\n",
458 | " w_divid_370.append(w_divid_370[-1])\n",
459 | " w_diff_370.append(w_diff_370[-1])\n",
460 | " w_divid_460.append(w_divid_460[-1])\n",
461 | " w_diff_460.append(w_diff_460[-1])\n",
462 | " w_divid_127.append(w_divid_127[-1])\n",
463 | " w_diff_127.append(w_diff_127[-1])\n",
464 | " w_divid_235.append(w_divid_235[-1])\n",
465 | " w_diff_235.append(w_diff_235[-1])\n",
466 | " \n",
467 | " return traded,index_,rise_ratio_second_1,rise_ratio_second_2,rise_ratio_second_3,\\\n",
468 | " rise_ratio_second_4,rise_ratio_second_5,rise_ratio_second_6,rise_ratio_second_7,\\\n",
469 | " rise_ratio_second_8,rise_ratio_second_9,rise_ratio_second_10,rise_ratio_second_11,\\\n",
470 | " rise_ratio_second_12,rise_ratio_second_13,rise_ratio_second_14,rise_ratio_second_15,\\\n",
471 | " rise_ratio_second_16,rise_ratio_second_17,rise_ratio_second_18,rise_ratio_second_19,\\\n",
472 | " rise_ratio_second_20,rise_ratio_second_21,rise_ratio_second_22,rise_ratio_second_23,\\\n",
473 | " rise_ratio_second_24,rise_ratio_second_25,rise_ratio_second_26,rise_ratio_second_27,\\\n",
474 | " rise_ratio_second_28,rise_ratio_second_29,rise_ratio_second_30,w_divid_100,w_diff_100,\\\n",
475 | " w_divid_010,w_diff_010,w_divid_001,w_diff_001,w_divid_910,w_diff_910,w_divid_820,w_diff_820,\\\n",
476 | " w_divid_730,w_diff_730,w_divid_640,w_diff_640,w_divid_550,w_diff_550,w_divid_721,w_diff_721,\\\n",
477 | " w_divid_532,w_diff_532,w_divid_111,w_diff_111,w_divid_190,w_diff_190,w_divid_280,w_diff_280,\\\n",
478 | " w_divid_370,w_diff_370,w_divid_460,w_diff_460,w_divid_127,w_diff_127,w_divid_235,w_diff_235, spread, ask, bid"
479 | ]
480 | },
481 | {
482 | "cell_type": "code",
483 | "execution_count": 24,
484 | "metadata": {},
485 | "outputs": [],
486 | "source": [
487 | "# 根据输入时间,分别得到上下午的因子值\n",
488 | "\n",
489 | "# # 上午:只取09:00 ~ 11:30作为交易区间,对应:\n",
490 | "# time1 = 0\n",
491 | "# time2 = 9000\n",
492 | "\n",
493 | "# # 下午:只取13:00 ~ 16:00作为交易区间,对应:\n",
494 | "# time1 = 14400\n",
495 | "# time2 = 25200\n",
496 | "\n",
497 | "\n",
498 | "def get_feature(time1, time2, traded_time,time_second_basic,bid_price_1,ask_price_1, bid_quantity_1, ask_quantity_1, rise_ratio_ask_1,\\\n",
499 | " rise_ratio_ask_2,rise_ratio_ask_3,rise_ratio_ask_4,rise_ratio_ask_5,\\\n",
500 | " rise_ratio_ask_6,rise_ratio_ask_7,rise_ratio_ask_8,rise_ratio_ask_9,\\\n",
501 | " rise_ratio_ask_10,rise_ratio_ask_11,rise_ratio_ask_12,rise_ratio_ask_13,\\\n",
502 | " rise_ratio_ask_14,rise_ratio_ask_15,rise_ratio_ask_16,rise_ratio_ask_17,\\\n",
503 | " rise_ratio_ask_18,rise_ratio_ask_19,rise_ratio_ask_20,rise_ratio_ask_21,\\\n",
504 | " rise_ratio_ask_22,rise_ratio_ask_23,rise_ratio_ask_24,rise_ratio_ask_25,\\\n",
505 | " rise_ratio_ask_26,rise_ratio_ask_27,rise_ratio_ask_28,rise_ratio_ask_29,\\\n",
506 | " rise_ratio_ask_30,W_AB_100, W_A_B_100, W_AB_010, W_A_B_010, W_AB_001,\\\n",
507 | " W_A_B_001, W_AB_910, W_A_B_910, W_AB_820, W_A_B_820, W_AB_730 , W_A_B_730,\\\n",
508 | " W_AB_640, W_A_B_640, W_AB_550, W_A_B_550,W_AB_721, W_A_B_721, W_AB_532,\\\n",
509 | " W_A_B_532, W_AB_111, W_A_B_111, W_AB_190, W_A_B_190, W_AB_280 , W_A_B_280,\\\n",
510 | " W_AB_370, W_A_B_370, W_AB_460, W_A_B_460, W_AB_127, W_A_B_127, W_AB_235, W_A_B_235):\n",
511 | "\n",
512 | " traded,index_,rise_ratio_second_1,rise_ratio_second_2,rise_ratio_second_3,\\\n",
513 | " rise_ratio_second_4,rise_ratio_second_5,rise_ratio_second_6,rise_ratio_second_7,\\\n",
514 | " rise_ratio_second_8,rise_ratio_second_9,rise_ratio_second_10,rise_ratio_second_11,\\\n",
515 | " rise_ratio_second_12,rise_ratio_second_13,rise_ratio_second_14,rise_ratio_second_15,\\\n",
516 | " rise_ratio_second_16,rise_ratio_second_17,rise_ratio_second_18,rise_ratio_second_19,\\\n",
517 | " rise_ratio_second_20,rise_ratio_second_21,rise_ratio_second_22,rise_ratio_second_23,\\\n",
518 | " rise_ratio_second_24,rise_ratio_second_25,rise_ratio_second_26,rise_ratio_second_27,\\\n",
519 | " rise_ratio_second_28,rise_ratio_second_29,rise_ratio_second_30,w_divid_100,w_diff_100,\\\n",
520 | " w_divid_010,w_diff_010,w_divid_001,w_diff_001,w_divid_910,w_diff_910,w_divid_820,w_diff_820,\\\n",
521 | " w_divid_730,w_diff_730,w_divid_640,w_diff_640,w_divid_550,w_diff_550,w_divid_721,w_diff_721,\\\n",
522 | " w_divid_532,w_diff_532,w_divid_111,w_diff_111,w_divid_190,w_diff_190,w_divid_280,w_diff_280,\\\n",
523 | " w_divid_370,w_diff_370,w_divid_460,w_diff_460,w_divid_127,w_diff_127,w_divid_235,w_diff_235, spread, ask, bid=\\\n",
524 | " traded_label_one_second(time1,time2,time_second_basic,bid_price_1,ask_price_1, bid_quantity_1, ask_quantity_1, traded_time,\\\n",
525 | " rise_ratio_ask_1,rise_ratio_ask_2,rise_ratio_ask_3,rise_ratio_ask_4,\\\n",
526 | " rise_ratio_ask_5,rise_ratio_ask_6,rise_ratio_ask_7,rise_ratio_ask_8,\\\n",
527 | " rise_ratio_ask_9,rise_ratio_ask_10,rise_ratio_ask_11,rise_ratio_ask_12,\\\n",
528 | " rise_ratio_ask_13,rise_ratio_ask_14,rise_ratio_ask_15,rise_ratio_ask_16,\\\n",
529 | " rise_ratio_ask_17,rise_ratio_ask_18,rise_ratio_ask_19,rise_ratio_ask_20,\\\n",
530 | " rise_ratio_ask_21,rise_ratio_ask_22,rise_ratio_ask_23,rise_ratio_ask_24,\\\n",
531 | " rise_ratio_ask_25,rise_ratio_ask_26,rise_ratio_ask_27,rise_ratio_ask_28,\\\n",
532 | " rise_ratio_ask_29,rise_ratio_ask_30,W_AB_100, W_A_B_100, W_AB_010, W_A_B_010,\\\n",
533 | " W_AB_001,W_A_B_001, W_AB_910, W_A_B_910, W_AB_820, W_A_B_820, W_AB_730,\\\n",
534 | " W_A_B_730,W_AB_640, W_A_B_640, W_AB_550, W_A_B_550,W_AB_721, W_A_B_721,\\\n",
535 | " W_AB_532,W_A_B_532, W_AB_111, W_A_B_111, W_AB_190, W_A_B_190, W_AB_280,\\\n",
536 | " W_A_B_280,W_AB_370, W_A_B_370, W_AB_460, W_A_B_460, W_AB_127, W_A_B_127,\\\n",
537 | " W_AB_235, W_A_B_235)\n",
538 | " \n",
539 | " data = np.array([traded,rise_ratio_second_1,rise_ratio_second_2,rise_ratio_second_3,\\\n",
540 | " rise_ratio_second_4,rise_ratio_second_5,rise_ratio_second_6,rise_ratio_second_7,\\\n",
541 | " rise_ratio_second_8,rise_ratio_second_9,rise_ratio_second_10,rise_ratio_second_11,\\\n",
542 | " rise_ratio_second_12,rise_ratio_second_13,rise_ratio_second_14,rise_ratio_second_15,\\\n",
543 | " rise_ratio_second_16,rise_ratio_second_17,rise_ratio_second_18,rise_ratio_second_19,\\\n",
544 | " rise_ratio_second_20,rise_ratio_second_21,rise_ratio_second_22,rise_ratio_second_23,\\\n",
545 | " rise_ratio_second_24,rise_ratio_second_25,rise_ratio_second_26,rise_ratio_second_27,\\\n",
546 | " rise_ratio_second_28,rise_ratio_second_29,rise_ratio_second_30,w_divid_100,w_diff_100,\\\n",
547 | " w_divid_010,w_diff_010,w_divid_001,w_diff_001,w_divid_910,w_diff_910,w_divid_820,w_diff_820,\\\n",
548 | " w_divid_730,w_diff_730,w_divid_640,w_diff_640,w_divid_550,w_diff_550,w_divid_721,w_diff_721,\\\n",
549 | " w_divid_532,w_diff_532,w_divid_111,w_diff_111,w_divid_190,w_diff_190,w_divid_280,w_diff_280,\\\n",
550 | " w_divid_370,w_diff_370,w_divid_460,w_diff_460,w_divid_127,w_diff_127,w_divid_235,w_diff_235, spread, ask, bid]).T\n",
551 | "\n",
552 | " return pd.DataFrame(data)#,traded_1 #, columns = ['label', 'rise', 'depth_divid', 'depth_diff'])\n"
553 | ]
554 | },
555 | {
556 | "cell_type": "code",
557 | "execution_count": 27,
558 | "metadata": {},
559 | "outputs": [],
560 | "source": [
561 | "def data(month,day,traded_time):\n",
562 | " \n",
563 | " # 读取所有bid1-3, ask1-3, bidqty1-3, askqty1-3,订单时间的序列\n",
564 | " # order_book_此处没有用到,是读取的dataframe本身\n",
565 | " timestamp, order_book_ ,bid_price_1, bid_price_2, bid_price_3, bid_quantity_1, bid_quantity_2, bid_quantity_3, ask_price_1, ask_price_2, ask_price_3, ask_quantity_1, ask_quantity_2, ask_quantity_3 = order_book(month,day)\n",
566 | " \n",
567 | "\n",
568 | " # 得到计算的时间戳\n",
569 | " time_second, time_second_basic = time_transform(timestamp)\n",
570 | " # Ask1是上午9:00之后卖一价\n",
571 | " Ask1 = ask_price_1[np.where(time_second_basic <= 0.0)[0][-1]:]\n",
572 | "\n",
573 | " # 设置不同权重创建一系列rise ratio factor作为输入feature\n",
574 | " before_time = 60.0 * 6\n",
575 | " rise_ratio_ask_1 = rise_ask(Ask1, time_second_basic, before_time)\n",
576 | " before_time = 60.0 * 6 + 30 \n",
577 | " rise_ratio_ask_2 = rise_ask(Ask1, time_second_basic, before_time)\n",
578 | " before_time = 60.0 * 7\n",
579 | " rise_ratio_ask_3 = rise_ask(Ask1, time_second_basic, before_time)\n",
580 | " before_time = 60.0 * 7 + 30 \n",
581 | " rise_ratio_ask_4 = rise_ask(Ask1, time_second_basic, before_time)\n",
582 | " before_time = 60.0 * 8\n",
583 | " rise_ratio_ask_5 = rise_ask(Ask1, time_second_basic, before_time)\n",
584 | " before_time = 60.0 * 8 + 30\n",
585 | " rise_ratio_ask_6 = rise_ask(Ask1, time_second_basic, before_time)\n",
586 | " before_time = 60.0 * 9\n",
587 | " rise_ratio_ask_7 = rise_ask(Ask1, time_second_basic, before_time)\n",
588 | " before_time = 60.0 * 9 + 30\n",
589 | " rise_ratio_ask_8 = rise_ask(Ask1, time_second_basic, before_time)\n",
590 | " before_time = 60.0 * 10\n",
591 | " rise_ratio_ask_9 = rise_ask(Ask1, time_second_basic, before_time)\n",
592 | " before_time = 60.0 * 10 + 30\n",
593 | " rise_ratio_ask_10 = rise_ask(Ask1, time_second_basic, before_time)\n",
594 | " before_time = 60.0 * 11\n",
595 | " rise_ratio_ask_11 = rise_ask(Ask1, time_second_basic, before_time)\n",
596 | " before_time = 60.0 * 11 + 30\n",
597 | " rise_ratio_ask_12 = rise_ask(Ask1, time_second_basic, before_time)\n",
598 | " before_time = 60.0 * 12\n",
599 | " rise_ratio_ask_13 = rise_ask(Ask1, time_second_basic, before_time)\n",
600 | " before_time = 60.0 * 12 + 30\n",
601 | " rise_ratio_ask_14 = rise_ask(Ask1, time_second_basic, before_time)\n",
602 | " before_time = 60.0 * 13\n",
603 | " rise_ratio_ask_15 = rise_ask(Ask1, time_second_basic, before_time)\n",
604 | " before_time = 60.0 * 13 + 30\n",
605 | " rise_ratio_ask_16 = rise_ask(Ask1, time_second_basic, before_time)\n",
606 | " before_time = 60.0 * 14\n",
607 | " rise_ratio_ask_17 = rise_ask(Ask1, time_second_basic, before_time)\n",
608 | " before_time = 60.0 * 14 + 30 \n",
609 | " rise_ratio_ask_18 = rise_ask(Ask1, time_second_basic, before_time)\n",
610 | " before_time = 60.0 * 15\n",
611 | " rise_ratio_ask_19 = rise_ask(Ask1, time_second_basic, before_time)\n",
612 | " before_time = 60.0 * 15 + 30\n",
613 | " rise_ratio_ask_20 = rise_ask(Ask1, time_second_basic, before_time)\n",
614 | " before_time = 60.0 * 16\n",
615 | " rise_ratio_ask_21 = rise_ask(Ask1, time_second_basic, before_time)\n",
616 | " before_time = 60.0 * 16 + 30\n",
617 | " rise_ratio_ask_22 = rise_ask(Ask1, time_second_basic, before_time)\n",
618 | " before_time = 60.0 * 17\n",
619 | " rise_ratio_ask_23 = rise_ask(Ask1, time_second_basic, before_time)\n",
620 | " before_time = 60.0 * 17 + 30\n",
621 | " rise_ratio_ask_24 = rise_ask(Ask1, time_second_basic, before_time)\n",
622 | " before_time = 60.0 * 18\n",
623 | " rise_ratio_ask_25 = rise_ask(Ask1, time_second_basic, before_time)\n",
624 | " before_time = 60.0 * 18 + 30\n",
625 | " rise_ratio_ask_26 = rise_ask(Ask1, time_second_basic, before_time)\n",
626 | " before_time = 60.0 * 19\n",
627 | " rise_ratio_ask_27 = rise_ask(Ask1, time_second_basic, before_time)\n",
628 | " before_time = 60.0 * 19 + 30\n",
629 | " rise_ratio_ask_28 = rise_ask(Ask1, time_second_basic, before_time)\n",
630 | " before_time = 60.0 * 20 \n",
631 | " rise_ratio_ask_29 = rise_ask(Ask1, time_second_basic, before_time)\n",
632 | " before_time = 60.0 * 20 + 30\n",
633 | " rise_ratio_ask_30 = rise_ask(Ask1, time_second_basic, before_time)\n",
634 | " \n",
635 | " # 设置不同权重创建一系列depth ratio factor、OBI signal作为输入feature\n",
636 | " W_AB_100 , W_A_B_100 = weight_pecentage(100, 0.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
637 | " W_AB_010 , W_A_B_010 = weight_pecentage(0.0, 100.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
638 | " W_AB_001 , W_A_B_001 = weight_pecentage(0.0, 0.0, 100.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
639 | " W_AB_910 , W_A_B_910 = weight_pecentage(90.0, 10.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
640 | " W_AB_820 , W_A_B_820 = weight_pecentage(80.0, 20.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
641 | " W_AB_730 , W_A_B_730 = weight_pecentage(70.0, 30.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
642 | " W_AB_640 , W_A_B_640 = weight_pecentage(60.0, 40.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
643 | " W_AB_550 , W_A_B_550 = weight_pecentage(50.0, 50.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
644 | " W_AB_721 , W_A_B_721 = weight_pecentage(70.0, 20.0, 10.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
645 | " W_AB_532 , W_A_B_532 = weight_pecentage(50.0, 30.0, 20.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
646 | " W_AB_111 , W_A_B_111 = weight_pecentage(1.0, 1.0, 1.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
647 | " W_AB_190 , W_A_B_190 = weight_pecentage(10.0, 90.0, 1.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
648 | " W_AB_280 , W_A_B_280 = weight_pecentage(20.0, 80.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
649 | " W_AB_370 , W_A_B_370 = weight_pecentage(30.0, 70.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
650 | " W_AB_460 , W_A_B_460 = weight_pecentage(40.0, 60.0, 0.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
651 | " W_AB_127 , W_A_B_127 = weight_pecentage(10.0, 20.0, 70.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
652 | " W_AB_235 , W_A_B_235 = weight_pecentage(20.0, 30.0, 50.0,ask_quantity_1,ask_quantity_2,ask_quantity_3, bid_quantity_1,bid_quantity_2,bid_quantity_3)\n",
653 | " \n",
654 | " # 上午:只取09:00 ~ 11:30作为交易区间,对应:\n",
655 | " time1 = 0\n",
656 | " time2 = 9000\n",
657 | "\n",
658 | " # 分别计算交易日上午的输入feature\n",
659 | " data_2014_UP =\\\n",
660 | " get_feature(time1, time2, traded_time,time_second_basic,bid_price_1,ask_price_1, bid_quantity_1, ask_quantity_1, rise_ratio_ask_1,\\\n",
661 | " rise_ratio_ask_2,rise_ratio_ask_3,rise_ratio_ask_4,rise_ratio_ask_5,\\\n",
662 | " rise_ratio_ask_6,rise_ratio_ask_7,rise_ratio_ask_8,rise_ratio_ask_9,\\\n",
663 | " rise_ratio_ask_10,rise_ratio_ask_11,rise_ratio_ask_12,rise_ratio_ask_13,\\\n",
664 | " rise_ratio_ask_14,rise_ratio_ask_15,rise_ratio_ask_16,rise_ratio_ask_17,\\\n",
665 | " rise_ratio_ask_18,rise_ratio_ask_19,rise_ratio_ask_20,rise_ratio_ask_21,\\\n",
666 | " rise_ratio_ask_22,rise_ratio_ask_23,rise_ratio_ask_24,rise_ratio_ask_25,\\\n",
667 | " rise_ratio_ask_26,rise_ratio_ask_27,rise_ratio_ask_28,rise_ratio_ask_29,\\\n",
668 | " rise_ratio_ask_30,W_AB_100, W_A_B_100, W_AB_010, W_A_B_010, W_AB_001,\\\n",
669 | " W_A_B_001, W_AB_910, W_A_B_910, W_AB_820, W_A_B_820, W_AB_730 , W_A_B_730,\\\n",
670 | " W_AB_640, W_A_B_640, W_AB_550, W_A_B_550,W_AB_721, W_A_B_721, W_AB_532,\\\n",
671 | " W_A_B_532, W_AB_111, W_A_B_111, W_AB_190, W_A_B_190, W_AB_280 , W_A_B_280,\\\n",
672 | " W_AB_370, W_A_B_370, W_AB_460, W_A_B_460, W_AB_127, W_A_B_127, W_AB_235, W_A_B_235)\n",
673 | "\n",
674 | " # 下午:只取13:00 ~ 16:00作为交易区间,对应:\n",
675 | " time1 = 14400\n",
676 | " time2 = 25200\n",
677 | "\n",
678 | " # 计算交易日下午的输入feature\n",
679 | " data_2014_DOWN =\\\n",
680 | " get_feature(time1, time2, traded_time,time_second_basic,bid_price_1,ask_price_1, bid_quantity_1, ask_quantity_1, rise_ratio_ask_1,\\\n",
681 | " rise_ratio_ask_2,rise_ratio_ask_3,rise_ratio_ask_4,rise_ratio_ask_5,\\\n",
682 | " rise_ratio_ask_6,rise_ratio_ask_7,rise_ratio_ask_8,rise_ratio_ask_9,\\\n",
683 | " rise_ratio_ask_10,rise_ratio_ask_11,rise_ratio_ask_12,rise_ratio_ask_13,\\\n",
684 | " rise_ratio_ask_14,rise_ratio_ask_15,rise_ratio_ask_16,rise_ratio_ask_17,\\\n",
685 | " rise_ratio_ask_18,rise_ratio_ask_19,rise_ratio_ask_20,rise_ratio_ask_21,\\\n",
686 | " rise_ratio_ask_22,rise_ratio_ask_23,rise_ratio_ask_24,rise_ratio_ask_25,\\\n",
687 | " rise_ratio_ask_26,rise_ratio_ask_27,rise_ratio_ask_28,rise_ratio_ask_29,\\\n",
688 | " rise_ratio_ask_30,W_AB_100, W_A_B_100, W_AB_010, W_A_B_010, W_AB_001,\\\n",
689 | " W_A_B_001, W_AB_910, W_A_B_910, W_AB_820, W_A_B_820, W_AB_730 , W_A_B_730,\\\n",
690 | " W_AB_640, W_A_B_640, W_AB_550, W_A_B_550,W_AB_721, W_A_B_721, W_AB_532,\\\n",
691 | " W_A_B_532, W_AB_111, W_A_B_111, W_AB_190, W_A_B_190, W_AB_280 , W_A_B_280,\\\n",
692 | " W_AB_370, W_A_B_370, W_AB_460, W_A_B_460, W_AB_127, W_A_B_127, W_AB_235, W_A_B_235)\n",
693 | "\n",
694 | " return data_2014_UP,data_2014_DOWN, len(W_AB_111) #trade_1, trade_2, timestamp"
695 | ]
696 | },
697 | {
698 | "cell_type": "code",
699 | "execution_count": 28,
700 | "metadata": {},
701 | "outputs": [
702 | {
703 | "name": "stdout",
704 | "output_type": "stream",
705 | "text": [
706 | "2\n"
707 | ]
708 | }
709 | ],
710 | "source": [
711 | "# 将上午和下午计算的因子分别存档\n",
712 | "# traded_time为产生人工label的参数,一般取15min,对应300s,详见HFT_factor.ipynb\n",
713 | "\n",
714 | "def train_test_to_csv(month,day,traded_time):\n",
715 | " data_UP,data_DOWN, len_ = data(month,day,traded_time)\n",
716 | " data_UP.to_csv('./processed_data/order_book_3_2014_new'+'_'+str(month)+'_'+str(day)+'_'+'UP'+'.csv', index = False)\n",
717 | " data_DOWN.to_csv('./processed_data/order_book_3_2014_new'+'_'+str(month)+'_'+str(day)+'_'+'DOWN'+'.csv', index = False) \n",
718 | "\n",
719 | "if __name__ == \"__main__\":\n",
720 | " # 以一天为例,有多天可以循环产生文件,后续model fit部分可以append起来\n",
721 | " month = 1\n",
722 | " day_ = [2]\n",
723 | " traded_time = 600\n",
724 | " for i in day_:\n",
725 | " print(i)\n",
726 | " train_test_to_csv(month,i,600) "
727 | ]
728 | },
729 | {
730 | "cell_type": "code",
731 | "execution_count": null,
732 | "metadata": {},
733 | "outputs": [],
734 | "source": []
735 | }
736 | ],
737 | "metadata": {
738 | "interpreter": {
739 | "hash": "ed225720166559e7176d3793db16a2fd8d295f725007103b21ac3099d2a89ee8"
740 | },
741 | "kernelspec": {
742 | "display_name": "Python 3.9.7 ('base')",
743 | "language": "python",
744 | "name": "python3"
745 | },
746 | "language_info": {
747 | "codemirror_mode": {
748 | "name": "ipython",
749 | "version": 3
750 | },
751 | "file_extension": ".py",
752 | "mimetype": "text/x-python",
753 | "name": "python",
754 | "nbconvert_exporter": "python",
755 | "pygments_lexer": "ipython3",
756 | "version": "3.9.7"
757 | },
758 | "orig_nbformat": 4
759 | },
760 | "nbformat": 4,
761 | "nbformat_minor": 2
762 | }
763 |
--------------------------------------------------------------------------------
/images/CV_result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/CV_result.png
--------------------------------------------------------------------------------
/images/best_CV_result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/best_CV_result.png
--------------------------------------------------------------------------------
/images/best_CV_result_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/best_CV_result_all.png
--------------------------------------------------------------------------------
/images/best_bid_ask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/best_bid_ask.png
--------------------------------------------------------------------------------
/images/bid1ask1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/bid1ask1.png
--------------------------------------------------------------------------------
/images/depth_0000_0900_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_0000_0900_w.png
--------------------------------------------------------------------------------
/images/depth_0000_0915.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_0000_0915.png
--------------------------------------------------------------------------------
/images/depth_0900_1130_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_0900_1130_w.png
--------------------------------------------------------------------------------
/images/depth_0915_1130.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_0915_1130.png
--------------------------------------------------------------------------------
/images/depth_1130_1300.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_1130_1300.png
--------------------------------------------------------------------------------
/images/depth_1130_1300_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_1130_1300_w.png
--------------------------------------------------------------------------------
/images/depth_1300_1600.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_1300_1600.png
--------------------------------------------------------------------------------
/images/depth_1300_1600_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/depth_1300_1600_w.png
--------------------------------------------------------------------------------
/images/prediction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/prediction.png
--------------------------------------------------------------------------------
/images/rise_0000_0915_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/rise_0000_0915_w.png
--------------------------------------------------------------------------------
/images/rise_0915_1130_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/rise_0915_1130_w.png
--------------------------------------------------------------------------------
/images/rise_1130_1300_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/rise_1130_1300_w.png
--------------------------------------------------------------------------------
/images/rise_1300_1600_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/rise_1300_1600_w.png
--------------------------------------------------------------------------------
/images/single_day_accuracy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradleyboyuyang/ML-HFT/5bcd376d61a3a21b70f2937ed771d01e07b90123/images/single_day_accuracy.png
--------------------------------------------------------------------------------
/order_book_3_2014_1_2.csv:
--------------------------------------------------------------------------------
1 | Bid,Bid_Quantity,Ask,Ask_Quantity
2 | TimeStamp,2014-01-02D04:19:51.857166800
3 | 700500.0,2.0,715500.0,2.0
4 | 699000.0,2.0,717500.0,1.0
5 | 697500.0,1.0,719500.0,1.0
6 | TimeStamp,2014-01-02D08:45:00.131582600
7 | 682000.0,111.0,0.0,210.0
8 | nan,nan,715500.0,2.0
9 | nan,nan,717500.0,1.0
10 | TimeStamp,2014-01-02D08:45:00.296582600
11 | 708000.0,210.0,682000.0,210.0
12 | 700500.0,2.0,715500.0,2.0
13 | 699000.0,2.0,717500.0,1.0
14 | TimeStamp,2014-01-02D08:45:00.398582300
15 | 708000.0,210.0,708000.0,210.0
16 | 700500.0,2.0,715500.0,2.0
17 | 699000.0,2.0,717500.0,1.0
18 | TimeStamp,2014-01-02D08:45:13.857414600
19 | 708000.0,210.0,708000.0,210.0
20 | 700500.0,2.0,715500.0,2.0
21 | 699000.0,2.0,717500.0,1.0
22 | TimeStamp,2014-01-02D08:45:14.977402600
23 | 708000.0,210.0,708000.0,210.0
24 | 700500.0,2.0,715500.0,2.0
25 | 699000.0,2.0,717500.0,1.0
26 | TimeStamp,2014-01-02D08:45:18.317366600
27 | 708000.0,210.0,708000.0,210.0
28 | 700500.0,2.0,715500.0,2.0
29 | 699000.0,2.0,717500.0,1.0
30 | TimeStamp,2014-01-02D08:45:30.059222600
31 | 708000.0,210.0,708000.0,210.0
32 | 700500.0,2.0,715500.0,2.0
33 | 699000.0,2.0,717500.0,1.0
34 | TimeStamp,2014-01-02D08:45:36.809138600
35 | 708000.0,210.0,708000.0,210.0
36 | 700500.0,2.0,715500.0,2.0
37 | 699000.0,2.0,717500.0,1.0
38 | TimeStamp,2014-01-02D08:46:00.014862600
39 | 708000.0,210.0,708000.0,210.0
40 | 700500.0,2.0,715500.0,2.0
41 | 699000.0,2.0,717500.0,1.0
42 | TimeStamp,2014-01-02D08:46:00.018862600
43 | 706500.0,210.0,706500.0,210.0
44 | 700500.0,2.0,712000.0,2.0
45 | 699000.0,2.0,715500.0,2.0
46 | TimeStamp,2014-01-02D08:46:00.021862600
47 | 706500.0,210.0,706500.0,210.0
48 | 700500.0,2.0,712000.0,2.0
49 | 699000.0,2.0,715500.0,2.0
50 | TimeStamp,2014-01-02D08:46:00.022862600
51 | 706500.0,210.0,706500.0,210.0
52 | 700500.0,2.0,712000.0,2.0
53 | 699000.0,2.0,715500.0,2.0
54 | TimeStamp,2014-01-02D08:46:00.024862600
55 | 706500.0,210.0,706500.0,210.0
56 | 700500.0,2.0,712000.0,2.0
57 | 699000.0,2.0,715500.0,2.0
58 | TimeStamp,2014-01-02D08:46:00.025862600
59 | 706500.0,210.0,706500.0,210.0
60 | 700500.0,2.0,712000.0,2.0
61 | 699000.0,2.0,715500.0,2.0
62 | TimeStamp,2014-01-02D08:46:00.033862600
63 | 707000.0,210.0,706500.0,210.0
64 | 702000.0,1.0,712000.0,2.0
65 | 700500.0,2.0,715500.0,2.0
66 | TimeStamp,2014-01-02D08:46:00.033862600
67 | 707000.0,210.0,707000.0,210.0
68 | 702000.0,1.0,712000.0,2.0
69 | 700500.0,2.0,715500.0,2.0
70 | TimeStamp,2014-01-02D08:46:00.036862600
71 | 707000.0,210.0,707000.0,210.0
72 | 702000.0,1.0,712000.0,2.0
73 | 700500.0,2.0,715500.0,2.0
74 | TimeStamp,2014-01-02D08:46:00.037862600
75 | 707000.0,210.0,707000.0,210.0
76 | 702000.0,1.0,712000.0,2.0
77 | 700500.0,2.0,715500.0,2.0
78 | TimeStamp,2014-01-02D08:46:00.043862600
79 | 709500.0,210.0,707000.0,210.0
80 | 707000.0,1.0,712000.0,2.0
81 | 702000.0,1.0,715500.0,2.0
82 | TimeStamp,2014-01-02D08:46:00.043862600
83 | 709500.0,210.0,709500.0,210.0
84 | 707000.0,1.0,712000.0,2.0
85 | 702000.0,1.0,715500.0,2.0
86 | TimeStamp,2014-01-02D08:46:00.045862600
87 | 709500.0,210.0,709500.0,210.0
88 | 707000.0,1.0,712000.0,2.0
89 | 702000.0,1.0,715500.0,2.0
90 | TimeStamp,2014-01-02D08:46:00.048862600
91 | 709500.0,210.0,709500.0,210.0
92 | 707000.0,1.0,712000.0,4.0
93 | 702000.0,1.0,715500.0,2.0
94 | TimeStamp,2014-01-02D08:46:00.052862600
95 | 709500.0,210.0,709500.0,210.0
96 | 707000.0,1.0,712000.0,4.0
97 | 702000.0,1.0,715500.0,2.0
98 | TimeStamp,2014-01-02D08:46:00.056862600
99 | 709500.0,210.0,709500.0,210.0
100 | 707000.0,1.0,712000.0,4.0
101 | 702000.0,1.0,715500.0,2.0
102 | TimeStamp,2014-01-02D08:46:00.061862600
103 | 709500.0,210.0,709500.0,210.0
104 | 707000.0,1.0,712000.0,4.0
105 | 702000.0,1.0,715500.0,2.0
106 |
--------------------------------------------------------------------------------
/order_book_4_2014_1_2.csv:
--------------------------------------------------------------------------------
1 | Bid,Bid_Quantity,Ask,Ask_Quantity
2 | TimeStamp,2014-01-02D04:19:51.857166800
3 | 700500.0,2.0,715500.0,2.0
4 | 699000.0,2.0,717500.0,1.0
5 | 697500.0,1.0,719500.0,1.0
6 | 690500.0,1.0,740000.0,2.0
7 | TimeStamp,2014-01-02D08:45:00.131582600
8 | 682000.0,111.0,0.0,210.0
9 | nan,nan,715500.0,2.0
10 | nan,nan,717500.0,1.0
11 | nan,nan,719500.0,1.0
12 | TimeStamp,2014-01-02D08:45:00.296582600
13 | 708000.0,210.0,682000.0,210.0
14 | 700500.0,2.0,715500.0,2.0
15 | 699000.0,2.0,717500.0,1.0
16 | 697500.0,1.0,719500.0,1.0
17 | TimeStamp,2014-01-02D08:45:00.398582300
18 | 708000.0,210.0,708000.0,210.0
19 | 700500.0,2.0,715500.0,2.0
20 | 699000.0,2.0,717500.0,1.0
21 | 697500.0,1.0,719500.0,1.0
22 | TimeStamp,2014-01-02D08:45:13.857414600
23 | 708000.0,210.0,708000.0,210.0
24 | 700500.0,2.0,715500.0,2.0
25 | 699000.0,2.0,717500.0,1.0
26 | 697500.0,1.0,719500.0,1.0
27 | TimeStamp,2014-01-02D08:45:14.977402600
28 | 708000.0,210.0,708000.0,210.0
29 | 700500.0,2.0,715500.0,2.0
30 | 699000.0,2.0,717500.0,1.0
31 | 697500.0,1.0,719500.0,1.0
32 | TimeStamp,2014-01-02D08:45:18.317366600
33 | 708000.0,210.0,708000.0,210.0
34 | 700500.0,2.0,715500.0,2.0
35 | 699000.0,2.0,717500.0,1.0
36 | 697500.0,1.0,719500.0,1.0
37 | TimeStamp,2014-01-02D08:45:30.059222600
38 | 708000.0,210.0,708000.0,210.0
39 | 700500.0,2.0,715500.0,2.0
40 | 699000.0,2.0,717500.0,1.0
41 | 697500.0,1.0,719500.0,1.0
42 | TimeStamp,2014-01-02D08:45:36.809138600
43 | 708000.0,210.0,708000.0,210.0
44 | 700500.0,2.0,715500.0,2.0
45 | 699000.0,2.0,717500.0,1.0
46 | 697500.0,1.0,719500.0,1.0
47 | TimeStamp,2014-01-02D08:46:00.014862600
48 | 708000.0,210.0,708000.0,210.0
49 | 700500.0,2.0,715500.0,2.0
50 | 699000.0,2.0,717500.0,1.0
51 | 697500.0,1.0,719500.0,1.0
52 | TimeStamp,2014-01-02D08:46:00.018862600
53 | 706500.0,210.0,706500.0,210.0
54 | 700500.0,2.0,712000.0,2.0
55 | 699000.0,2.0,715500.0,2.0
56 | 697500.0,1.0,717500.0,1.0
57 | TimeStamp,2014-01-02D08:46:00.021862600
58 | 706500.0,210.0,706500.0,210.0
59 | 700500.0,2.0,712000.0,2.0
60 | 699000.0,2.0,715500.0,2.0
61 | 697500.0,1.0,717500.0,1.0
62 | TimeStamp,2014-01-02D08:46:00.022862600
63 | 706500.0,210.0,706500.0,210.0
64 | 700500.0,2.0,712000.0,2.0
65 | 699000.0,2.0,715500.0,2.0
66 | 697500.0,1.0,717500.0,1.0
67 | TimeStamp,2014-01-02D08:46:00.024862600
68 | 706500.0,210.0,706500.0,210.0
69 | 700500.0,2.0,712000.0,2.0
70 | 699000.0,2.0,715500.0,2.0
71 | 697500.0,1.0,717500.0,1.0
72 | TimeStamp,2014-01-02D08:46:00.025862600
73 | 706500.0,210.0,706500.0,210.0
74 | 700500.0,2.0,712000.0,2.0
75 | 699000.0,2.0,715500.0,2.0
76 | 697500.0,1.0,717500.0,1.0
77 | TimeStamp,2014-01-02D08:46:00.033862600
78 | 707000.0,210.0,706500.0,210.0
79 | 702000.0,1.0,712000.0,2.0
80 | 700500.0,2.0,715500.0,2.0
81 | 699000.0,2.0,717500.0,1.0
82 | TimeStamp,2014-01-02D08:46:00.033862600
83 | 707000.0,210.0,707000.0,210.0
84 | 702000.0,1.0,712000.0,2.0
85 | 700500.0,2.0,715500.0,2.0
86 | 699000.0,2.0,717500.0,1.0
87 | TimeStamp,2014-01-02D08:46:00.036862600
88 | 707000.0,210.0,707000.0,210.0
89 | 702000.0,1.0,712000.0,2.0
90 | 700500.0,2.0,715500.0,2.0
91 | 699000.0,2.0,717500.0,1.0
92 | TimeStamp,2014-01-02D08:46:00.037862600
93 | 707000.0,210.0,707000.0,210.0
94 | 702000.0,1.0,712000.0,2.0
95 | 700500.0,2.0,715500.0,2.0
96 | 699000.0,2.0,717500.0,1.0
97 | TimeStamp,2014-01-02D08:46:00.043862600
98 | 709500.0,210.0,707000.0,210.0
99 | 707000.0,1.0,712000.0,2.0
100 | 702000.0,1.0,715500.0,2.0
101 | 701000.0,1.0,717500.0,1.0
102 | TimeStamp,2014-01-02D08:46:00.043862600
103 | 709500.0,210.0,709500.0,210.0
104 | 707000.0,1.0,712000.0,2.0
105 | 702000.0,1.0,715500.0,2.0
106 | 701000.0,1.0,717500.0,1.0
107 | TimeStamp,2014-01-02D08:46:00.045862600
108 | 709500.0,210.0,709500.0,210.0
109 | 707000.0,1.0,712000.0,2.0
110 | 702000.0,1.0,715500.0,2.0
111 | 701000.0,1.0,717500.0,1.0
112 | TimeStamp,2014-01-02D08:46:00.048862600
113 | 709500.0,210.0,709500.0,210.0
114 | 707000.0,1.0,712000.0,4.0
115 | 702000.0,1.0,715500.0,2.0
116 | 701000.0,1.0,717500.0,1.0
117 | TimeStamp,2014-01-02D08:46:00.052862600
118 | 709500.0,210.0,709500.0,210.0
119 | 707000.0,1.0,712000.0,4.0
120 | 702000.0,1.0,715500.0,2.0
121 | 701000.0,1.0,717500.0,1.0
122 | TimeStamp,2014-01-02D08:46:00.056862600
123 | 709500.0,210.0,709500.0,210.0
124 | 707000.0,1.0,712000.0,4.0
125 | 702000.0,1.0,715500.0,2.0
126 | 701000.0,1.0,717500.0,1.0
127 | TimeStamp,2014-01-02D08:46:00.061862600
128 | 709500.0,210.0,709500.0,210.0
129 | 707000.0,1.0,712000.0,4.0
130 | 702000.0,1.0,715500.0,2.0
131 | 701000.0,1.0,717500.0,1.0
132 |
--------------------------------------------------------------------------------