| | |
| | | @classmethod |
| | | def process_sell_order(cls, order: HuaxinOrderEntity): |
| | | # 处理卖单 |
| | | if order.direction != str(huaxin_util.TORA_TSTP_D_Sell): |
| | | return False |
| | | # if order.direction != str(huaxin_util.TORA_TSTP_D_Sell): |
| | | # return False |
| | | cls.order_ref_dict[order.orderRef] = order |
| | | |
| | | # 下单时间在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() |
| | | sell_mode = AutoCancelSellModeManager().get_mode_cache(order.code) |
| | | if sell_mode == AutoCancelSellModeManager.MODE_CANCEL_MECHINE and order.orderRef < 90000: |
| | | # 只撤机器的单 |
| | | return False |
| | |
| | | MODE_CANCEL_MECHINE = 1 |
| | | |
| | | __instance = None |
| | | __auto_cancel_sell_mode = MODE_CANCEL_ALL |
| | | |
| | | redisManager = redis_manager.RedisManager(2) |
| | | __code_auto_cancel_mode_dict = {} |
| | | |
| | | 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): |
| | | def set_mode(self, code, 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) |
| | | self.__code_auto_cancel_mode_dict[code] = 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 |
| | | def get_mode_cache(self, code): |
| | | if code in self.__code_auto_cancel_mode_dict: |
| | | return self.__code_auto_cancel_mode_dict[code] |
| | | return self.MODE_CANCEL_ALL |
| | | |
| | | |
| | | class SellRule: |
| | |
| | | from trade import huaxin_trade_data_update, huaxin_sell_util, huaxin_trade_api |
| | | 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 trade.sell_rule_manager import TradeRuleManager, SellRule, AutoCancelSellModeManager |
| | | 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 |
| | |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | raise e |
| | | elif ctype == "auto_cancel_sell_mode": |
| | | try: |
| | | operate = data["operate"] |
| | | code = data.get("code") |
| | | if operate == outside_api_command_manager.OPERRATE_SET: |
| | | mode = data["mode"] |
| | | AutoCancelSellModeManager().set_mode(code, 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_cache(code) |
| | | 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) |
| | | |
| | | |
| | | class L1DataProcessor: |