| | |
| | | from trade.huaxin_trade_record_manager import PositionManager, DelegateSellOrderManager |
| | | from trade.l2_data_manager import L2TransactionDataManager |
| | | from trade.sell_rule_manager import TradeRuleManager, SellRule |
| | | from utils import outside_api_command_manager, middle_api_protocol, tool, huaxin_util, socket_util, cb_data_util |
| | | from utils import outside_api_command_manager, middle_api_protocol, tool, huaxin_util, socket_util, cb_data_util, \ |
| | | kpl_data_manager |
| | | from utils.outside_api_command_manager import ActionCallback |
| | | import concurrent.futures |
| | | |
| | |
| | | else: |
| | | raise e |
| | | |
| | | elif ctype == "get_deal_queue": |
| | | # 获取成交队列 |
| | | code = data["code"] |
| | | try: |
| | | fdata = {} |
| | | # 获取已经成交的大单 |
| | | buy_order_info_list = L2TransactionDataManager().get_big_buy_orders(code) |
| | | if buy_order_info_list is None: |
| | | buy_order_info_list = [] |
| | | MAX_COUNT = 50 |
| | | buy_order_info_list = buy_order_info_list[0 - MAX_COUNT:] |
| | | # (类型,订单号,时间,量, 金额, 价格, 成交比例百分数) |
| | | fdata["deal_list"] = [(0, x[0], l2_huaxin_util.convert_time(x[3]), x[1], x[2], str(x[4]), 100) for x in |
| | | buy_order_info_list] |
| | | dealing_buy_order_info = L2TransactionDataManager().get_dealing_buy_order(code) |
| | | if dealing_buy_order_info: |
| | | buyno_map = local_today_buyno_map.get(code) |
| | | data = buyno_map.get(f"{dealing_buy_order_info[0]}") |
| | | if data: |
| | | # (类型, 订单号, 时间, 量, 金额, 价格, 成交比例百分数) |
| | | fdata["dealing"] = (0, dealing_buy_order_info[0], data["val"]["time"], data["val"]["num"] * 100, |
| | | int(data["val"]["num"] * float(data["val"]["price"]) * 100), |
| | | data["val"]["price"], |
| | | int(round(dealing_buy_order_info[1] / data["val"]["num"]))) |
| | | self.send_response({"code": 0, "data": fdata}, client_id, request_id) |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | raise e |
| | | |
| | | |
| | | class L1DataProcessor: |
| | | # L1数据更新时间 |
| | |
| | | # L1DataProcessor.excute_sell_rule(code, buy1_info[3], buy1_info[1], "l2-real") |
| | | |
| | | |
| | | def __sell_for_last_day_break_limit_up(): |
| | | """ |
| | | 卖前一天的炸板 |
| | | :return: |
| | | """ |
| | | try: |
| | | # 获取所有当前持仓 |
| | | codes = PositionManager.get_position_codes() |
| | | |
| | | yesterday_limit_up_codes = kpl_data_manager.KPLLimitUpDataManager().get_yesterday_limit_up_codes() |
| | | for code in codes: |
| | | if code in yesterday_limit_up_codes: |
| | | # 昨日涨停 |
| | | continue |
| | | # 获取当前价格 |
| | | price = L2DataProcessor.get_deal_price(code) |
| | | if not price: |
| | | continue |
| | | pre_close_price = gpcode_manager.get_price_pre_cache(code) |
| | | pre_close_price = round(float(pre_close_price), 2) |
| | | rate = round((price - pre_close_price) * 100 / pre_close_price, 2) |
| | | # 获取现有持仓 |
| | | avaiable_volume = PositionManager.get_code_volume_cache(code) |
| | | |
| | | orders = [] |
| | | big_orders = L2TransactionDataManager().get_big_buy_orders(code) |
| | | if big_orders: |
| | | for o in big_orders: |
| | | if o[2] >= 299e4: |
| | | orders.append(o) |
| | | logger_debug.info("昨日炸板,今日开盘信息:代码-{},开盘价-【{}】,涨幅-【{}】,持仓-【{}】,成交大单数量-【{}】", code, price, rate, avaiable_volume, |
| | | len(orders)) |
| | | if rate <= -2: |
| | | sell_volume_rate = 1 |
| | | elif rate <= 0: |
| | | sell_volume_rate = 0.8 |
| | | elif rate <= 2: |
| | | if len(orders) >= 1: |
| | | sell_volume_rate = 0.5 |
| | | else: |
| | | sell_volume_rate = 0.6 |
| | | else: |
| | | if len(orders) >= 1: |
| | | sell_volume_rate = 0.4 |
| | | else: |
| | | sell_volume_rate = 0.6 |
| | | sell_volume = int(round((avaiable_volume // 100) * sell_volume_rate)) |
| | | logger_debug.info("昨日炸板,卖出信息:code-{},卖出比例-【{}】,卖出量-【{}】", sell_volume_rate, sell_volume) |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | |
| | | |
| | | # 做一些初始化的操作 |
| | | def __init(): |
| | | def run_pending(): |
| | |
| | | time.sleep(10) |
| | | huaxin_trade_data_update.add_position_list() |
| | | |
| | | l2_data_util.load_l2_data_all() |
| | | |
| | | # 定时持仓刷新 |
| | | schedule.every().day.at("09:00:00").do(huaxin_trade_data_update.add_position_list) |
| | | schedule.every().day.at("09:10:00").do(huaxin_trade_data_update.add_position_list) |
| | | schedule.every().day.at("09:15:00").do(huaxin_trade_data_update.add_position_list) |
| | | schedule.every().day.at("09:26:00").do(__sell_for_last_day_break_limit_up) |
| | | threading.Thread(target=run_pending, daemon=True).start() |
| | | threading.Thread(target=request_position, daemon=True).start() |
| | | |