"""
|
交易管理
|
"""
|
from db.redis_manager_delegate import RedisManager, RedisUtils
|
from log_module import async_log_util
|
from log_module.log import logger_trade
|
from utils import constant, tool
|
|
|
class CodeTradeStateManager:
|
TRADE_STATE_ALREADY_BUY = 1
|
TRADE_STATE_NOT_BUY = 0
|
|
__instance = None
|
__redisManager = RedisManager(constant.REDIS_DB)
|
__trade_state_cache = {}
|
|
def __new__(cls, *args, **kwargs):
|
if not cls.__instance:
|
cls.__instance = super(CodeTradeStateManager, cls).__new__(cls, *args, **kwargs)
|
cls.__load_datas()
|
return cls.__instance
|
|
@classmethod
|
def __load_datas(cls):
|
keys = cls.__get_redis().keys("trade_state-*")
|
for k in keys:
|
try:
|
code = k.split("-")[1]
|
strategy_type = int(k.split("-")[2])
|
val = cls.__get_redis().get(k)
|
val = int(val)
|
cls.__trade_state_cache[f"{code}-{strategy_type}"] = val
|
except:
|
pass
|
|
@classmethod
|
def __get_redis(cls):
|
return cls.__redisManager.getRedis()
|
|
# 设置交易状态
|
def set_trade_state(self, code, strategy_type, state):
|
async_log_util.info(logger_trade, f"set_trade_state: {code}-{strategy_type}-{state}")
|
k = f"{code}-{strategy_type}"
|
self.__trade_state_cache[k] = state
|
RedisUtils.setex_async(constant.REDIS_DB, f"trade_state-{k}", tool.get_expire(), state)
|
|
# 获取交易状态
|
def get_trade_state(self, code, strategy_type):
|
k = f"{code}-{strategy_type}"
|
state = self.__trade_state_cache.get(k)
|
if state is None:
|
return self.TRADE_STATE_NOT_BUY
|
return state
|