Administrator
2023-10-13 fddfc0e7c3b2938f70637e54d214faab478f7ca4
测试影子订单
3个文件已修改
34 ■■■■ 已修改文件
huaxin_client/trade_client.py 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/huaxin/huaxin_delegate_postion_manager.py 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/huaxin_util.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/trade_client.py
@@ -161,7 +161,9 @@
        return
    # 撤买
    def cancel_buy(self, code, sinfo, order_sys_id=None, order_ref=None, order_action_ref=None):
    def cancel_buy(self, code, sinfo, order_sys_id=None, order_ref=None, order_action_ref=None, delay_s=0.0):
        if delay_s > 0:
            time.sleep(delay_s)
        if sinfo in self.__cancel_buy_sinfo_set:
            raise Exception(f'撤单请求已经提交:{sinfo}')
        async_log_util.info(logger_local_huaxin_trade_debug,
@@ -851,6 +853,18 @@
                    # threading.Thread(target=lambda: self.__tradeSimpleApi.buy(code, volume, price, sinfo, order_ref),
                    #                  daemon=True).start()
                    self.trade_thread_pool.submit(self.__tradeSimpleApi.buy, code, volume, price, sinfo, order_ref)
                    # 下一个影子订单
                    shadow_order_ref = order_ref + 1
                    shadow_sinfo = f"s_b_{order_ref}"
                    shadow_price = price - 0.05
                    self.trade_thread_pool.submit(self.__tradeSimpleApi.buy, code, volume, shadow_price, shadow_sinfo,
                                                  shadow_order_ref)
                    # 撤掉影子单
                    shadow_cancel_order_ref = shadow_order_ref + 1
                    self.trade_thread_pool.submit(
                        lambda: self.__tradeSimpleApi.cancel_buy(code, f"s_c_{shadow_order_ref}", order_sys_id=None,
                                                                 order_ref=shadow_order_ref,
                                                                 order_action_ref=shadow_cancel_order_ref, delay_s=0.05))
                    async_log_util.info(logger_trade, f"{code}华鑫本地下单线程结束")
                except Exception as e:
                    send_response(json.dumps({"code": 1, "msg": str(e)}), TYPE_ORDER, client_id,
l2/huaxin/huaxin_delegate_postion_manager.py
@@ -13,17 +13,17 @@
# 下单
def place_order(code, price, volume, data):
def place_order(code, price, volume, data, order_ref):
    async_log_util.info(logger_real_place_order_position,
                        f"下单:code-{code} price-{price} volume-{volume} exec-index-{data['index']}")
    _place_order_info_dict[code] = (price, volume, data, time.time())
                        f"下单:code-{code} price-{price} volume-{volume} exec-index-{data['index']} order_ref-{order_ref}")
    _place_order_info_dict[code] = (price, volume, data, time.time(), order_ref)
# 获取下单信息
def get_order_info(code):
    info = _place_order_info_dict.get(code)
    if info and time.time() - info[3] > 3:
        async_log_util.info(logger_real_place_order_position, "get_order_info 间隔3s以上:code-{}", code)
    if info and time.time() - info[3] > 1:
        async_log_util.info(logger_real_place_order_position, "get_order_info 间隔1s以上:code-{}", code)
        # 间隔3s以上就无效了
        info = None
        _place_order_info_dict.pop(code)
@@ -39,10 +39,11 @@
    price = order_info[0]
    volume = order_info[1]
    exec_data = order_info[2]
    order_ref = order_info[4]
    # 获取量
    is_sz = code.startswith("00")
    # 提交到交易所的时间预估
    min_space_time_ms = 10 if is_sz else 50
    min_space_time_ms = -1 if is_sz else 50
    for d in datas:
        if d["val"]["num"] != volume // 100:
            continue
@@ -59,6 +60,9 @@
        # 时间差不能小于预估下单用时
        if L2DataUtil.time_sub_as_ms(d['val'], exec_data['val']) <= min_space_time_ms:
            continue
        # 真实下单位置与挂单位置不能相差1s
        if L2DataUtil.time_sub_as_ms(d["val"], exec_data['val']) >= 1000:
            continue
        # 获取到了下单位置
        async_log_util.info(hx_logger_trade_debug, f"真实下单位置:{code}-{d['index']}")
        async_log_util.info(logger_real_place_order_position, f"真实下单位置:{code}-{d['index']}")
utils/huaxin_util.py
@@ -64,7 +64,7 @@
    __order_ref_lock.acquire()
    try:
        global __public_order_ref
        __public_order_ref += random.randint(1, 20)
        __public_order_ref += random.randint(5, 20)
        return __public_order_ref
    finally:
        __order_ref_lock.release()