1
+ __author__ = 'y.m.wong'
2
+ import pandas as pd
3
+ """
4
+ 由https://github.com/shinnytech/shinny-futures-web/blob/master/src/components/TicksList.vue改写而来
5
+ """
6
+
7
+ def cal_pc (tick :dict ) -> int :
8
+ """
9
+ 计算tick前后的pc值(可能是判断多空方向)
10
+ :param tick: 当前tick
11
+ :return: pc值
12
+ """
13
+
14
+ pc = 0
15
+ if tick ['trade_ask_spread' ] >= 0 :
16
+ pc = 1
17
+ elif tick ['trade_bid_spread' ] >= 0 :
18
+ pc = - 1
19
+ else :
20
+ if tick ['price_diff' ] > 0 :
21
+ pc = 1
22
+ elif tick ['price_diff' ] < 0 :
23
+ pc = - 1
24
+ else :
25
+ pc = 0
26
+ return pc
27
+
28
+ def cal_msg (tick :dict ) -> str :
29
+ """
30
+ 根据tick信息计算成交性质
31
+ :param tick: 当前tick
32
+ :return: string 成交性质
33
+ """
34
+ msg = ''
35
+ if tick ['oi_diff' ] > 0 and tick ['oi_diff' ] == tick ['vol_diff' ]:
36
+ msg = '双开'
37
+ elif tick ['oi_diff' ] < 0 and tick ['oi_diff' ] + tick ['vol_diff' ] == 0 :
38
+ msg = '双平'
39
+ else :
40
+ if tick ['pc' ] == 0 :
41
+ msg = '换手'
42
+ else :
43
+ msg = ('多' if tick ['pc' ] > 0 else '空' ) + ('开' if tick ['oi_diff' ] > 0 else '平' if tick ['oi_diff' ] < 0 else '换' )
44
+ return msg
45
+
46
+ def cal_ticks_msg (ticks : pd .Series ) -> pd .DataFrame :
47
+ """
48
+ 主函数:计算仓单“开平”字段
49
+ """
50
+ ticks_ex = pd .DataFrame ()
51
+ ticks_ex ['datetime' ] = ticks ["datetime" ]
52
+ ticks_ex ['vol_diff' ] = ticks ["volume" ].diff ()
53
+ ticks_ex ['oi_diff' ] = ticks ["open_interest" ].diff ()
54
+ ticks_ex ['price_diff' ] = ticks ["last_price" ].diff ()
55
+ ticks_ex ['trade_ask_spread' ] = ticks ["last_price" ] - ticks ["ask_price1" ].shift (1 )
56
+ ticks_ex ['trade_bid_spread' ] = ticks ["last_price" ] - ticks ["bid_price1" ].shift (1 )
57
+ ticks_ex ['pc' ] = ticks_ex .apply (lambda tick : cal_pc (dict (tick )), axis = 1 )
58
+ ticks_ex ['msg' ] = ticks_ex .apply (lambda tick : cal_msg (dict (tick )), axis = 1 )
59
+ return ticks_ex
60
+
61
+ """
62
+ demo:
63
+ from tqsdk import TqApi, TqBacktest, BacktestFinished
64
+ from datetime import datetime
65
+ from tqsdk.tafunc import time_to_datetime
66
+
67
+ api = TqApi(backtest=TqBacktest(datetime(2020,2,11,14,59,55),datetime(2020,2,11,15,00)))
68
+ ticks = api.get_tick_serial('DCE.j2005')
69
+ test = pd.DataFrame()
70
+ while True:
71
+ api.wait_update()
72
+ test = cal_ticks_ex(ticks)
73
+ print(test)
74
+ """
0 commit comments