from l2 import l2_data_source_util
|
from l2.l2_data_util import local_today_datas, local_today_canceled_buyno_map, L2DataUtil
|
|
|
class L2DataComputeUtil:
|
"""
|
L2数据计算帮助类
|
"""
|
|
@classmethod
|
def compute_left_buy_order(cls, code, start_index, end_index, limit_up_price, min_money=500000):
|
"""
|
计算剩下的委托买单
|
@param code: 代码
|
@param start_index:起始索引(包含)
|
@param end_index: 结束索引(包含)
|
@param limit_up_price: 涨停价
|
@param min_money: 最小的资金
|
@return:笔数,手数
|
"""
|
min_volume = min_money // int(limit_up_price * 100)
|
total_datas = local_today_datas.get(code)
|
canceled_buyno_map = local_today_canceled_buyno_map.get(code)
|
total_count = 0
|
total_num = 0
|
for i in range(start_index, end_index + 1):
|
data = total_datas[i]
|
val = data['val']
|
if not L2DataUtil.is_limit_up_price_buy(val):
|
continue
|
if val['num'] < min_volume:
|
continue
|
left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i,
|
total_datas,
|
canceled_buyno_map)
|
if left_count > 0:
|
total_count += 1
|
total_num += val["num"]
|
return total_count, total_num
|
|
@classmethod
|
def compute_end_index(cls, code, start_index, end_index, limit_up_price, max_count, min_money=500000):
|
"""
|
计算结束索引
|
@param code: 代码
|
@param start_index:起始索引(包含)
|
@param end_index: 结束索引(包含)
|
@param limit_up_price: 涨停价
|
@param max_count: 最大数量
|
@param min_money: 最小的资金
|
@return:结束索引
|
"""
|
min_volume = min_money // int(limit_up_price * 100)
|
total_datas = local_today_datas.get(code)
|
canceled_buyno_map = local_today_canceled_buyno_map.get(code)
|
total_count = 0
|
for i in range(start_index, end_index + 1):
|
data = total_datas[i]
|
val = data['val']
|
if not L2DataUtil.is_limit_up_price_buy(val):
|
continue
|
if val['num'] < min_volume:
|
continue
|
left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i,
|
total_datas,
|
canceled_buyno_map)
|
if left_count > 0:
|
total_count += 1
|
if total_count >= max_count:
|
return i
|
return end_index
|
|
@classmethod
|
def is_canceled(cls, code, index, total_datas, canceled_buyno_map, trade_index, deal_order_nos):
|
"""
|
是否已经撤单
|
@param deal_order_nos: 成交大单集合
|
@param trade_index: 成交进度位
|
@param index: 索引
|
@param code: 代码
|
@param total_datas:
|
@param canceled_buyno_map:撤单的订单号
|
@return:
|
"""
|
cancel_data = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_canceled_data_v2(code, index,
|
total_datas,
|
canceled_buyno_map)
|
if cancel_data:
|
# 已经撤单
|
return cancel_data
|
else:
|
if trade_index and trade_index > index:
|
# 成交进度大于索引位置,且还没成交
|
if total_datas[index]["val"]["orderNo"] not in deal_order_nos:
|
return total_datas[index]
|
return None
|