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
|