| | |
| | | sql += ") a" |
| | | return self.__mysqldb.select_all(sql) |
| | | |
| | | def get_deal_count(self, from_date=None, to_date=None): |
| | | 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 = f"SELECT COUNT(*) FROM (SELECT * FROM `hx_trade_deal_record` r WHERE r.`tradeDate` >='{from_date}' and r.`tradeDate` <='{to_date}' GROUP BY " \ |
| | | "r.`orderSysID`) a " |
| | | return self.__mysqldb.select_one(sql)[0] |
| | | |
| | | 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 |