""" 股票数据工具 """ # 股票代码相关的参数 import decimal import time from code_attribute import gpcode_manager from db import mysql_data_delegate as mysql_data, redis_manager_delegate as redis_manager from db.redis_manager_delegate import RedisUtils from utils import tool __db = 0 _redisManager = redis_manager.RedisManager(0) # 代码对应的价格是否正确 def is_same_code_with_price(code, price): if code == '600066': print('进入调试') # 昨日收盘价 price_close = gpcode_manager.CodePrePriceManager.get_price_pre_cache(code) max_price = tool.to_price(decimal.Decimal(str(price_close)) * decimal.Decimal(tool.get_limit_up_rate(code))) min_price = tool.to_price(decimal.Decimal(str(price_close)) * decimal.Decimal(tool.get_limit_down_rate(code))) if min_price <= decimal.Decimal(str(price)) <= max_price: return True return False # 自由流通股本工具类 class ZYLTGBUtil: __db = 0 @classmethod def save(cls, code, val, unit): RedisUtils.setex(_redisManager.getRedis(), "zyltgb-{}".format(code), tool.get_expire(), round(float(val) * 100000000) if int(unit) == 0 else round( float(val) * 10000)) @classmethod def save_async(cls, code, val, unit): RedisUtils.setex_async(cls.__db, "zyltgb-{}".format(code), tool.get_expire(), round(float(val) * 100000000) if int(unit) == 0 else round( float(val) * 10000)) @classmethod def get(cls, code): val = RedisUtils.get(_redisManager.getRedis(), "zyltgb-{}".format(code)) if val is not None: return int(val) return None @classmethod def save_list(self, datasList): # 保存自由流通市值 mysqldb = mysql_data.Mysqldb() for data in datasList: # 保存 _dict = {"_id": data["code"], "zyltgb": data["zyltgb"], "zyltgb_unit": data["zyltgb_unit"], "update_time": int(round(time.time() * 1000))} if float(data["zyltgb"]) > 0: # 保存10天 ZYLTGBUtil.save(data["code"], data["zyltgb"], data["zyltgb_unit"]) result = mysqldb.select_one("select * from ths_zylt where _id='{}'".format(data["code"])) if result is None: mysqldb.execute( "insert into ths_zylt(_id,zyltgb,zyltgb_unit,update_time) values ('{}','{}',{},{})".format( data["code"], data["zyltgb"], data["zyltgb_unit"], round(time.time() * 1000))) else: mysqldb.execute( "update ths_zylt set zyltgb='{}',zyltgb_unit={},update_time={} where _id='{}'".format( data["zyltgb"], data["zyltgb_unit"], round(time.time() * 1000), data["code"])) if __name__ == "__main__": pass