| | |
| | | |
| | | # 交易撤销数据管理器 |
| | | import constant |
| | | from db.mysql_data_delegate import Mysqldb |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from utils import global_util, tool |
| | | import l2_data_util |
| | |
| | | RedisUtils.delete(self.__get_redis(), k) |
| | | |
| | | |
| | | # 账户可用资金管理 |
| | | class AccountMoneyManager: |
| | | __db = 2 |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | | __available_money_cache = None |
| | | __commission_cache = None |
| | | __instance = None |
| | | __mysqldb = Mysqldb() |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(AccountMoneyManager, cls).__new__(cls, *args, **kwargs) |
| | | __redis = cls.__get_redis() |
| | | result = RedisUtils.get(cls.__get_redis(), "trade-account-canuse-money") |
| | | if result: |
| | | cls.__available_money_cache = round(float(result), 2) |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | def set_available_money(self, client_id, money): |
| | | self.__available_money_cache = round(float(money), 2) |
| | | RedisUtils.set(self.__get_redis(), "trade-account-canuse-money", money) |
| | | |
| | | def set_commission(self, commission): |
| | | self.__commission_cache = commission |
| | | |
| | | # 获取交易账户的可用金额 |
| | | def get_available_money(self): |
| | | result = RedisUtils.get(self.__get_redis(), "trade-account-canuse-money") |
| | | if result is None: |
| | | return None |
| | | return round(float(result), 2) |
| | | |
| | | def get_available_money_cache(self): |
| | | return self.__available_money_cache |
| | | |
| | | def get_commission_cache(self): |
| | | return self.__commission_cache |
| | | |
| | | def get_delegated_count_info(self, from_date=None, to_date=None): |
| | | """ |
| | | 获取委托数量信息 |
| | | @return: |
| | | """ |
| | | if not from_date: |
| | | from_date = tool.get_now_date_str("%Y%m%d") |
| | | if not to_date: |
| | | to_date = tool.get_now_date_str("%Y%m%d") |
| | | |
| | | sql = f"SELECT * FROM (SELECT '挂买', COUNT(*) AS '数量' FROM `hx_trade_delegate_record` r WHERE r.`direction`=0 AND r.`insertDate`>='{from_date}' AND r.`insertDate`<='{to_date}'" |
| | | sql += " UNION ALL " |
| | | sql += f"SELECT '撤挂买',COUNT(*) AS '数量' FROM `hx_trade_delegate_record` r WHERE r.`direction`=0 AND r.`cancelTime`!='' AND r.`cancelTime`IS NOT NULL AND r.`insertDate`>='{from_date}' AND r.`insertDate`<='{to_date}'" |
| | | sql += " UNION ALL " |
| | | sql += f"SELECT '撤挂卖', COUNT(*) AS '数量' FROM `hx_trade_delegate_record` r WHERE r.`direction`=1 AND r.`cancelTime`!='' AND r.`cancelTime`IS NOT NULL AND r.`insertDate`>='{from_date}' AND r.`insertDate`<='{to_date}'" |
| | | sql += " UNION ALL " |
| | | sql += f"SELECT '挂卖' ,COUNT(*) AS '数量' FROM `hx_trade_delegate_record` r WHERE r.`direction`=1 AND r.`insertDate`>='{from_date}' AND r.`insertDate`<='{to_date}'" |
| | | sql += ") a" |
| | | return self.__mysqldb.select_all(sql) |
| | | |
| | | def get_deal_count_info(self, from_date=None, to_date=None): |
| | | if not from_date: |
| | | from_date = tool.get_now_date_str("%Y%m%d") |
| | | if not to_date: |
| | | to_date = tool.get_now_date_str("%Y%m%d") |
| | | |
| | | sql = "SELECT * FROM ( " |
| | | |
| | | sql += f"SELECT '股票', COUNT(*), sum(a.price*a.volume) as '金额' FROM (SELECT * FROM `hx_trade_deal_record` r WHERE r.`tradeDate` >='{from_date}' and r.`tradeDate` <='{to_date}' AND (r.`securityID` LIKE '30%' OR r.`securityID` LIKE '60%' OR r.`securityID` LIKE '68%' OR r.`securityID` LIKE '00%') GROUP BY r.`orderSysID`) a" |
| | | |
| | | sql += " UNION ALL " |
| | | |
| | | sql += f"SELECT '上证基金', COUNT(*) AS '数量', sum(a.price*a.volume) as '金额' FROM (SELECT * FROM `hx_trade_deal_record` r WHERE r.`tradeDate` >='{from_date}' and r.`tradeDate` <='{to_date}' AND (r.`securityID` LIKE '11%') GROUP BY r.`orderSysID`) a" |
| | | |
| | | sql += " UNION ALL " |
| | | |
| | | sql += f"SELECT '深证基金', COUNT(*) AS '数量', sum(a.price*a.volume) as '金额' FROM (SELECT * FROM `hx_trade_deal_record` r WHERE r.`tradeDate` >='{from_date}' and r.`tradeDate` <='{to_date}' AND (r.`securityID` LIKE '12%') GROUP BY r.`orderSysID`) a" |
| | | sql += ") a" |
| | | return self.__mysqldb.select_all(sql) |
| | | |
| | | |
| | | # 激进买成交代码 |
| | | class RadicalBuyDealCodesManager: |
| | | """ |
| | | 激进买成交代码管理 |
| | | """ |
| | | __db = 2 |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | | __deal_codes_cache = set() |
| | | __instance = None |
| | | # 根据L2数据来激进买入的有效时间:{"code":(有效截至时间, 买单号, 扫入的板块, 最近成交时间, 买入板块净流入情况, 是否是板上放量买入)} |
| | | buy_by_l2_delegate_expire_time_dict = {} |
| | | # 仅仅买的板块 |
| | | __radical_buy_blocks_dict = {} |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(RadicalBuyDealCodesManager, cls).__new__(cls, *args, **kwargs) |
| | | cls.__load_data() |
| | | |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __load_data(cls): |
| | | result = RedisUtils.smembers(cls.__get_redis(), "radical_buy_deal_codes") |
| | | if result: |
| | | cls.__deal_codes_cache = set(result) |
| | | keys = RedisUtils.keys(cls.__get_redis(), "radical_buy_blocks-*") |
| | | if keys: |
| | | for k in keys: |
| | | code = k.split("-")[1] |
| | | val = RedisUtils.get(cls.__get_redis(), k) |
| | | val = json.loads(val) |
| | | cls.__radical_buy_blocks_dict[code] = set(val) |
| | | cls.__deal_codes_cache = set(result) |
| | | |
| | | def set_code_blocks(self, code, blocks): |
| | | self.__radical_buy_blocks_dict[code] = set(blocks) |
| | | RedisUtils.setex_async(self.__db, f"radical_buy_blocks-{code}", tool.get_expire(), json.dumps(list(blocks))) |
| | | |
| | | def get_code_blocks(self, code): |
| | | return self.__radical_buy_blocks_dict.get(code) |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.__redis_manager.getRedis() |
| | | |
| | | def add_deal_code(self, code): |
| | | """ |
| | | 添加已成交的代码 |
| | | @param code: |
| | | @return: |
| | | """ |
| | | self.__deal_codes_cache.add(code) |
| | | RedisUtils.sadd_async(self.__db, "radical_buy_deal_codes", code) |
| | | RedisUtils.expire_async(self.__db, "radical_buy_deal_codes", tool.get_expire()) |
| | | |
| | | def get_deal_codes(self): |
| | | """ |
| | | 获取已经成交的代码 |
| | | @return: |
| | | """ |
| | | if self.__deal_codes_cache: |
| | | return self.__deal_codes_cache |
| | | return set() |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | processor = CodeActualPriceProcessor() |
| | | print(processor.get_top_rate_codes(30)) |
| | | pass |