Administrator
2024-02-05 276f2b4575ce23ea5a8271e10e34ad87af03372f
撤卖单模式
4个文件已修改
66 ■■■■■ 已修改文件
inited_data.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_order_processor.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_server.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_manager.py 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inited_data.py
@@ -16,7 +16,7 @@
from ths import client_manager
import constant
from trade.deal_big_money_manager import DealOrderNoManager
from trade.trade_manager import AccountAvailableMoneyManager
from trade.trade_manager import AccountAvailableMoneyManager, AutoCancelSellModeManager
from utils import global_util, tool
import threading
@@ -75,6 +75,8 @@
    global_data_loader.load_volumn()
    # 初始化载入
    AccountAvailableMoneyManager()
    # 初始化载入
    AutoCancelSellModeManager()
    # 9点25之前删除所有代码
    if tool.trade_time_sub(tool.get_now_time_str(), "09:25:00") <= 0:
trade/huaxin/huaxin_trade_order_processor.py
@@ -12,6 +12,7 @@
from log_module.log import logger_trade, hx_logger_trade_debug
from trade import trade_manager, trade_record_log_util
from trade.huaxin.huaxin_trade_record_manager import TradeOrderIdManager
from trade.trade_manager import AutoCancelSellModeManager
from utils import huaxin_util, tool
import concurrent.futures
@@ -181,6 +182,10 @@
        # 下单时间在9:30以后的如果2s没成交就撤单
        if tool.trade_time_sub(order.insertTime, "09:30:00") >= 0 and str(
                order.orderStatus) == huaxin_util.TORA_TSTP_OST_Accepted:
            sell_mode = AutoCancelSellModeManager().get_mode()
            if sell_mode == AutoCancelSellModeManager.MODE_CANCEL_MECHINE and order.orderRef < 90000:
                # 只撤机器的单
                return False
            return True
        return False
trade/huaxin/huaxin_trade_server.py
@@ -61,7 +61,7 @@
from trade.l2_trade_factor import L2PlaceOrderParamsManager
from trade.sell import sell_manager
from trade.sell.sell_rule_manager import SellRuleManager, SellRule
from trade.trade_manager import TradeTargetCodeModeManager, MarketSituationManager
from trade.trade_manager import TradeTargetCodeModeManager, MarketSituationManager, AutoCancelSellModeManager
from utils import socket_util, data_export_util, middle_api_protocol, tool, huaxin_util, output_util, sell_util
trade_data_request_queue = queue.Queue()
@@ -1423,6 +1423,18 @@
                item = results[0]["quotes"][0]
                result = {"code": 0, "data": {"price": item["bid_p"], "volume": item["bid_v"]}}
                self.send_response(result, client_id, request_id)
            elif ctype == "auto_cancel_sell_mode":
                try:
                    operate = data["operate"]
                    if operate == outside_api_command_manager.OPERRATE_SET:
                        mode = data["mode"]
                        AutoCancelSellModeManager().set_mode(mode)
                        self.send_response({"code": 0, "data": {"mode": mode}}, client_id, request_id)
                    elif operate == outside_api_command_manager.OPERRATE_GET:
                        sell_mode = AutoCancelSellModeManager().get_mode()
                        self.send_response({"code": 0, "data": {"mode": sell_mode}}, client_id, request_id)
                except Exception as e:
                    self.send_response({"code": 1, "msg": str(e)}, client_id, request_id)
        except Exception as e:
            logging.exception(e)
trade/trade_manager.py
@@ -143,6 +143,49 @@
        return self.__trade_buy_mode_cache
# 自动撤卖模式管理
class AutoCancelSellModeManager:
    # 撤所有
    MODE_CANCEL_ALL = 0
    # 撤机器下单
    MODE_CANCEL_MECHINE = 1
    __instance = None
    __auto_cancel_sell_mode = MODE_CANCEL_ALL
    redisManager = redis_manager.RedisManager(2)
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(AutoCancelSellModeManager, cls).__new__(cls, *args, **kwargs)
            # 初始化设置
            # 获取交易窗口的锁
            cls.__auto_cancel_sell_mode = cls.get_mode()
        return cls.__instance
    @classmethod
    def __get_redis(cls):
        return cls.redisManager.getRedis()
    def set_mode(self, mode):
        if mode != self.MODE_CANCEL_ALL and mode != self.MODE_CANCEL_MECHINE:
            raise Exception("mode参数值错误")
        self.__auto_cancel_sell_mode = mode
        RedisUtils.setex(self.__get_redis(), "auto_cancel_sell_mode", tool.get_expire(), mode)
    # 是否可以下单
    @classmethod
    def get_mode(cls):
        # 默认设置为可交易
        val = RedisUtils.get(cls.__get_redis(), "auto_cancel_sell_mode")
        if val is None:
            return cls.MODE_CANCEL_ALL
        return int(val)
    def get_mode_cache(self):
        return self.__auto_cancel_sell_mode
# 市场行情等级管理
class MarketSituationManager:
    # 差