Administrator
2023-09-12 9ef759eca7df06aa8d71947f4d4a52f3b8a65ff2
本地订单号提前计算
4个文件已修改
32 ■■■■■ 已修改文件
l2/huaxin/huaxin_delegate_postion_manager.py 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_api.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_huaxin.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_manager.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/huaxin/huaxin_delegate_postion_manager.py
@@ -3,6 +3,7 @@
"""
import time
from log_module import async_log_util
from log_module.log import hx_logger_trade_debug, logger_real_place_order_position
_place_order_info_dict = {}
@@ -12,8 +13,8 @@
# 下单
def place_order(code, price, volume, exec_index):
    logger_real_place_order_position.info("下单:code-{} price-{} volume-{} exec-index-{}", code, price, volume,
                                          exec_index)
    async_log_util.info(logger_real_place_order_position,
                        f"下单:code-{code} price-{price} volume-{volume} exec-index-{exec_index}")
    _place_order_info_dict[code] = (price, volume, exec_index, time.time())
@@ -21,7 +22,7 @@
def get_order_info(code):
    info = _place_order_info_dict.get(code)
    if info and time.time() - info[3] > 3:
        logger_real_place_order_position.info("get_order_info 间隔3s以上:code-{}", code)
        async_log_util.info(logger_real_place_order_position, "get_order_info 间隔3s以上:code-{}", code)
        # 间隔3s以上就无效了
        info = None
        _place_order_info_dict.pop(code)
@@ -47,8 +48,8 @@
        if d["index"] <= exec_index:
            continue
        # 获取到了下单位置
        hx_logger_trade_debug.info(f"真实下单位置:{code}-{d['index']}")
        logger_real_place_order_position.info(f"真实下单位置:{code}-{d['index']}")
        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']}")
        if code in _place_order_info_dict:
            _place_order_info_dict.pop(code)
        __place_order_position[code] = d['index']
trade/huaxin/huaxin_trade_api.py
@@ -320,10 +320,11 @@
# volume:交易量
# price:价格(如果是卖时不传价格就按照5挡价卖)
# blocking是否阻塞进程
def order(direction, code, volume, price, price_type=2, blocking=False, sinfo=None, request_id=None):
def order(direction, code, volume, price, price_type=2, blocking=False, sinfo=None, request_id=None,local_order_id = None):
    timestamp = round(time.time() * 1000)
    if not sinfo:
        sinfo = f"b_{code}_{timestamp}"
    if not local_order_id:
    local_order_id = f"l_{code}_{direction}_{volume}_{timestamp}_{random.randint(0, 999)}"
    request_id = __request(ClientSocketManager.CLIENT_TYPE_TRADE,
                           {"type": ClientSocketManager.CLIENT_TYPE_TRADE, "trade_type": 1,
trade/trade_huaxin.py
@@ -33,12 +33,11 @@
# 通过量下单,返回(代码,账号ID,订单号)
def order_volume(code, price, count, last_data_index):
def order_volume(code, price, count, last_data_index, local_order_id=None):
    async_log_util.info(logger_trade, f"{code}下单方法开始")
    price = round(float(price), 2)
    if code.find("00") != 0 and code.find("60") != 0:
        raise Exception("只支持00开头与60开头的代码下单")
    start_time = time.time()
    # 保存下单信息
    huaxin.huaxin_delegate_postion_manager.place_order(code, price, count, last_data_index)
    if not constant.TRADE_ENABLE:
@@ -47,7 +46,7 @@
    blocking = False
    try:
        async_log_util.info(logger_trade, f"{code}下单开始")
        result = huaxin_trade_api.order(1, code, count, price, blocking=blocking)
        result = huaxin_trade_api.order(1, code, count, price, blocking=blocking, local_order_id=local_order_id)
        async_log_util.info(logger_trade, f"{code}下单结束")
    except Exception as e:
        if str(e).find("超时") >= 0:
trade/trade_manager.py
@@ -5,6 +5,7 @@
# 交易管理器
import datetime
import json
import random
import threading
import time
@@ -21,6 +22,7 @@
from l2 import l2_data_manager, l2_data_log
from log_module.log import *
from trade.huaxin.huaxin_trade_record_manager import TradeOrderIdManager
from utils import import_util, tool
trade_gui = import_util.import_lib("trade.trade_gui")
@@ -439,6 +441,7 @@
    print("开始买入")
    async_log_util.info(logger_trade, "{}开始买入".format(code))
    __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_PLACE_ORDER)
    # 状态改变过后必须要有本地下单编号
    # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time, "买入判断时间", force=True)
    __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index)
    # l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time, "异步买入时间", force=True)
@@ -461,7 +464,9 @@
            if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN:
                trade_juejin.order_volume(code, price, count)
            elif constant.TRADE_WAY == constant.TRADE_WAY_HUAXIN:
                trade_huaxin.order_volume(code, price, count, last_data_index)
                local_order_id = create_local_order_id(code)
                TradeOrderIdManager().add_local_order_id(code, local_order_id)
                trade_huaxin.order_volume(code, price, count, last_data_index, local_order_id=local_order_id)
        else:
            guiTrade.buy(code, price)
        __place_order_success(code, capture_timestamp, last_data, last_data_index)
@@ -661,6 +666,12 @@
        RedisUtils.realse(redis_l2)
# 生成本地订单号
def create_local_order_id(code):
    local_order_id = f"l_{code}_{1}_{round(time.time() * 1000)}_{random.randint(0, 999)}"
    return local_order_id
if __name__ == "__main__":
    print(CodesTradeStateManager().get_codes_by_trade_states_cache([0, 1]))
    print(CodesTradeStateManager().get_trade_state_cache("002235"))