def tick_zhishu(ls):
"""
从数据库中读取合约后,合成约指数最新价,用于合成指数合约k线,采用持仓量加权
:param ls: 本合约有持仓持仓量的所有合约列表,
:return: 指数化后的最新价,成交量和,持仓量和
"""
chicanglianghe = 0 # 持仓量之和
chengjiaolianghe = 0 # 成交量之和
jcsj = [] # 临时变量用于储存每个合约的最新价
ccl = [] # 临时变量用于存放每个合约的持仓量
for ss in ls: # 循环所有合约
try:
lsbl = DuquRedis_HQ(ss) # 获取当前合约的tick数据
chicanglianghe += float(lsbl['OpenInterest']) # 所有合约持仓量之和
chengjiaolianghe += float(lsbl['Volume']) # 所有合约成交量之和
jcsj.append(float(lsbl['LastPrice'])) # 保存当前合约最新价
ccl.append(float(lsbl['OpenInterest'])) # 保存当前合约持仓量
except:
# print(ss, '没有此合约数据,请订阅')
pass
# shijian = DuquRedis_hangqing(ls[0])['UpdateTime'] # 获取主力合约时间
# 指数算法公式:sum(每个品种价格*持仓量/所有合约总持仓量)
zuixinjia = round((np.array(jcsj)*np.array(ccl)/chicanglianghe).sum(), 1) # 计算指数最新价
# print(zuixinjia)
return chicanglianghe, chengjiaolianghe, zuixinjia
|