Skip to content

Commit dba8e9a

Browse files
committed
计算仓单“开平”字段函数
1 parent ce7f92e commit dba8e9a

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

tqsdk/tafunc_tick_msg.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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

Comments
 (0)