# 是否在禁止交易代码中
|
from db import redis_manager_delegate as redis_manager
|
from db.redis_manager_delegate import RedisUtils
|
from log_module import async_log_util
|
from log_module.log import logger_trade
|
from trade import trade_record_log_util
|
from utils import tool
|
|
__redis_manager = redis_manager.RedisManager(2)
|
|
|
class WhiteListCodeManager:
|
__instance = None
|
__redis_manager = redis_manager.RedisManager(2)
|
|
def __new__(cls, *args, **kwargs):
|
if not cls.__instance:
|
cls.__instance = super(WhiteListCodeManager, cls).__new__(cls, *args, **kwargs)
|
# 初始化设置
|
# 获取交易窗口的锁
|
cls.__instance.__white_codes_cache = RedisUtils.smembers(cls.__get_redis(), "white_list_codes")
|
|
return cls.__instance
|
|
@classmethod
|
def __get_redis(cls):
|
return cls.__redis_manager.getRedis()
|
|
def sync(self):
|
data = RedisUtils.smembers(self.__get_redis(), "white_list_codes")
|
self.__white_codes_cache.clear()
|
if data:
|
self.__white_codes_cache |= data
|
|
def add_code(self, code):
|
self.__white_codes_cache.add(code)
|
RedisUtils.sadd(self.__get_redis(), "white_list_codes", code)
|
RedisUtils.expire(self.__get_redis(), "white_list_codes", tool.get_expire())
|
|
def remove_code(self, code):
|
self.__white_codes_cache.discard(code)
|
RedisUtils.srem(self.__get_redis(), "white_list_codes", code)
|
|
def is_in(self, code):
|
return RedisUtils.sismember(self.__get_redis(), "white_list_codes", code)
|
|
def is_in_cache(self, code):
|
return code in self.__white_codes_cache
|
|
def list_codes(self):
|
return RedisUtils.smembers(self.__get_redis(), "white_list_codes")
|
|
def list_codes_cache(self):
|
return self.__white_codes_cache
|
|
def clear(self):
|
self.__white_codes_cache.clear()
|
RedisUtils.delete(self.__get_redis(), "white_list_codes")
|
|
|
class BlackListCodeManager:
|
__instance = None
|
__db = 2
|
__redis_manager = redis_manager.RedisManager(2)
|
|
def __new__(cls, *args, **kwargs):
|
if not cls.__instance:
|
cls.__instance = super(BlackListCodeManager, cls).__new__(cls, *args, **kwargs)
|
# 初始化设置
|
# 获取交易窗口的锁
|
cls.__instance.__forbidden_trade_codes_cache = RedisUtils.smembers(cls.__get_redis(),
|
"forbidden-trade-codes")
|
|
return cls.__instance
|
|
@classmethod
|
def __get_redis(cls):
|
return cls.__redis_manager.getRedis()
|
|
def add_code(self, code):
|
self.__forbidden_trade_codes_cache.add(code)
|
RedisUtils.sadd_async(self.__db, "forbidden-trade-codes", code)
|
RedisUtils.expire_async(self.__db, "forbidden-trade-codes", tool.get_expire())
|
|
def sync(self):
|
data = RedisUtils.smembers(self.__get_redis(),
|
"forbidden-trade-codes")
|
self.__forbidden_trade_codes_cache.clear()
|
if data:
|
self.__forbidden_trade_codes_cache |= data
|
|
def remove_code(self, code):
|
self.__forbidden_trade_codes_cache.discard(code)
|
RedisUtils.srem(self.__get_redis(), "forbidden-trade-codes", code)
|
|
def is_in(self, code):
|
return RedisUtils.sismember(self.__get_redis(), "forbidden-trade-codes", code)
|
|
def is_in_cache(self, code):
|
return code in self.__forbidden_trade_codes_cache
|
|
def list_codes(self):
|
codes = RedisUtils.smembers(self.__get_redis(), "forbidden-trade-codes")
|
self.__forbidden_trade_codes_cache = codes
|
return codes
|
|
def list_codes_cache(self):
|
return self.__forbidden_trade_codes_cache
|
|
def clear(self):
|
self.__forbidden_trade_codes_cache.clear()
|
RedisUtils.delete(self.__get_redis(), "forbidden-trade-codes")
|
|
|
# 初始化禁止交易代码库
|
def init_forbidden_trade_codes():
|
BlackListCodeManager().clear()
|
BlackListCodeManager().add_code("000000")
|
|
|
# 移除禁止交易代码
|
def remove_from_forbidden_trade_codes(code):
|
BlackListCodeManager().remove_code(code)
|
|
|
# 添加代码到禁止交易
|
def add_to_forbidden_trade_codes(code):
|
BlackListCodeManager().add_code(code)
|
|
|
# 禁止代码交易
|
def forbidden_trade(code, msg=None):
|
if not is_in_forbidden_trade_codes(code):
|
trade_record_log_util.add_forbidden_buy_log(code, msg)
|
add_to_forbidden_trade_codes(code)
|
async_log_util.warning(logger_trade, f"{code}加入黑名单原因:{msg}")
|
# l2_data_manager.remove_from_l2_fixed_codes(code)
|
# l2_code_operate.L2CodeOperate.get_instance().remove_l2_listen(code, "禁止代码交易")
|
|
|
def is_in_forbidden_trade_codes(code):
|
return BlackListCodeManager().is_in_cache(code)
|
|
|
if __name__ == "__main__":
|
# add_to_forbidden_trade_codes("000977")
|
WhiteListCodeManager().add_code("002977")
|