| | |
| | | |
| | | # 计算市场分布形态因子 函数 |
| | | # ====================== 输入数据 ====================== |
| | | data = {'-1': '2704', '-10': '2', '-2': '487', '-3': '81', '-4': '38', '-5': '15', '-6': '5', '-7': '4', '-8': '4', '-9': '2', '0': '743', '1': '773', '10': '6', |
| | | '2': '144', '3': '35', '4': '29', '5': '11', '6': '10', '7': '10', '8': '3', '9': '1', 'DT': 7, 'SJDT': '3', 'SJZT': '10', 'STDT': '4', 'STZT': '6', |
| | | 'SZJS': 1038, 'XDJS': 3349, 'ZSZDFB': '475,1353,405,62,395,43,34,222,37,22,23,5,17,22,11,71,183,46,', 'ZT': 16, 'sign': '市场人气一般', 'szln': 473159, |
| | | 'qscln': 1099671, 's_zrcs': 1607250, 'q_zrcs': 4298869, 's_zrtj': 45633261, 'q_zrtj': 107719382} |
| | | data = {'-1': '1382', '-10': '3', '-2': '278', '-3': '105', '-4': '41', '-5': '18', '-6': '8', '-7': '4', '-8': '5', '-9': '1', '0': '350', '1': '2217', '10': '6', '2': '487', '3': '109', '4': '48', '5': '22', '6': '10', '7': '8', '8': '5', '9': '1', 'DT': 6, 'SJDT': '3', 'SJZT': '14', 'STDT': '3', 'STZT': '2', 'SZJS': 2929, 'XDJS': 1851, 'ZSZDFB': '1189,885,159,212,257,31,136,125,31,22,27,1,5,43,2,66,224,10,', 'ZT': 16, 'sign': '市场人气一般', 'szln': 3571292, 'qscln': 8377352, 's_zrcs': 4219994, 'q_zrcs': 9969991, 's_zrtj': 48920069, 'q_zrtj': 111190413} |
| | | |
| | | |
| | | # ====================== 数据预处理 ====================== |
| | |
| | | # 'rise_percentages': rise_percentages, # 各个涨幅段的股票分布比例 |
| | | # 'fall_percentages': fall_percentages, # 各个跌幅段的股票分布比例 |
| | | 'rise_and_fall_sum': rise_and_fall_sum |
| | | |
| | | } |
| | | # 按值排序并提取前三个键值对 |
| | | sorted_items = sorted(factors['rise_vs_fall']['percentages'].items(), key=lambda item: item[1], reverse=True) |
| | | top_three_items = sorted_items[:3] |
| | | |
| | | # 构建新的字典 |
| | | factors['top_three'] = { |
| | | 'top1': {'key': top_three_items[0][0], 'value': top_three_items[0][1]}, |
| | | 'top2': {'key': top_three_items[1][0], 'value': top_three_items[1][1]}, |
| | | 'top3': {'key': top_three_items[2][0], 'value': top_three_items[2][1]}, |
| | | } |
| | | |
| | | # 资金流向因子 -------------------------------------------------- |
| | |
| | | if factors['sentiment']['zt_ratio'] > 0.05 and factors['sentiment']['sign'] == 1: |
| | | signals.append("高情绪热度:涨停股多且人气向好") |
| | | |
| | | # 信号5:涨跌分布综合 |
| | | if factors['top_three']['top1']['value']+factors['top_three']['top2']['value']+factors['top_three']['top3']['value'] > 50: |
| | | value = factors['top_three']['top1']['value'] + factors['top_three']['top2']['value'] + factors['top_three']['top3']['value'] |
| | | signals.append(f"涨跌分布:长尾分布{value}") |
| | | if factors['top_three']['top1']['value']/factors['top_three']['top2']['value'] > 1.25: |
| | | signals.append(f"涨跌分布:强势聚集{factors['top_three']['top1']['key']}:{factors['top_three']['top1']['value']}%") |
| | | else: |
| | | signals.append(f"涨跌分布:中度聚集{factors['top_three']['top1']['key']}:{factors['top_three']['top1']['value']}%") |
| | | else: |
| | | value = factors['top_three']['top1']['value'] + factors['top_three']['top2']['value'] + factors['top_three']['top3']['value'] |
| | | signals.append(f"涨跌分布:均匀分布{value}") |
| | | |
| | | return signals if signals else ["无显著信号:维持当前策略"] |
| | | |
| | | |
| | |
| | | connecting_board_height = data_cache.real_time_market_sentiment_dirt.get('lbgd', None) # 连板高度 |
| | | # 获取市场情绪-涨跌统计 |
| | | data_cache.rise_and_fall_statistics_dirt = kpl_api.getMarketFelling() # 涨跌统计字典 |
| | | # 涨跌统计因子计算 |
| | | factors = calculate_factors(data_cache.rise_and_fall_statistics_dirt) |
| | | # 涨跌统计生成信号 |
| | | signals = generate_signals(factors) |
| | | if data_cache.rise_and_fall_statistics_dirt is not None: |
| | | # 涨跌统计因子计算 |
| | | factors = calculate_factors(data_cache.rise_and_fall_statistics_dirt) |
| | | # 涨跌统计生成信号 |
| | | signals = generate_signals(factors) |
| | | limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get('ZT', None) # 涨停家数 |
| | | actual_limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get('SJZT', None) # 实际涨停家数 |
| | | ST_limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get('STZT', None) # ST涨停家数 |
| | |
| | | logger.info(f"涨跌统计生成信号={signals}") |
| | | logger.info("\n========== 关键指标 ==========") |
| | | logger.info(f"总股票数: {factors['total_stocks']}\n" |
| | | f"涨跌比(BDR): {factors['rise_vs_fall']['rise_vs_fall_ratio']:.2f}" |
| | | f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}" |
| | | f"资金净流入(元): {round(factors['capital_flow']['net'] / 10000, 2)}万" |
| | | f"涨停股占比: {factors['sentiment']['zt_ratio']:.2%}" |
| | | f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}" |
| | | f"聚集区域:{factors['rise_vs_fall']['rise_gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%" |
| | | f"零散区域:{factors['rise_vs_fall']['rise_scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%" |
| | | f"涨跌因子字典={factors['rise_vs_fall']}") |
| | | f"涨跌比(BDR): {factors['rise_vs_fall']['rise_vs_fall_ratio']:.2f}\n" |
| | | f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}\n" |
| | | f"资金净流入(元): {round(factors['capital_flow']['net'] / 10000, 2)}万\n" |
| | | f"涨停股占比: {factors['sentiment']['zt_ratio']:.2%}\n" |
| | | f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}\n" |
| | | f"聚集区域:{factors['rise_vs_fall']['rise_gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%\n" |
| | | f"零散区域:{factors['rise_vs_fall']['rise_scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%\n" |
| | | f"涨跌因子字典={factors['rise_vs_fall']}\n") |
| | | logger.info("\n========== 策略信号 ==========") |
| | | for i, signal in enumerate(signals, 1): |
| | | logger.info(f"信号{i}: {signal}") |
| | |
| | | print(f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}") |
| | | print(f"资金净流入(元): {round(factors['capital_flow']['net']/10000, 2)}万") |
| | | print(f"涨停股占比: {factors['sentiment']['zt_ratio']:.2%}") |
| | | print(f"聚集前三名情况字典=={factors['top_three']}") |
| | | print(f"聚集区域:{factors['rise_vs_fall']['rise_gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%") |
| | | print(f"零散区域:{factors['rise_vs_fall']['rise_scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%") |
| | | print(f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}") |