| | |
| | | import os |
| | | import time |
| | | |
| | | import dask |
| | | import xlwt |
| | | |
| | | import constant |
| | |
| | | from l2 import l2_data_source_util, l2_data_util |
| | | from log_module.log import logger_debug |
| | | from trade import deal_big_money_manager |
| | | from trade.buy_money_count_setting import BuyMoneyUtil |
| | | from utils import tool |
| | | |
| | | # 缓存L2数据,格式:{"日期":{数据}} |
| | |
| | | |
| | | |
| | | # 获取L2的数据 |
| | | def get_l2_datas(code, today_datas=None, date=None, end_index=None): |
| | | def get_l2_datas(code, today_datas=None, date=None, end_index=None, fast_mode=False): |
| | | """ |
| | | @param code: |
| | | @param today_datas: |
| | | @param date: |
| | | @param end_index: |
| | | @param fast_mode: 是否是急速模式 |
| | | @return: |
| | | """ |
| | | __start_time = time.time() |
| | | if date is None: |
| | | date = tool.get_now_date_str() |
| | |
| | | real_position_indexes = [] |
| | | deal_list = [] |
| | | cancel_reasons = {} |
| | | sell_no_dict = {} |
| | | active_sell_map = {} |
| | | else: |
| | | process_indexs = log_export.get_l2_process_position(code, date) |
| | | trade_indexs = log_export.get_l2_trade_position(code, date) |
| | | real_position_indexes = log_export.get_real_place_order_positions(code, date) |
| | | deal_list = log_export.load_huaxin_deal_record(code, date) |
| | | cancel_reasons = log_export.load_cancel_buy_reasons(code, date) |
| | | if not fast_mode: |
| | | tasks = [dask.delayed(log_export.get_l2_process_position)(code, date), |
| | | dask.delayed(log_export.get_l2_trade_position)(code, date), |
| | | dask.delayed(log_export.get_real_place_order_positions)(code, date), |
| | | dask.delayed(log_export.load_huaxin_deal_record)(code, date), |
| | | dask.delayed(log_export.load_cancel_buy_reasons)(code, date), |
| | | dask.delayed(log_export.load_huaxin_transaction_sell_no)(code, date), |
| | | dask.delayed(log_export.load_huaxin_active_sell_map)(date), |
| | | ] |
| | | results = dask.delayed(tasks).compute() |
| | | process_indexs = results[0] |
| | | trade_indexs = results[1] |
| | | real_position_indexes = results[2] |
| | | deal_list = results[3] |
| | | cancel_reasons = results[4] |
| | | sell_no_dict = results[5] |
| | | active_sell_map = results[6] |
| | | else: |
| | | process_indexs = [] |
| | | trade_indexs = [] |
| | | deal_list = [] |
| | | sell_no_dict = {} |
| | | active_sell_map = {} |
| | | tasks = [dask.delayed(log_export.get_real_place_order_positions)(code, date), |
| | | dask.delayed(log_export.load_cancel_buy_reasons)(code, date), |
| | | ] |
| | | results = dask.delayed(tasks).compute() |
| | | real_position_indexes = results[0] |
| | | cancel_reasons = results[1] |
| | | |
| | | |
| | | deal_list_dict = {} |
| | | for d in deal_list: |
| | | deal_list_dict[str(d[0])] = d |
| | | |
| | | sell_no_dict = log_export.load_huaxin_transaction_sell_no(code=code, date=date) |
| | | sell_nos = sell_no_dict.get(code) |
| | | active_sell_map = log_export.load_huaxin_active_sell_map(date=date) |
| | | active_sell_set = active_sell_map.get(code) |
| | | if not active_sell_set: |
| | | active_sell_set = set() |
| | |
| | | if deal_big_buy_order_list: |
| | | for d in deal_big_buy_order_list: |
| | | deal_big_buy_order_no_dict[d[0]] = d |
| | | |
| | | fdatas = export_l2_data(code, datas, process_indexs, trade_indexs, real_position_indexes, deal_list_dict, sell_nos, |
| | | active_sell_set, cancel_reasons, deal_big_buy_order_no_dict) |
| | | return fdatas |
| | |
| | | fdatas = [] |
| | | # 数据太多就需要过滤掉小金额 |
| | | is_data_too_large = len(datas) > 20000 |
| | | |
| | | limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) |
| | | if limit_up_price: |
| | | # 需要订阅的特殊的量 |
| | | special_volumes = BuyMoneyUtil.get_possible_buy_volumes(limit_up_price) |
| | | special_volumes = [x // 100 for x in special_volumes] |
| | | else: |
| | | special_volumes = [] |
| | | |
| | | for data in datas: |
| | | index += 1 |
| | | if is_data_too_large and data['val']['num'] * float(data['val']['price']) < 5000: |
| | | if data["index"] not in real_position_indexes: |
| | | # 小单 |
| | | if data["index"] not in real_position_indexes and data['val']['num'] not in special_volumes: |
| | | continue |
| | | |
| | | # 先移除 |