| | |
| | | rise_sum = sum(rise_dirt.values()) |
| | | # 计算上涨股票数量的和 |
| | | fall_sum = sum(fall_dirt.values()) |
| | | # 计算每个键(每个幅段)的值占总和的百分比 |
| | | percentages = {key: round((value / rise_and_fall_sum) * 100, 2) for key, value in rise_and_fall_dirt.items()} |
| | | # # 计算每个键(每个涨幅段)的值占总和的百分比 |
| | | rise_percentages = {key: round((value / rise_sum) * 100, 2) for key, value in rise_dirt.items()} |
| | | # # 计算每个键(每个涨幅段)的值占总和的百分比 |
| | | fall_percentages = {key: round((value / fall_sum) * 100, 2) for key, value in fall_dirt.items()} |
| | | |
| | | if rise_and_fall_sum != 0 or rise_sum != 0 or fall_sum != 0: |
| | | # 计算每个键(每个幅段)的值占总和的百分比 |
| | | percentages = {key: round((value / rise_and_fall_sum) * 100, 2) for key, value in |
| | | rise_and_fall_dirt.items()} |
| | | # # 计算每个键(每个涨幅段)的值占总和的百分比 |
| | | rise_percentages = {key: round((value / rise_sum) * 100, 2) for key, value in rise_dirt.items()} |
| | | # # 计算每个键(每个涨幅段)的值占总和的百分比 |
| | | fall_percentages = {key: round((value / fall_sum) * 100, 2) for key, value in fall_dirt.items()} |
| | | else: |
| | | percentages = {} |
| | | rise_percentages = {} |
| | | fall_percentages = {} |
| | | # 找到全幅段最大值对应的键 |
| | | max_key = max(rise_and_fall_dirt, key=rise_and_fall_dirt.get) |
| | | # 找到全幅段最小值对应的键 |
| | |
| | | logger.info(f"涨跌统计字典{data_cache.rise_and_fall_statistics_dirt}") |
| | | logger.info(f"涨跌统计因子的计算={factors}") |
| | | logger.info(f"涨跌统计生成信号={signals}") |
| | | logger.info("\n========== 关键指标 ==========") |
| | | logger.info("========== 关键指标 ==========") |
| | | logger.info(f"总股票数: {factors['total_stocks']}\n" |
| | | f"涨跌比(BDR): {factors['rise_vs_fall']['rise_vs_fall_ratio']:.2f}\n" |
| | | f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}\n" |
| | |
| | | f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}\n" |
| | | f"上涨幅段最大:{factors['rise_vs_fall']['rise_max_key']}:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_max_key'])}%\n" |
| | | f"下跌幅段最大:{factors['rise_vs_fall']['fall_max_key']}:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['fall_max_key'])}%\n" |
| | | f"聚集区域:{factors['rise_vs_fall']['gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%\n" |
| | | f"零散区域:{factors['rise_vs_fall']['scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%\n" |
| | | f"聚集区域:{factors['rise_vs_fall']['gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['gather_area'])}%\n" |
| | | f"零散区域:{factors['rise_vs_fall']['scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['scattered_area'])}%\n" |
| | | f"涨跌因子字典={factors['rise_vs_fall']}\n") |
| | | logger.info("\n========== 策略信号 ==========") |
| | | for i, signal in enumerate(signals, 1): |