很久以前用过Wind的实时行情接口,最近又要开始用的时候,居然一下子忘记怎么用了。所以写个文章做个记录,毕竟网上也没有人写过这个。
Wind的实时行情是通过回调函数来实现的。也就是大框架下,我们是让主程序一直while循环,然后有新的行情到来的时候,wind的API会自动调用我们写好的回调函数。
if __name__ == '__main__':
w.wsq("000002.SZ,2202.HK",
"rt_date,rt_time,rt_last,rt_ask1,rt_bid1,rt_asize1,rt_bsize1", func=AH_raio_calculatte)
while True:
pass
首先,在主程序里面,很明显,就是设置好我们需要的行情内容。这边笔者需要的是万科A和港股的万科企业的实时行情。然后func参数就是我们后面需要写的一个回调函数。
设置完需要的数据和回调函数的名称之后,就把主线程打入死循环即可。
# 回调函数,新的行情来的时候运行
def AH_raio_calculatte(rt_trading_data):
global A_target_pos,H_target_pos
try:
# 获取基本数据,后面进行分解
sec_code = rt_trading_data.Codes
fields_list = rt_trading_data.Fields
rt_data_list = rt_trading_data.Data
if len(sec_code) > 1: # 如果是一开始,很可能两个股票的信息一起过来
if sec_code[0] == A_share_code and sec_code[1] == H_share_code:
for item, content in zip(fields_list, rt_data_list):
A_share_list[name2pos_dict[item]] = content[0]
H_share_list[name2pos_dict[item]] = content[1]
elif sec_code[0] == H_share_code and sec_code[1] == A_share_code:
for item, content in zip(fields_list, rt_data_list):
A_share_list[name2pos_dict[item]] = content[1]
H_share_list[name2pos_dict[item]] = content[0]
elif len(sec_code) == 1: # 仅有一个股票更新,常态的时候,分别拆解更新数据
if sec_code[0] == A_share_code:
for item, content in zip(fields_list, rt_data_list):
A_share_list[name2pos_dict[item]] = content[0]
elif sec_code[0] == H_share_code:
for item, content in zip(fields_list, rt_data_list):
H_share_list[name2pos_dict[item]] = content[0]
except:
......
然后我们需要编写这个名字叫做AH_raio_calculatte的回调函数。在新的行情到来的时候,wind会自动把新的行情数据传递给我们的回调函数,我们的函数要做的事情就是解析一下回调函数中的数据,并实现自己想要的功能。这里,笔者的例子是有两个股票,所以逻辑会稍微复杂一点。建议大家可以自行调试,获得wind传入的数据结构,然后编写获取数据的函数和处理的代码。