forked from phonegapX/alphahunter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
数据库设计v1.txt
271 lines (249 loc) · 20.6 KB
/
数据库设计v1.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#交易所名称表
TABLE t_exchange:
name -->类型:字符串. 取值如下:
"binance" #币安现货交易所
"binance_future" #币安期货交易所
"okex" #OKEX现货交易所
"okex_future" #OKEX期货交易所
"okex_swap" #OKEX永续交易所
"bitmex" #BitMEX交易所
"huobi" #火币现货交易所
"huobi_future" #火币期货交易所
...........
=================================================================================================================================
#交易符号表
TABLE t_symbol:
exchange -->类型:字符串. 交易所名称,如上
name -->类型:字符串. 备注:交易符号,如BTC/USDT, ETH/BTC
research_usable -->类型:boolean default True
trade_usable -->类型:boolean default True
=================================================================================================================================
#市场订单簿表, xxx是交易所名称 yyy是`符号对`,比如同一个`符号对`有些交易所是 btc/usdt,有些是btc_usdt,有些是btcusdt,不管什么格式统一转换为btcusdt这种,比如t_orderbook_binance_btcusdt
TABLE t_orderbook_xxx_yyy:
dt -->类型:64位正整数. 备注:表示我们自己的采集程序记录时间距离 Unix新纪元(1970年1月1日)的毫秒数
pubdt -->类型:64位正整数. 备注:表示交易所发布行情的时间距离 Unix新纪元(1970年1月1日)的毫秒数
asksize1 -->类型:float
...
asksize20 -->类型:float
askprice1 -->类型:float
...
askprice20 -->类型:float
bidsize1 -->类型:float
...
bidsize20 -->类型:float
bidprice1 -->类型:float
...
bidprice20 -->类型:float
=================================================================================================================================
#市场逐笔成交记录表, xxx是交易所名称 yyy是`符号对`,比如同一个`符号对`有些交易所是 btc/usdt,有些是btc_usdt,有些是btcusdt,不管什么格式统一转换为btcusdt这种,比如t_trade_binance_btcusdt
TABLE t_trade_xxx_yyy:
dt -->类型:64位正整数. 备注:表示我们自己的采集程序记录时间距离 Unix新纪元(1970年1月1日)的毫秒数
tradedt -->类型:64位正整数. 备注:表示交易所记录的成交时间距离 Unix新纪元(1970年1月1日)的毫秒数
tradeprice -->类型:float. 备注:成交价
volume -->类型:float. 备注:成交量
amount -->类型:float. 备注:成交额
direction -->类型:字符串. 备注:主买还是主卖,BUY或者SELL
=================================================================================================================================
#自合成k线记录表, xxx是交易所名称 yyy是`符号对`,比如同一个`符号对`有些交易所是 btc/usdt,有些是btc_usdt,有些是btcusdt,不管什么格式统一转换为btcusdt这种,比如t_kline_1min_binance_btcusdt
TABLE t_kline_1min_xxx_yyy (如果是五分钟k线的话就是t_kline_5min_xxx_yyy,如果是十秒钟k线的话就是t_kline_10s_xxx_yyy):
begin_dt -->类型:64位正整数. 备注:表示bar开盘时间距离 Unix新纪元(1970年1月1日)的毫秒数
end_dt -->类型:64位正整数. 备注:表示bar收盘时间距离 Unix新纪元(1970年1月1日)的毫秒数
open -->类型:float. 备注:开盘价
high -->类型:float. 备注:最高价
low -->类型:float. 备注:最低价
close -->类型:float. 备注:收盘价
avg_price -->类型:float. 备注:k线内加权平均价
buy_avg_price -->类型:float. 备注:k线内主买加权平均价
sell_avi_price -->类型:float. 备注:k线内主卖加权平均价
open_avg -->类型:float. 备注:开盘一段时间加权平均价
close_avg -->类型:float. 备注:收盘一段时间加权平均价
volume -->类型:float. 备注:成交量
amount -->类型:float. 备注:成交额
book_count -->类型:正整数. 备注:成交笔数
buy_book_count -->类型:正整数,备注:主动买成交笔数
sell_book_count -->类型:正整数,备注:主动卖成交笔数
buy_volume -->类型:float. 备注:主动买入的成交量
buy_amount -->类型:float. 备注:主动买入的成交额
sell_volume -->类型:float. 备注:主动卖出的成交量
sell_amount -->类型:float. 备注:主动卖出的成交额
sectional_high -->类型:float. 备注:今日开盘到现在最高价
sectional_low -->类型:float. 备注:今日开盘到现在最低价
sectional_volume -->类型:float. 备注:今日开盘到此时总成交量
sectional_amount -->类型:float. 备注:今日开盘到此时总成交额
sectional_avg_price -->类型:float. 备注:今日开盘到此时加权平均价
sectional_book_count -->类型:正整数. 备注:今日开盘到此时总成交笔数
sectional_buy_book_count -->类型:正整数. 备注:今日开盘到此时主动买总成交笔数
sectional_sell_book_count -->类型:正整数. 备注:今日开盘到此时主动卖总成交笔数
sectional_buy_volume -->类型:float. 备注:今日开盘到此时主动买入的成交量
sectional_buy_amount -->类型:float. 备注:今日开盘到此时主动买入的成交额
sectional_buy_avg_price -->类型:float. 备注:今日开盘到此时主买加权平均价
sectional_sell_volume -->类型:float. 备注:今日开盘到此时主动卖出的成交量
sectional_sell_amount -->类型:float. 备注:今日开盘到此时主动卖出的成交额
sectional_sell_avg_price -->类型:float. 备注:今日开盘到此时主卖加权平均价
prev_close_price -->类型:float. 备注:前一天收盘价
next_price -->类型:float. 备注:下一个Kline的open_avg
prev_price -->类型:float. 备注:前一个Kline的close_avg
lead_ret -->类型:float. 备注:相对于本bar,未来一个收益率
lag_ret -->类型:float. 备注:相对于本bar,之前一个收益率
open_avg_fillna -->类型:float. 备注:如果open_avg为0.0,那么赋值open
close_avg_fillna -->类型:float. 备注:如果close_avg为0.0,那么赋值close
next_price_fillna -->类型:float. 备注:下一个Kline的open_avg_fillna
prev_price_fillna -->类型:float. 备注:前一个Kline的close_avg_fillna
lead_ret_fillna -->类型:float. 备注:相对于本bar,未来一个收益率
lag_ret_fillna -->类型:float. 备注:相对于本bar,之前一个收益率
usable: True if volume>0 else False
==================================================================================================================================
#符号的相关信息
TABLE t_symbol_info:
platform -->类型:字符串. 交易所名称
symbol -->类型:字符串. 备注:交易符号,如BTC/USDT, ETH/BTC
price_tick -->类型:float. 备注:`报价`每一跳的最小单位,也可以理解为`报价`精度或者`报价`增量
size_tick -->类型:float. 备注:`下单量`每一跳的最小单位,也可以理解为`下单量`精度或者`下单量`增量
size_limit -->类型:float. 备注:最小`下单量` (`下单量`指当订单类型为`限价单`或`sell-market`时,下单接口传的'quantity')
value_tick -->类型:float. 备注:`下单金额`每一跳的最小单位,也可以理解为`下单金额`精度或者`下单金额`增量
value_limit -->类型:float. 备注:最小`下单金额` (`下单金额`指当订单类型为`限价单`时,下单接口传入的(quantity * price).当订单类型为`buy-market`时,下单接口传的'quantity')
base_currency -->类型:字符串. 备注:交易对中的基础币种
quote_currency -->类型:字符串. 备注:交易对中的报价币种
settlement_currency -->类型:字符串. 备注:交易对中的结算币种
symbol_type -->类型:字符串. 备注:符号类型,"spot"=现货,"future"=期货
is_inverse -->类型:bool. 备注:如果是期货的话,是否是反向合约
multiplier -->类型:float. 备注:合约乘数,合约大小
==================================================================================================================================
# 关于计算
1. Kline时间隔点划分:
10s: 00:00:00.000 - 00:00:9.999 (这一根k线的begin_dt就是由00:00:00.000换算过来,end_dt就是由00:00:9.999换算过来)
00:00:10.000 - 00:00:19.999
......
1min: 00:00:00.000 - 00:00:59.999
00:01:00.000 - 00:01:59.999
......
5min: 00:00:00.000 - 00:04:59.999
00:05:00.000 - 00:09:59.999
......
2. open = 当根k线从begin_dt开始之后的第一笔trade数据的tradeprice
3. high = max(当根k线从begin_dt到end_dt之间的所有trade数据的tradeprice列表)
4. low = min(当根k线从begin_dt到end_dt之间的所有trade数据的tradeprice列表)
5. close = 当根k线end_dt之前的最后一笔trade数据的tradeprice
6. avg_price = 这根k线之内,所有trade数据的amount之和 / 所有trade数据的volume之和
7. buy_avg_price = 这根k线之内,所有主买trade数据的amount之和 / 所有trade数据的volume之和
8. sell_avg_price = 这根k线之内,所有主卖trade数据的amount之和 / 所有trade数据的volume之和
9. open_avg:
10s: 这根k线前2秒的trade数据拿出来(比如:00:00:00.000 - 00:00:1.999),
即 begin_dt <= t < begin_dt + 2 * 1000
open_avg = 所有trade数据的amount之和 / 所有trade数据的volume之和
open_avg_check = sum(trade price * volume) / sum(volume)
1min: 这根k线前12秒的trade数据拿出来(比如:00:00:00.000 - 00:00:11.999),
即 begin_dt <= t < begin_dt + 12 * 1000
open_avg = 所有trade数据的amount之和 / 所有trade数据的volume之和
open_avg_check = sum(trade price * volume) / sum(volume)
5min: 这根k线前1分钟的trade数据拿出来(比如:00:00:00.000 - 00:00:59.999),
即 begin_dt <= t < begin_dt + 1 * 60 * 1000
begin_dt <= t < begin_dt + 1 * 60 * 1000
open_avg = 所有trade数据的amount之和 / 所有trade数据的volume之和
open_avg_check = sum(trade price * volume) / sum(volume)
10. close_avg:
10s: 这根k线后2秒的trade数据拿出来(比如:00:00:8.000 - 00:00:9.999),
即 begin_dt + 8 * 1000 <= t < begin_dt + 10 * 1000
close_avg = 所有trade数据的amount之和 / 所有trade数据的volume之和
close_avg_check = sum(trade price * volume) / sum(volume)
1min: 这根k线后12秒的trade数据拿出来(比如:00:00:48.000 - 00:00:59.999),
即 begin_dt + 48 * 1000 <= t < begin_dt + 60 * 1000
close_avg = 所有trade数据的amount之和 / 所有trade数据的volume之和
close_avg_check = sum(trade price * volume) / sum(volume)
5min: 这根k线后1分钟的trade数据拿出来(比如:00:04:00.000 - 00:04:59.999),
即 begin_dt + 4 * 60 * 1000 <= t < begin_dt + 5 * 60 * 1000
close_avg = 所有trade数据的amount之和 / 所有trade数据的volume之和
close_avg_check = sum(trade price * volume) / sum(volume)
11. volume = begin_dt 和 end_dt之间的所有trade数据的volume之和
12. amount = begin_dt 和 end_dt之间的所有的trade数据的amount之和
amount_check = sum(trade price * volume)
13. book_count = begin_dt 和 end_dt之间的所有trade数据的数据个数
14. buy_book_count = begin_dt 和 end_dt之间的所有方向主买的trade数据的数据个数
15. sell_book_count = begin_dt 和 end_dt之间的所有方向主卖的trade数据的数据个数
16. buy_volume = begin_dt 和 end_dt之间的所有trade数据的主买方向的volume之和
17. buy_amount = begin_dt 和 end_dt之间的所有trade数据的主买方向的amount之和
18. sell_volume = begin_dt 和 end_dt之间的所有trade数据的主卖方向的volume之和
19. sell_amount = begin_dt 和 end_dt之间的所有trade数据的主卖方向的amount之和
20. sectional_high = max(今日开盘至现在,所有k线的high)
21. sectional_low = min(今日开盘至现在,所有k线的low)
22. sectional_volume = 今日开盘至现在,所有k线volume之和
23. sectional_amount = 今日开盘至现在,所有k线amount之和
24. sectional_buy_volume = 今日开盘至现在,所有k线buy_volume之和
25. sectional_sell_volume = 今日开盘至现在,所有k线sell_volume之和
26. sectional_buy_amount = 今日开盘至现在,所有k线buy_amount之和
27. sectional_sell_amount = 今日开盘至现在,所有k线sell_amount之和
28. sectional_avg_price = 今日开盘到此时加权平均价, sectional_amount / sectional_volume
29. sectional_buy_avg_price = 今日开盘到此时主买加权平均价, sectional_buy_amount / sectional_buy_volume
30. sectional_sell_avg_price = 今日开盘到此时主卖加权平均价, sectional_sell_amount / sectional_sell_volume
31. sectional_book_count = 今日开盘至现在,所有k线book_count之和
32. sectional_buy_book_count = 今日开盘至现在,所有k线buy_book_count之和
33. sectional_sell_book_count = 今日开盘至现在,所有k线sell_book_count之和
34. prev_close_price = 前一天收盘前最后一笔trade数据的tradeprice
35. next_price = 下一根k线的open_avg
36. prev_price = 上一根k线的close_avg
37. lead_ret = log(next_price / open_avg)
38. lag_ret = log(close_avg / prev_price)
39. usable = True if volume > 0 else False
40. open_avg_fillna = open_avg if open_avg != 0 else open
41. close_avg_fillna = close_avg if close_avg != 0 else close
42. next_price_fillna = 下一根k线的open_avg_fillna
43. prev_price_fillna = 上一根k线的close_avg_fillna
44. lead_ret_fillna = log(next_price_fillna / open_avg_fillna)
45. lag_ret_fillna = log(close_avg_fillna / prev_price_fillna)
#=================================================================================================================================
一些备注:
1.对于数字货币,每天00:00:00.000算是开盘时间, 23:59:59.999收盘
2.对于日期时间等,为了普适性,统一转换成unix时间戳用64位整数类型进行保存,不使用任何数据库自带的datetime类型,另外交易所分布世界各地,统计时间统一使用东八区时间
3.数据库表名,字段名等统一小写
4.我们的binance的数据中,trade数据里面,他的amount字段,其实对应的是我们的volume,它没有我们所说的amount
5.自合成K线表存放于名称为db_custom_kline数据库中, 而所有其他表都保存在名称为db_market的数据库中,数据库采用mongodb,数据库术语对比:
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 表/集合
row document 行/文档
column field 字段/域
index index 索引
primary_key primary_key 主键,MongoDB自动将_id字段设置为主键
6.在kline合成过程中,如果对应kline时间段内没有成交量,那么我们也会生成这个kline,只需要在usable这个字段标识它是否可用
同时,对于不可用的这个kline里的其他字段取值,方法如下:
begin_dt -->类型:64位正整数. 正常
end_dt -->类型:64位正整数. 正常
open -->类型:float. 备注:开盘价,没有成交量0.0
high -->类型:float. 备注:最高价,没有成交量0.0
low -->类型:float. 备注:最低价,没有成交量0.0
close -->类型:float. 备注:收盘价,没有成交量0.0
avg_price -->类型:float. 备注:k线内加权平均价,没有成交量0.0
buy_avg_price -->类型:float. 备注:k线内主买加权平均价,如果完全没有成交量,0.0,如果有一些成交量,但是都是主动卖,那么该字段也是0.0,否则正常
sell_avg_price -->类型:float. 备注:k线内主卖加权平均价,如果完全没有成交量,0.0,如果有一些成交量,但是都是主动买,那么该字段也是0.0,否则正常
open_avg -->类型:float. 备注:开盘一段时间加权平均价,没有成交量0.0
close_avg -->类型:float. 备注:收盘一段时间加权平均价,没有成交量0.0
volume -->类型:float. 备注:成交量,没有成交量0.0
amount -->类型:float. 备注:成交额,没有成交量0.0
book_count -->类型:正整数. 备注:成交笔数,没有成交量0
buy_book_count -->类型:正整数,备注:主动买成交笔数,如果是完全没有成交量,0,如果有一些成交量,但是都是主动卖,也是0,否则正常
sell_book_count -->类型:正整数,备注:主动卖成交笔数,如果是完全没有成交量,0,如果有一些成交量,但是都是主动买,也是0,否则正常
buy_volume -->类型:float. 备注:主动买入的成交量,0.0,如果有一些成交量,但是都是主动卖,也是0.0,否则正常
buy_amount -->类型:float. 备注:主动买入的成交额,0.0,如果有一些成交量,但是都是主动卖,也是0.0,否则正常
sell_volume -->类型:float. 备注:主动卖出的成交量,0.0,如果有一些成交量,但是都是主动买,也是0.0,否则正常
sell_amount -->类型:float. 备注:主动卖出的成交额,0.0,如果有一些成交量,但是都是主动卖,也是0.0,否则正常
sectional_high -->类型:float. 备注:今日开盘到现在最高价,如果没有成交量,顺延上根k线的该字段值,否则正常
sectional_low -->类型:float. 备注:今日开盘到现在最低价,如果没有成交量,顺延上根k线的该字段值,否则正常
sectional_volume -->类型:float. 备注:今日开盘到此时总成交量,如果没有成交量,顺延上根k线的该字段值,否则正常
sectional_amount -->类型:float. 备注:今日开盘到此时总成交额,如果没有成交量,顺延上根k线的该字段值,否则正常
sectional_avg_price -->类型:float. 备注:今日开盘到此时加权平均价,如果没有成交量,顺延上根k线的该字段值,否则正常
sectional_buy_avg_price -->类型:float. 备注:今日开盘到此时主买加权平均价,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主卖,也顺延上一根,否则正常
sectional_sell_avg_price -->类型:float. 备注:今日开盘到此时主卖加权平均价,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主买,也顺延上一根,否则正常
sectional_book_count -->类型:正整数. 备注:今日开盘到此时总成交笔数,如果没有成交量,顺延上根k线的该字段值,否则正常
sectional_buy_book_count -->类型:正整数. 备注:今日开盘到此时主动买总成交笔数,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主卖,也顺延上一根,否则正常
sectional_sell_book_count -->类型:正整数. 备注:今日开盘到此时主动卖总成交笔数,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主买,也顺延上一根,否则正常
sectional_buy_volume -->类型:float. 备注:今日开盘到此时主动买入的成交量,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主卖,也顺延上一根,否则正常
sectional_buy_amount -->类型:float. 备注:今日开盘到此时主动买入的成交额,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主卖,也顺延上一根,否则正常
sectional_sell_volume -->类型:float. 备注:今日开盘到此时主动卖出的成交量,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主买,也顺延上一根,否则正常
sectional_sell_amount -->类型:float. 备注:今日开盘到此时主动卖出的成交额,如果没有成交量,顺延上根k线的该字段值,如果有一些成交量,但是只是主买,也顺延上一根,否则正常
prev_close_price -->类型:float. 备注:前一天收盘价,如果前一天没有价格,这根k线该字段设为0.0
next_price -->类型:float. 备注:下一个Kline的open_avg,有异常,设为0.0
prev_price -->类型:float. 备注:前一个Kline的close_avg,有异常,设为0.0
lead_ret -->类型:float. 备注:相对于本bar,未来一个收益率,有异常,设为空值
lag_ret -->类型:float. 备注:相对于本bar,之前一个收益率,有异常,设为空值
usable: True if volume>0 else False
7. 原则上来说,价格出现异常,设为0.0,成交量或者成交额出现异常,设为0,return出现异常,设为空值