"""
|
L2数据输出工具
|
"""
|
from l2 import l2_data_util, l2_data_source_util
|
from l2.l2_data_util import L2DataUtil, local_today_canceled_buyno_map
|
from l2.l2_transaction_data_manager import HuaXinBuyOrderManager
|
from l2.transaction_progress import TradeBuyQueue
|
|
|
def __get_trade_queue(code, start_index, end_index, real_place_order_index, max_count, step=1):
|
fresults = []
|
# 正在成交的数据
|
dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code)
|
total_datas = l2_data_util.local_today_datas.get(code)
|
for i in range(start_index, end_index, step):
|
# 真实下单位置不管是否撤单都需要加入队列
|
data = total_datas[i]
|
val = data['val']
|
if not L2DataUtil.is_limit_up_price_buy(val):
|
continue
|
if val["num"] * float(val['price']) < 5000 and real_place_order_index != i:
|
continue
|
left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i,
|
total_datas,
|
local_today_canceled_buyno_map.get(
|
code))
|
if left_count > 0 or real_place_order_index == i:
|
type_ = 0
|
num = val['num']
|
if dealing_info and str(total_datas[i]["val"]["orderNo"]) == str(
|
dealing_info[0]):
|
# 减去当前正在成交的数据中已经成交了的数据
|
num -= dealing_info[1] // 100
|
if i == real_place_order_index:
|
type_ = 1
|
has_real_order_index = True
|
elif num * float(val['price']) >= 29900:
|
type_ = 2
|
|
fresults.append((num, type_))
|
if len(fresults) > max_count:
|
break
|
return fresults
|
|
|
def get_trade_queue_at_near_place_order(code, real_place_order_index, max_count):
|
"""
|
获取真实下单位附近的成交队列
|
@param code:
|
@param real_place_order_index:
|
@param max_count:
|
@return:
|
"""
|
total_datas = l2_data_util.local_today_datas.get(code)
|
trade_index, is_default = TradeBuyQueue().get_traded_index(code)
|
if trade_index is None:
|
trade_index = 0
|
threshold_before_count = max_count // 2
|
|
fresults = __get_trade_queue(code, real_place_order_index, trade_index - 1, real_place_order_index,
|
threshold_before_count, -1)
|
fresults.reverse()
|
fresults.extend(
|
__get_trade_queue(code, real_place_order_index + 1, total_datas[-1]['index'] + 1, real_place_order_index,
|
max_count - threshold_before_count, 1))
|
return fresults
|
|
|
def get_trade_queue(code, real_place_order_index, max_count):
|
"""
|
获取真实下单位附近的成交队列
|
@param code:
|
@param real_place_order_index:
|
@param max_count:
|
@return:
|
"""
|
total_datas = l2_data_util.local_today_datas.get(code)
|
trade_index, is_default = TradeBuyQueue().get_traded_index(code)
|
if trade_index is None:
|
trade_index = 0
|
# 前面最多取5条数据
|
fresults = []
|
fresults.extend(
|
__get_trade_queue(code, trade_index, total_datas[-1]['index'] + 1, real_place_order_index, max_count, 1))
|
return fresults
|