From 892b50e242e3c59a738b92dfdfee1bf1ff8932f2 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 21 十月 2022 16:59:58 +0800 Subject: [PATCH] 新策略修改 --- l2_trade_factor.py | 162 ++++++++++++++++++++++++++++++++++------------------- 1 files changed, 104 insertions(+), 58 deletions(-) diff --git a/l2_trade_factor.py b/l2_trade_factor.py index aa783ba..cda2229 100644 --- a/l2_trade_factor.py +++ b/l2_trade_factor.py @@ -18,53 +18,57 @@ yi = 1 return 5000000 + (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.02 + 0.26 - if rate > 0.52: - rate = 0.52 - return round(rate, 2) + if t < 0.9: + return 0 + elif t <= 1.1: + return 0.2 + elif t <= 1.6: + return 0 + elif t <= 2.1: + return 0.03 + elif t <= 2.6: + return 0.06 + elif t <= 3.1: + return 0.09 + elif t <= 3.6: + return 0.12 + elif t <= 4.1: + return 0.15 + elif t <= 4.6: + return 0.18 + elif t <= 5.1: + return 0.21 + elif t <= 5.6: + return 0.24 + elif t <= 6.1: + return 0.27 + else: + return 0.30 # 鑾峰彇閲忓奖鍝嶆瘮渚� @classmethod def get_volumn_rate(cls, day60_max, yest, today): old_volumn = yest - base_rate = 0.49 if day60_max > yest: old_volumn = day60_max - base_rate = 0.50 r = round(today / old_volumn, 2) + if r < 0.01: + r = 0.01 print("姣斾緥锛�", r) rate = 0 - if r <= 0.25: - rate = base_rate - (r - 0.01) * 2 - elif r <= 0.5: - rate = 0.25 - r + (0.01 if day60_max > yest else 0) - elif r < 0.75: - rate = r - 0.75 + (0.01 if day60_max > yest else 0) - elif r < 1.74: - rate = base_rate - (r - 0.75) + if r < 0.5: + rate = 0.3 - (r - 0.01) + elif r <= 0.75: + rate = -0.2 + (r - 0.5) * 2 + elif r <= 1.35: + rate = 0.3 - (r - 0.75) else: - rate = base_rate - 0.99 + rate = -0.3 return round(rate, 4) # 褰撳墠鑲$エ棣栨娑ㄥ仠鏃堕棿鐨勫奖鍝嶆瘮渚� @@ -74,36 +78,33 @@ start_m = 9 * 60 + 30 m = int(times[0]) * 60 + int(times[1]) dif = m - start_m - base_rate = 0.5 + base_rate = 0.3 rate = 0 if dif < 1: rate = base_rate - elif dif <= 5: - rate = base_rate - dif * 0.02 elif dif <= 120: # 11:30涔嬪墠 - rate = 0.39 - (dif - 6) * 0.004 + rate = base_rate - dif * 0.0035 else: - rate = 0.39 - (120 - 6) * 0.004 - (dif - 210 + 1) * 0.004 - if rate < -0.5: - rate = -0.5 + rate = base_rate - (dif - 89) * 0.0035 + if rate < -0.3020: + rate = -0.3020 return round(rate, 4) # 绾竾鎵嬪摜褰卞搷鍊硷紙鎵嬫暟銆�=9000 OR 閲戦銆�=500w锛� @classmethod def get_big_money_rate(cls, num): - if num < 0: - num = 0 - if num >= 10: - return 0.5 - else: - return round(num * 0.05, 2) + if num < 4: + return 0 + rate = (num - 4) * 0.035 / 4 + 0.06 + if rate > 0.9: + rate = 0.9 + return round(rate, 4) @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 = 0 if total_industry_limit_percent is not None: @@ -121,16 +122,23 @@ if big_money_num is not None: big_money_rate = cls.get_big_money_rate(big_money_num) print( - "zyltgb_rate锛歿} industry_rate锛歿} volumn_rate锛歿} limit_up_time_rate锛歿} big_money_rate锛歿}".format(zyltgb_rate, - industry_rate, - volumn_rate, - limit_up_time_rate, - big_money_rate)) + "industry_rate锛歿} volumn_rate锛歿} limit_up_time_rate锛歿} big_money_rate锛歿}".format(industry_rate, + volumn_rate, + limit_up_time_rate, + big_money_rate)) - return round(1 - (zyltgb_rate + industry_rate + volumn_rate + limit_up_time_rate + big_money_rate), 4) + final_rate = round(1 - (industry_rate + volumn_rate + limit_up_time_rate + big_money_rate), 4) + if final_rate < 0.1: + final_rate = 0.1 + return final_rate @classmethod def compute_rate_by_code(cls, code): + factors = cls.__get_rate_factors(code) + return cls.compute_rate(factors[0], factors[1], factors[2], factors[3], factors[4], factors[5], factors[6]) + + @classmethod + def __get_rate_factors(cls, code): zyltgb = global_util.zyltgb_map.get(code) # 鑾峰彇琛屼笟鐑害 industry = global_util.code_industry_map.get(code) @@ -139,6 +147,11 @@ industry = global_util.code_industry_map.get(code) total_industry_limit_percent = global_util.industry_hot_num.get(industry) if industry is not None else None + # 褰撳墠绁ㄦ槸鍚︽定鍋� + if total_industry_limit_percent is not None: + if code in global_util.limit_up_codes_percent: + total_industry_limit_percent -= global_util.limit_up_codes_percent[code] + # 鑾峰彇閲� volumn_day60_max, volumn_yest, volumn_today = global_util.max60_volumn.get( code), global_util.yesterday_volumn.get(code), global_util.today_volumn.get(code) @@ -154,8 +167,22 @@ big_money_num = global_util.big_money_num.get(code) if big_money_num is None: big_money_num = big_money_num_manager.get_num(code) - return cls.compute_rate(zyltgb, total_industry_limit_percent, volumn_day60_max, volumn_yest, volumn_today, - limit_up_time, big_money_num) + return ( + zyltgb, total_industry_limit_percent, volumn_day60_max, volumn_yest, volumn_today, limit_up_time, + big_money_num) + + @classmethod + def factors_to_string(cls, code): + vals = cls.__get_rate_factors(code) + return "zyltgb:%s, total_industry_limit_percent:%s, volumn_day60_max:%s, volumn_yest:%s, volumn_today:%s,limit_up_time:%s, big_money_num:%s" % vals + + @classmethod + def __get_zyltgb(cls, code): + zyltgb = global_util.zyltgb_map.get(code) + if zyltgb is None: + global_util.load_zyltgb() + zyltgb = global_util.zyltgb_map.get(code) + return zyltgb @classmethod def compute_m_value(cls, code): @@ -166,12 +193,24 @@ if zyltgb is None: print("娌℃湁鑾峰彇鍒拌嚜鐢辨祦閫氬競鍊�") return 10000000 - if code == '002476': - print("") zyltgb = cls.get_base_safe_val(zyltgb) rate = cls.compute_rate_by_code(code) # print("m鍊艰幏鍙栵細", code, round(zyltgb * rate)) return round(zyltgb * rate) + + # 鑾峰彇瀹夊叏绗旀暟 + @classmethod + def get_safe_buy_count(cls, code): + gb = cls.__get_zyltgb(code) + if not gb: + # 榛樿10绗� + return 8 + count = gb // 100000000 + if count > 30: + return 30 + if count < 5: + return 5 + return count # l2鍥犲瓙褰掑洜鏁版嵁 @@ -191,7 +230,14 @@ if __name__ == "__main__": - L2TradeFactorUtil.compute_m_value("000036") - # print(L2TradeFactorUtil.get_big_money_rate(1)) + # print(L2TradeFactorUtil.get_rate_factors("003004")) + # print(L2TradeFactorUtil.factors_to_string("003004")) + print(L2TradeFactorUtil.get_limit_up_time_rate("09:30:30")) + print(L2TradeFactorUtil.get_limit_up_time_rate("11:30:00")) + print(L2TradeFactorUtil.get_limit_up_time_rate("13:00:00")) + print(L2TradeFactorUtil.get_limit_up_time_rate("13:48:00")) + print(L2TradeFactorUtil.get_limit_up_time_rate("13:53:23")) + print(L2TradeFactorUtil.get_limit_up_time_rate("14:23:23")) + # print(L2TradeFactorUtil.get_big_money_rate(2)) # print(L2TradeFactorUtil.get_big_money_rate(3)) -- Gitblit v1.8.0