# l2交易因子 class L2TradeFactorUtil: # 获取基础m值,返回单位为元 @classmethod def get_base_safe_val(cls, zyltgb): yi = round(zyltgb / 100000000) if yi < 1: yi = 1 return 6000000 + (yi - 1) * 500000 # 自由流通市值影响比例 @classmethod def get_zylt_rate(cls, zyltgb): yi = round(zyltgb / 100000000) if yi < 1: yi = 1 if yi <= 30: rate = -0.04 + 0.01 * (yi - 1) if rate > 0.1: rate = 0.1 else: rate = 0.09 - (yi - 31) * 0.002 if rate < -0.1: rate = -0.1 return round(rate, 4) # 获取行业影响比例 # total_limit_percent为统计的比例之和乘以100 @classmethod def get_industry_rate(cls, total_limit_percent): t = total_limit_percent / 10 rate = t / 0.5 * 0.04 if rate > 0.52: rate = 0.52 return round(rate, 2) # 获取量影响比例 @classmethod def get_volumn_rate(cls, day60_max, yest, today): old_volumn = yest base_rate = 0.25 if day60_max > yest: old_volumn = day60_max base_rate = 0.26 r = round(today / old_volumn, 2) print("比例:", r) rate = 0 if r < 0.11: rate = base_rate - (r - 0.01) elif r < 0.45: rate = base_rate - r elif r < 0.75: rate = (base_rate - 0.2049) + (r - 0.74) * 0.4 elif r < 1.38: rate = base_rate - (r - 0.75) * 0.8 else: rate = base_rate - 0.5 return round(rate, 4) # 当前股票首次涨停时间的影响比例 @classmethod def get_limit_up_time_rate(cls, time_str): times = time_str.split(":") start_m = 9 * 60 + 30 m = int(times[0]) * 60 + int(times[1]) dif = m - start_m base_rate = 0.15 rate = 0 if dif < 1: rate = base_rate elif dif <= 5: rate = base_rate - dif * 0.01 elif dif <= 120: # 11:30之前 rate = 0.0985 - (dif - 6) * 0.0015 else: rate = 0.0985 - (dif - 89 - 6) * 0.0015 if rate < -0.15: rate = -0.15 return round(rate, 4) # 纯万手哥影响值(手数》=9000 OR 金额》=500w) @classmethod def get_big_money_rate(cls, num): if num >= 8: return 0.08 else: return num * 0.01 @classmethod def compute_rate(cls, zyltgb, total_industry_limit_percent, volumn_day60_max, volumn_yest, volumn_today, limit_up_time, big_money_num): # 自由流通股本影响比例 zyltgb_rate = cls.get_zylt_rate(zyltgb) # 行业涨停影响比例 industry_rate = cls.get_industry_rate(total_industry_limit_percent) # 量影响比例 volumn_rate=cls.get_volumn_rate(volumn_day60_max,volumn_yest,volumn_today) # 涨停时间影响比例 limit_up_time_rate=cls.get_limit_up_time_rate(limit_up_time) # 万手哥影响 big_money_rate=cls.get_big_money_rate(big_money_num) return 1-(zyltgb_rate+industry_rate+volumn_rate+limit_up_time_rate+big_money_rate); # l2因子归因数据 class L2TradeFactorSourceDataUtil: # 是否为大单 @classmethod def is_big_money(cls, data): if int(data["val"]["num"]) >= 9000: return True money = round(float(data["val"]["price"]) * int(data["val"]["num"]) * 100) if money >= 5000000: return True return False if __name__ == "__main__": print(L2TradeFactorUtil.get_big_money_rate(32)) print(L2TradeFactorUtil.get_big_money_rate(8)) print(L2TradeFactorUtil.get_big_money_rate(0))