| | |
| | | # D撤单 |
| | | # 守护时间 |
| | | D_CANCEL_EXPIRE_TIME = 120 |
| | | D_CANCEL_RATE = 0.5 |
| | | D_CANCEL_RATE = 0.8 |
| | | |
| | | # L撤 |
| | | # L撤下单之后多久开始守护 |
| | |
| | | l2_log.debug(code, "执行买入成功") |
| | | ################下单成功处理################ |
| | | trade_result_manager.real_buy_success(code, cls.__TradePointManager) |
| | | cancel_buy_strategy.set_real_place_position(code, local_today_datas.get(code)[-1]["index"], |
| | | buy_single_index) |
| | | l2_log.debug(code, "处理买入成功") |
| | | params_desc = cls.__l2PlaceOrderParamsManagerDict[code].get_buy_rank_desc() |
| | | l2_log.debug(code, params_desc) |
| | |
| | | total_data = local_today_datas.get(code) |
| | | trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code) |
| | | if not is_default and trade_index: |
| | | buy_index_set = set() |
| | | not_cancel_num = 0 |
| | | num_operate_map = local_today_num_operate_map.get(code) |
| | | for i in range(trade_index + 1, total_data[-1]["index"] + 1): |
| | | if L2DataUtil.is_limit_up_price_buy(total_data[i]["val"]): |
| | |
| | | total_data, |
| | | num_operate_map) |
| | | if left_count > 0: |
| | | buy_index_set.add(total_data[i]["index"]) |
| | | |
| | | if len(buy_index_set) < 5: |
| | | return False, False, f"成交位置距离当前位置小于5笔" |
| | | not_cancel_num += total_data[i]["val"]["num"] |
| | | m = cls.__get_threshmoney(code) |
| | | not_cancel_money = not_cancel_num * 100 * float(gpcode_manager.get_limit_up_price(code)) |
| | | if cls.__get_threshmoney(code) > not_cancel_money: |
| | | return False, False, f"成交位置距离当前位置纯买额({not_cancel_money})小于m值({m})" |
| | | else: |
| | | # 判断买1价格档位 |
| | | zyltgb = global_util.zyltgb_map.get(code) |
| | |
| | | |
| | | @classmethod |
| | | def __get_threshmoney(cls, code): |
| | | return cls.__l2PlaceOrderParamsManagerDict[code].get_m_val() |
| | | m = cls.__l2PlaceOrderParamsManagerDict[code].get_m_val() |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_manager.TRADE_STATE_NOT_TRADE: |
| | | # 首次下单m值扩大1.5倍 |
| | | m = int(m * 1.5) |
| | | return m |
| | | |
| | | # 计算万手哥笔数 |
| | | @classmethod |
| | |
| | | global_data_loader.init() |
| | | |
| | | # # 数据服务 |
| | | # t1 = threading.Thread(target=createDataServer, name="createDataServer", daemon=True) |
| | | # t1.start() |
| | | t1 = threading.Thread(target=createDataServer, name="createDataServer", daemon=True) |
| | | t1.start() |
| | | # |
| | | # 交易接口服务 |
| | | # t1 = threading.Thread(target=trade_api_server.run, name="trade_api_server", args=(pipe_server, pipe_l2), daemon=True) |
| | | # t1.start() |
| | | t1 = threading.Thread(target=trade_api_server.run, name="trade_api_server", args=(pipe_server, pipe_l2), daemon=True) |
| | | t1.start() |
| | | # |
| | | # redis后台服务 |
| | | # t1 = threading.Thread(target=redis_manager.RedisUtils.run_loop, name="redis", daemon=True) |
| | | # t1.start() |
| | | t1 = threading.Thread(target=redis_manager.RedisUtils.run_loop, name="redis", daemon=True) |
| | | t1.start() |
| | | # |
| | | # # 启动L2订阅服务 |
| | | # 启动L2订阅服务 |
| | | t1 = threading.Thread(target=huaxin_client.l2_client.run, name="l2_client", args=(ptl2_l2, psl2_l2, trade_server.my_l2_data_callback), |
| | | daemon=True) |
| | | t1.start() |
| | | # |
| | | # # 启动华鑫交易服务 |
| | | # t1 = threading.Thread(target=huaxin_client.trade_client.run, name="trade_client", |
| | | # args=(trade_server.my_trade_response, ptl2_trade, pst_trade), |
| | | # daemon=True) |
| | | # t1.start() |
| | | # 启动华鑫交易服务 |
| | | t1 = threading.Thread(target=huaxin_client.trade_client.run, name="trade_client", |
| | | args=(trade_server.my_trade_response, ptl2_trade, pst_trade), |
| | | daemon=True) |
| | | t1.start() |
| | | |
| | | # 交易服务 |
| | | trade_server.run(pipe_trade, pipe_l1, pipe_l2, huaxin_client.trade_client.process_cmd) |