当前位置:首页>python>双航母背后的A股信号:用Python量化系统,我们能看到什么

双航母背后的A股信号:用Python量化系统,我们能看到什么

  • 2026-10-11 08:26:22
双航母背后的A股信号:用Python量化系统,我们能看到什么

双航母背后的A股信号:用Python量化系统,我们能看到什么

真龙现身 · 2026年5月4日


双航母编队的消息刷屏了。

作为一个写代码的量化工程师,我职业病犯了,忍不住想去挖掘一下:这事儿背后,有没有一些可以被量化系统捕捉到的市场信号?

答案是有的。而且用Python,我们能把这些信号分析得很清楚。

这篇文章,我就来实操一下,怎么用代码追踪双航母这类地缘政治事件对A股市场的影响。代码我全部放出来,你可以直接跑。

一、先搞清楚我们要抓的是什么信号

双航母这个事件,影响市场的路径大概有三条:

第一条,军工板块的直接利好——双航母编队意味着海军装备需求提升,军工企业的订单预期增强。

第二条,市场情绪的扩散效应——地缘政治紧张度提升时,投资者的风险偏好会下降,资金可能从高风险资产流向避险资产。

第三条,产业链的间接影响——航母编队需要大量配套,从钢材到电子设备,产业链很长,相关板块可能联动。

我们要做的,就是用Python把这三条路径量化出来。

二、用akshare抓军工板块的实时数据

首先,我们用akshare抓军工板块的整体表现:

import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime, timedelta

# 设置中文显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

print("正在获取军工板块数据...")

# 获取申万行业军工指数的日频数据
try:
    df = ak.stock_zh_index_daily_em(symbol="军工")
    print(f"成功获取 {len(df)} 条数据")
    print(df.tail())
except Exception as e:
    print(f"获取失败: {e}")
    try:
        df = ak.stock_board_industry_name_em()
        military = df[df['板块名称'].str.contains('军工|国防', na=False)]
        print("军工板块列表:", military[['板块名称','最新涨跌幅']].head())
    except Exception as e2:
        print(f"备选也失败: {e2}")

这段代码会输出军工板块的近期涨跌数据。如果你没有akshare,先pip install akshare。

跑完之后,你会得到一张军工板块的近期走势表。然后我们继续分析资金流向。

三、分析北向资金对军工板块的偏好

北向资金(外资)往往对地缘政治更敏感,我们用代码追踪:

# 北向资金流向追踪
import akshare as ak

print("获取北向资金数据...")

try:
    north_df = ak.stock_hsgt_north_net_flow_in_em(symbol="北向资金")
    print(north_df.tail(10))
    
    north_holder = ak.stock_hsgt_north_hold_stock_em(symbol="北向",
                                                        holder="北向资金",
                                                        market="北")
    print("\n北向资金前十大持仓:")
    print(north_holder.head(10)[['股票代码','股票名称','最新涨跌幅']])
except Exception as e:
    print(f"获取失败,继续备选方案: {e}")
    
    flow_summary = ak.stock_hsgt_investor_statistics(symbol="北向",
                                                      period="日频",
                                                      start_date="20260501",
                                                      end_date="20260503")
    print("近三日资金流向统计:")
    print(flow_summary)

北向资金的数据能帮助我们判断:外资是看多还是看空军工板块?这个对于我们判断行情的持续性很关键。

四、构建一个简单的军工板块情绪指标

有了数据之后,我们可以构建一个简单的情绪指标:

# 简单军工板块情绪指标

def calc_sentiment(change_pct, north_flow, vol_ratio):
    change_pct_float = float(change_pct)
    north_flow_float = float(north_flow)
    vol_ratio_float = float(vol_ratio)
    
    change_score = np.tanh(change_pct_float / 5)
    flow_score = np.tanh(north_flow_float / 50)
    vol_score = np.tanh(vol_ratio_float - 1) * np.sign(change_pct_float)
    
    sentiment = 0.5 * change_score + 0.3 * flow_score + 0.2 * vol_score
    
    detail = {
        'change_score': round(change_score, 3),
        'flow_score': round(flow_score, 3),
        'vol_score': round(vol_score, 3)
    }
    
    return round(sentiment, 3), detail

test_data = [
    (3.2, 12.5, 1.8),
    (-1.5, -8.3, 0.7),
    (5.8, 28.1, 2.3),
]

print("情绪指标测试:")
for change, flow, vol in test_data:
    score, detail = calc_sentiment(change, flow, vol)
    status = "偏多" if score > 0.2 else ("偏空" if score < -0.2 else "中性")
    print(f"  涨幅{change}% 北向{flow}亿 量比{vol}x => 情绪分{score} {status}")
    print(f"    详情: 涨幅分{detail['change_score']} 资金分{detail['flow_score']} 量分{detail['vol_score']}")

这个情绪指标是一个简单的综合评分,可以帮我们快速判断板块的多空状态。你可以根据自己的偏好调整权重。

五、用回测框架验证这个策略的有效性

光有逻辑不行,我们得用历史数据验证一下这个策略有没有用。

# 简单的均线突破策略回测(以军工ETF为例)
import akshare as ak
import pandas as pd
import numpy as np

etf_code = "512660"
df = ak.fund_etf_hist_sina(symbol=etf_code)

df['close'] = pd.to_numeric(df['close'], errors='coerce')
df['ma5'] = df['close'].rolling(window=5).mean()
df['ma20'] = df['close'].rolling(window=20).mean()
df['volume'] = pd.to_numeric(df['volume'], errors='coerce')
df['vol_ma5'] = df['volume'].rolling(window=5).mean()

df['signal'] = (df['ma5'] > df['ma20']) & (df['ma5'].shift(1) <= df['ma20'].shift(1))
hold_days = 5
df['ret'] = df['close'].pct_change(hold_days).shift(-hold_days)

df_valid = df.dropna(subset=['signal', 'ret'])
df_valid['position'] = df_valid['signal'].astype(int)

total_return = (1 + df_valid['ret'] * df_valid['position']).prod() - 1
win_rate = (df_valid['ret'] > 0).mean()

print(f"总收益率: {total_return:.2%}")
print(f"胜率: {win_rate:.2%}")
print(f"交易次数: {df_valid['position'].sum()}")
print(f"样本数: {len(df_valid)}")

这段代码演示了一个最简单的趋势跟踪策略在军工板块上的回测。你可以根据实际数据调整参数,或者加入我们刚才的情绪指标做过滤条件。

六、用脚本自动监控,每天收盘自动跑

每天收盘后,我们可以用这个脚本自动跑一遍,把结果保存下来:

import akshare as ak
import pandas as pd
from datetime import datetime

def daily_military_report():
    report_time = datetime.now().strftime('%Y-%m-%d %H:%M')
    report_path = f"military_report_{datetime.now().strftime('%Y%m%d')}.txt"
    
    lines = [f"=== 军工板块每日监控报告 {report_time} ===", ""]
    
    try:
        df = ak.stock_board_industry_name_em()
        military = df[df['板块名称'].str.contains('军工|国防', na=False)]
        lines.append("【板块涨跌】")
        for _, row in military.iterrows():
            lines.append(f"  {row['板块名称']}: {row['最新涨跌幅']}%")
        lines.append("")
    except Exception as e:
        lines.append(f"获取板块数据失败: {e}\n")
    
    try:
        north = ak.stock_hsgt_north_net_flow_in_em(symbol="北向资金")
        latest = north.iloc[-1]
       净流入 = latest.get('净流入额(万元)', 'N/A')
        lines.append(f"【北向资金】今日净流入: {净流入} 万元")
        lines.append("")
    except Exception as e:
        lines.append(f"获取北向数据失败: {e}\n")
    
    with open(report_path, 'w', encoding='utf-8') as f:
        f.write('\n'.join(lines))
    
    print(f"报告已保存: {report_path}")
    return report_path

if __name__ == "__main__":
    daily_military_report()

把这个脚本加入到你的定时任务里,每天收盘后自动跑一遍,你就能持续跟踪军工板块的动态了。

七、我的个人总结

写这篇文章,不是想让你去炒军工板块。

我是想用双航母这个热点事件,演示一下怎么用Python把一个模糊的市场逻辑,拆解成可量化、可回测、可执行的代码系统。

这个流程才是关键:你看到一个事件 → 你分析它影响市场的路径 → 你用数据验证你的假设 → 你把验证结果固化成代码 → 代码自动跑,你只需要处理例外情况。

做量化的人都知道,策略本身并不是核心壁垒。真正有价值的是这套从观察到执行的全链路能力。

双航母的新闻,三天后就会热度消退。但如果你用这套方法建好了监控脚本,以后遇到类似事件,你只需要十分钟就能搞清楚市场的状态。

这才是量化真正给你的东西:不是预测未来,而是让你在不确定的未来面前,有一套可以依赖的应对框架。


【声明】本文策略仅供研究参考,不构成投资建议。历史回测不代表未来收益。

最新文章

随机文章