二、AI量化投资:沪市主板A股所有股票20250430到20260430双均线(MA5/MA20)回测结果

获取沪市主板A股所有股票20250430至20260430的日线行情数据,包括开盘价、收盘价、最高价、最低价和成交量。下面直接上代码。

python 复制代码
import akquant as aq
import akshare as ak
import pandas as pd
from akquant import Bar, Strategy

def get_sh_mainboard_stocks():
    """
    精准获取:沪市主板A股列表
    排除科创板,纯主板股票
    """
    # 1. 获取全市场A股代码名称(akshare永久稳定接口)
    stock_all = ak.stock_info_a_code_name()

    # 2. 严格筛选 沪市主板(只保留600/601/603/605开头)
    sh_mainboard_pattern = r"^(600|601|603|605)"
    stock_sh_main = stock_all[stock_all["code"].str.match(sh_mainboard_pattern)].copy()

    # 3. 格式化列名 + 拼接交易代码
    stock_sh_main["交易代码"] = "sh" + stock_sh_main["code"]  # 适配akshare数据获取
    stock_sh_main.columns = ["股票代码", "股票名称", "交易代码"]

    return stock_sh_main.reset_index(drop=True)


def get_data(gupiao) -> pd.DataFrame:
    """
    步骤 1: 数据获取.

    使用 akshare 获取浦发银行 (600000) 的历史日线数据。
    """
    print("正在获取数据...")
    # 获取前复权数据
    df1 = ak.stock_zh_a_daily(
        symbol=gupiao, start_date="20240430", end_date="20250430", adjust="qfq"
    )
    df1["symbol"] = gupiao.replace("sh", "")
    if "date" not in df1.columns:
        df1 = df1.reset_index().rename(columns={"index": "date"})
    return df1  # type: ignore


class DualMAStrategy(Strategy):
    """
    步骤 2: 策略定义.

    双均线策略实现。
    """

    def __init__(self) -> None:
        """策略初始化."""
        super().__init__()
        self.short_window = 5
        self.long_window = 20
        self.warmup_period = self.long_window

    def on_start(self) -> None:
        """策略初始化时调用."""
        print("策略初始化...")

    def on_bar(self, bar: Bar) -> None:
        """核心交易逻辑."""
        symbol = bar.symbol

        # 1. 获取历史数据
        closes = self.get_history(count=self.long_window, symbol=symbol, field="close")

        # 2. 计算均线
        ma5_curr = closes[-self.short_window :].mean()
        ma20_curr = closes[-self.long_window :].mean()

        # 3. 获取持仓
        position = self.get_position(symbol)

        # 4. 交易信号
        if ma5_curr > ma20_curr and position == 0:
            print(
                f"[{bar.timestamp_str}] 金叉买入 (MA5={ma5_curr:.2f}, "
                f"MA20={ma20_curr:.2f})"
            )
            self.order_target_percent(0.95, symbol)

        elif ma5_curr < ma20_curr and position > 0:
            print(
                f"[{bar.timestamp_str}] 死叉卖出 (MA5={ma5_curr:.2f}, "
                f"MA20={ma20_curr:.2f})"
            )
            self.order_target_percent(0.0, symbol)


if __name__ == "__main__":
    # df = get_sh_mainboard_stocks()
    # 1. 获取沪市主板股票列表
    stock_df = get_sh_mainboard_stocks()
    print(f"共获取沪市主板股票:{len(stock_df)} 只")

    # 2. 创建空列表,存储所有股票的回测指标
    result_list = []

    # 3. 遍历所有股票,批量回测
    for idx, row in stock_df.iterrows():
        trade_code = row["交易代码"]  # sh600000
        stock_code = row["股票代码"]  # 600000
        stock_name = row["股票名称"]  # 浦发银行
        # 1. 准备数据
        df = get_data(trade_code)

        # 2. 运行回测
        print("开始回测...")
        result = aq.run_backtest(
            strategy=DualMAStrategy,
            data=df,
            initial_cash=100_000,
            commission_rate=0.0003,
            stamp_tax_rate=0.001,
            lot_size=100,
        )
        # ✅ 提取你需要的指标(修正你写错的对应关系)
        result_list.append({
            "股票代码": stock_code,
            "股票名称": stock_name,
            "交易代码": trade_code,
            "累计收益率": result.metrics.total_return_pct,
            "最大回撤率": result.metrics.max_drawdown_pct,
            "夏普比率": result.metrics.sharpe_ratio,
            "卡玛比率": result.metrics.calmar_ratio,
            "年化波动率": result.metrics.volatility,  # 你之前写错成calmar_ratio
            "胜率": result.metrics.win_rate  # 你之前写错成calmar_ratio
        })
        # result_data.append({
        #     "股票代码": stock_code,
        #     "股票名称": stock_name,
        #     "累计收益率(%)": round(res.total_return * 100, 2),
        #     "最大回撤率(%)": round(res.max_drawdown * 100, 2),
        #     "夏普比率": round(res.sharpe_ratio, 2),
        #     "卡玛比率": round(res.calmar_ratio, 2),
        #     "年化波动率(%)": round(res.annual_volatility * 100, 2),
        #     "胜率(%)": round(res.win_rate * 100, 2)
        # })
        print("✅ 回测成功")

    # 4. 所有股票回测完成,整理结果
    if len(result_list) == 0:
        print("\n无有效回测结果!")
    else:
        # 转DataFrame
        final_df = pd.DataFrame(result_list)

        # ✅ 按 累计收益率 从高到低排序
        final_df = final_df.sort_values(by="累计收益率", ascending=False).reset_index(drop=True)

        # ✅ 保存为CSV文件
        final_df.to_csv("沪市主板A股双均线回测结果.csv", index=False, encoding="utf-8-sig")

        # 打印预览
        print("\n" + "=" * 50)
        print("回测完成!结果已保存")
        print("=" * 50)
        print(final_df.head(10))

运行结果:

|--------|--------|----------|----------|----------|----------|----------|----------|----------|
| 股票代码 | 股票名称 | 交易代码 | 累计收益率 | 最大回撤率 | 夏普比率 | 卡玛比率 | 年化波动率 | 胜率 |
| 600289 | ST信通 | sh600289 | 265.8121 | 28.2446 | 6.053397 | 9.694878 | 0.452354 | 25 |
| 600889 | *ST京化 | sh600889 | 215.0495 | 34.38269 | 3.473714 | 6.254587 | 0.619077 | 50 |
| 601777 | 千里科技 | sh601777 | 209.7631 | 26.17251 | 4.263957 | 8.014633 | 0.491945 | 75 |
| 603366 | 日出东方 | sh603366 | 209.4623 | 43.0915 | 3.991617 | 4.860873 | 0.524756 | 40 |
| 603955 | 大千生态 | sh603955 | 191.5383 | 33.90759 | 3.550128 | 5.648831 | 0.539525 | 75 |
| 600165 | ST宁科 | sh600165 | 186.1478 | 39.96057 | 3.734389 | 4.679 | 0.500686 | 75 |
| 605488 | 福莱新材 | sh605488 | 171.7673 | 35.25058 | 3.171321 | 4.87275 | 0.541627 | 14.28571 |
| 601727 | 上海电气 | sh601727 | 169.1935 | 28.11514 | 3.66478 | 6.01788 | 0.461675 | 66.66667 |
| 600793 | 宜宾纸业 | sh600793 | 166.2944 | 37.93282 | 3.437097 | 4.383919 | 0.483822 | 25 |
| 603887 | 城地香江 | sh603887 | 151.972 | 37.63773 | 2.609095 | 4.037756 | 0.58247 | 33.33333 |
| 600126 | 杭钢股份 | sh600126 | 142.903 | 29.2478 | 2.511253 | 4.885941 | 0.569051 | 66.66667 |
| 601177 | 杭齿前进 | sh601177 | 128.2353 | 26.75862 | 2.788397 | 4.792298 | 0.459889 | 50 |
| 600624 | ST复华 | sh600624 | 126.0793 | 28.43024 | 2.212766 | 4.434692 | 0.569782 | 60 |
| 603038 | 华立股份 | sh603038 | 122.2992 | 40.50427 | 2.416465 | 3.019414 | 0.506108 | 20 |
| 603828 | *ST利达 | sh603828 | 120.6613 | 22.36874 | 2.986202 | 5.525547 | 0.413902 | 42.85714 |
| 600292 | 电投水电 | sh600292 | 118.6502 | 32.27547 | 2.289776 | 3.676173 | 0.518174 | 16.66667 |
| 603171 | 税友股份 | sh603171 | 116.8039 | 18.29862 | 2.320795 | 6.38321 | 0.503293 | 80 |
| 600619 | 海立股份 | sh600619 | 115.2924 | 40.77515 | 2.14273 | 2.827517 | 0.538063 | 75 |
| 603121 | 华培动力 | sh603121 | 111.1719 | 22.26541 | 2.325026 | 4.993031 | 0.478153 | 25 |
| 603319 | 美湖股份 | sh603319 | 110.8142 | 19.75363 | 2.295629 | 5.609816 | 0.482718 | 50 |
| 600593 | 大连圣亚 | sh600593 | 110.39 | 34.17556 | 2.223459 | 3.230087 | 0.496479 | 40 |
| 600839 | 四川长虹 | sh600839 | 108.8785 | 36.70832 | 2.121195 | 2.966044 | 0.513288 | 33.33333 |
| 603559 | ST通脉 | sh603559 | 107.5681 | 28.39403 | 2.334851 | 3.878177 | 0.471624 | 80 |
| 603881 | 数据港 | sh603881 | 106.1426 | 22.81121 | 2.091176 | 4.653087 | 0.507574 | 60 |
| 600644 | 乐山电力 | sh600644 | 103.9004 | 16.80061 | 2.495524 | 6.18432 | 0.416347 | 50 |
| 603196 | 璞源材料 | sh603196 | 103.8999 | 24.91798 | 1.935264 | 4.169677 | 0.536877 | 50 |
| 603110 | 东方材料 | sh603110 | 102.8401 | 27.07222 | 2.186671 | 3.798733 | 0.470305 | 75 |
| 603359 | *ST东珠 | sh603359 | 99.16311 | 31.33165 | 1.936288 | 3.16495 | 0.51213 | 50 |
| 603822 | ST嘉澳 | sh603822 | 98.72316 | 25.97754 | 2.167883 | 3.800327 | 0.45539 | 60 |
| 603697 | 有友食品 | sh603697 | 97.74911 | 13.62182 | 2.418952 | 7.17592 | 0.404097 | 25 |
| 600589 | 大位科技 | sh600589 | 97.65875 | 29.93468 | 1.615723 | 3.262395 | 0.604428 | 50 |
| 603662 | 柯力传感 | sh603662 | 96.38151 | 34.49702 | 1.86565 | 2.793908 | 0.516611 | 40 |
| 600592 | 龙溪股份 | sh600592 | 95.69893 | 18.96895 | 2.081441 | 5.04503 | 0.459772 | 40 |
| 603893 | 瑞芯微 | sh603893 | 95.18683 | 39.61038 | 1.827441 | 2.403078 | 0.520875 | 42.85714 |
| 603499 | 翔港科技 | sh603499 | 95.06909 | 22.14846 | 2.167766 | 4.292356 | 0.438558 | 66.66667 |
| 600520 | 三佳科技 | sh600520 | 94.63333 | 32.25539 | 1.987155 | 2.933877 | 0.476225 | 50 |
| 603716 | 塞力医疗 | sh603716 | 94.45142 | 22.49114 | 1.625918 | 4.199494 | 0.580911 | 100 |
| 600770 | 综艺股份 | sh600770 | 91.02867 | 29.86487 | 2.053614 | 3.048019 | 0.443261 | 33.33333 |
| 600539 | 狮头股份 | sh600539 | 90.99872 | 30.2768 | 1.816861 | 3.005559 | 0.500857 | 40 |
| 603106 | 恒银科技 | sh603106 | 90.0719 | 35.01839 | 1.742165 | 2.572131 | 0.517011 | 50 |
| 603007 | 花王股份 | sh603007 | 87.4834 | 37.39896 | 2.172079 | 2.347857 | 0.404255 | 33.33333 |
| 603101 | 汇嘉时代 | sh603101 | 87.32111 | 13.9108 | 2.556403 | 6.277215 | 0.341578 | 50 |
| 603009 | 北特科技 | sh603009 | 86.26308 | 25.20628 | 1.693427 | 3.422286 | 0.509399 | 33.33333 |
| 603226 | 菲林格尔 | sh603226 | 84.15662 | 17.68416 | 2.21553 | 4.75887 | 0.379849 | 42.85714 |
| 600390 | 五矿资本 | sh600390 | 84.08717 | 20.15471 | 2.239751 | 4.172085 | 0.375431 | 50 |
| 603583 | 捷昌驱动 | sh603583 | 82.47676 | 17.33934 | 1.860901 | 4.756627 | 0.443209 | 40 |
| 603360 | 百傲化学 | sh603360 | 82.44033 | 32.19826 | 1.787323 | 2.560397 | 0.46125 | 22.22222 |
| 600986 | 浙文互联 | sh600986 | 82.15795 | 29.31763 | 1.738244 | 2.80234 | 0.472649 | 40 |
| 600340 | 华夏幸福 | sh600340 | 81.81003 | 48.71347 | 1.466373 | 1.679413 | 0.557907 | 14.28571 |
| 600835 | 上海机电 | sh600835 | 81.15189 | 23.54489 | 1.795457 | 3.446688 | 0.451985 | 60 |
| 600882 | 妙可蓝多 | sh600882 | 81.14254 | 14.70008 | 2.101133 | 5.519871 | 0.386185 | 50 |
| 601360 | 三六零 | sh601360 | 80.99362 | 20.25804 | 1.860415 | 3.998097 | 0.435353 | 66.66667 |
| 603377 | ST东时 | sh603377 | 80.1298 | 28.19397 | 2.018073 | 2.90524 | 0.405884 | 37.5 |
| 600611 | 大众交通 | sh600611 | 79.78202 | 38.0748 | 1.661901 | 2.095402 | 0.480065 | 28.57143 |
| 601162 | 天风证券 | sh601162 | 79.75745 | 24.04156 | 1.722288 | 3.317482 | 0.46309 | 60 |
| 600234 | 科新发展 | sh600234 | 79.45033 | 30.59198 | 2.025784 | 2.597097 | 0.392196 | 28.57143 |
| 603990 | 麦迪科技 | sh603990 | 77.72428 | 17.1069 | 1.741429 | 4.543446 | 0.446325 | 80 |
| 600732 | 爱旭股份 | sh600732 | 77.16382 | 19.68105 | 1.724661 | 3.920718 | 0.447414 | 66.66667 |
| 600171 | 上海贝岭 | sh600171 | 75.58675 | 37.01271 | 1.298836 | 2.042184 | 0.581957 | 50 |
| 603630 | 拉芳家化 | sh603630 | 75.13483 | 12.3657 | 1.93624 | 6.07607 | 0.388045 | 60 |
| 600480 | 凌云股份 | sh600480 | 74.6217 | 15.53511 | 1.919864 | 4.803423 | 0.388682 | 75 |
| 603272 | *ST联翔 | sh603272 | 74.50587 | 13.50452 | 2.165185 | 5.517104 | 0.344108 | 40 |
| 600797 | 浙大网新 | sh600797 | 74.37087 | 33.41762 | 1.306516 | 2.225499 | 0.56923 | 50 |
| 600198 | 大唐电信 | sh600198 | 72.45754 | 43.59696 | 1.325018 | 1.661986 | 0.546842 | 42.85714 |
| 603039 | 泛微网络 | sh603039 | 71.41757 | 33.19593 | 1.56367 | 2.151395 | 0.45673 | 50 |
| 600588 | 用友网络 | sh600588 | 69.63822 | 16.02844 | 1.861949 | 4.344665 | 0.374007 | 42.85714 |
| 600828 | 茂业商业 | sh600828 | 69.39554 | 38.1099 | 1.507289 | 1.820932 | 0.4604 | 50 |
| 600622 | 光大嘉宝 | sh600622 | 68.54659 | 49.95188 | 1.287938 | 1.372252 | 0.53222 | 40 |
| 600100 | 同方股份 | sh600100 | 68.06734 | 21.96173 | 1.904331 | 3.099361 | 0.357434 | 60 |
| 603300 | 海南华铁 | sh603300 | 67.38826 | 23.25646 | 1.450012 | 2.897615 | 0.464743 | 33.33333 |
| 600148 | 长春一东 | sh600148 | 66.99149 | 21.76266 | 1.63563 | 3.078277 | 0.409576 | 33.33333 |
| 603308 | 应流股份 | sh603308 | 66.97483 | 17.33851 | 1.784114 | 3.862779 | 0.375395 | 50 |
| 605319 | 无锡振华 | sh605319 | 66.72403 | 18.59573 | 1.824999 | 3.588138 | 0.365611 | 60 |
| 603696 | 安记食品 | sh603696 | 66.70803 | 27.56771 | 1.550344 | 2.419789 | 0.430279 | 28.57143 |
| 603682 | 锦和商管 | sh603682 | 65.73833 | 28.45433 | 1.435387 | 2.31031 | 0.457983 | 50 |
| 600769 | 祥龙电业 | sh600769 | 65.15281 | 20.8397 | 1.509583 | 3.126379 | 0.431595 | 42.85714 |
| 600734 | *ST实达 | sh600734 | 63.84137 | 16.41605 | 1.505921 | 3.888961 | 0.423936 | 66.66667 |
| 603166 | 福达股份 | sh603166 | 63.27538 | 31.84952 | 1.116269 | 1.986698 | 0.566847 | 50 |
| 605088 | 冠盛股份 | sh605088 | 62.54167 | 18.56333 | 1.577548 | 3.369097 | 0.396448 | 40 |
| 603286 | 日盈电子 | sh603286 | 62.45001 | 19.61362 | 1.277368 | 3.184013 | 0.488896 | 33.33333 |
| 600184 | 光电股份 | sh600184 | 61.13933 | 16.79373 | 1.800718 | 3.640604 | 0.339528 | 75 |
| 605298 | 必得科技 | sh605298 | 61.01303 | 14.27727 | 1.570389 | 4.273437 | 0.388522 | 33.33333 |
| 600602 | 云赛智联 | sh600602 | 60.54586 | 34.14687 | 1.228397 | 1.773102 | 0.492885 | 28.57143 |
| 600693 | 东百集团 | sh600693 | 60.51398 | 36.88198 | 1.124951 | 1.640747 | 0.537925 | 25 |
| 603626 | 科森科技 | sh603626 | 60.05077 | 39.74182 | 1.159222 | 1.511022 | 0.518027 | 50 |
| 603109 | 神驰机电 | sh603109 | 59.46333 | 21.24756 | 1.450349 | 2.798595 | 0.409993 | 75 |
| 603127 | 昭衍新药 | sh603127 | 59.31636 | 18.20934 | 1.675355 | 3.257469 | 0.354052 | 75 |
| 603656 | 泰禾智能 | sh603656 | 58.59731 | 40.00603 | 1.467202 | 1.464712 | 0.399381 | 33.33333 |
| 603949 | 雪龙集团 | sh603949 | 58.4822 | 39.91247 | 1.162185 | 1.465261 | 0.503209 | 75 |
| 603758 | 秦安股份 | sh603758 | 58.22353 | 20.57772 | 1.438638 | 2.829445 | 0.404713 | 40 |
| 600678 | ST金顶 | sh600678 | 58.00048 | 28.2591 | 1.267412 | 2.052454 | 0.457629 | 40 |
| 603021 | ST华鹏 | sh603021 | 57.83004 | 31.04885 | 1.161382 | 1.86255 | 0.497941 | 40 |
| 600067 | 冠城新材 | sh600067 | 57.20623 | 24.13654 | 1.594003 | 2.370109 | 0.358884 | 50 |
| 603991 | 至正股份 | sh603991 | 57.04107 | 36.95023 | 1.114946 | 1.543727 | 0.511604 | 75 |
| 603986 | 兆易创新 | sh603986 | 56.78577 | 17.18942 | 1.508294 | 3.30353 | 0.37649 | 50 |
| 601002 | 晋亿实业 | sh601002 | 56.78042 | 12.0314 | 1.774906 | 4.719354 | 0.319907 | 75 |
| 600439 | 瑞贝卡 | sh600439 | 56.39545 | 38.95428 | 1.231898 | 1.447734 | 0.457793 | 42.85714 |
| 600580 | XD卧龙电 | sh600580 | 56.20454 | 26.35392 | 1.248577 | 2.132682 | 0.450149 | 50 |
| 603011 | 合锻智能 | sh603011 | 56.05764 | 31.175 | 1.255333 | 1.79816 | 0.446556 | 40 |

相关推荐
2zcode1 小时前
基于深度学习的口腔疾病图像识别系统(UI界面+改进算法+数据集+训练代码)
人工智能·深度学习·算法
whyfail1 小时前
AI 平台订阅套餐 Coding Plan 、Token Plan对比指南(2026年4月)
人工智能·ai·chatgpt·订阅套餐·平台对比
小龙报1 小时前
【Coze-AI智能体平台】低代码省时高效:Coze 应用开发全流程指南
java·人工智能·python·深度学习·低代码·chatgpt·交互
初恋叫萱萱1 小时前
【腾讯位置服务开发者征文大赛】地图不再“冷静”:当腾讯位置服务遇上 AI,我打造了一个 AI 智能出行“全能大脑”
人工智能
localbob1 小时前
Lada v0.11.0最新版更新 本地一键启动包教程:AI去马赛克神器实测 支持 Nvidia显卡和Intel Arc GPU
人工智能·lada最新版下载·ai去除马赛克·马赛克去除软件·去除马赛克的软件·电脑去除马赛克·lada使用教程
杜子不疼.1 小时前
搞定 New-API 中转站:N1 飞牛 NAS + Ollama = 随地调用的私有 AI 接口
人工智能
yingjuxia.com1 小时前
AI生成图片R18提示词:新手入门指南与最佳实践
人工智能
Jinkxs1 小时前
不仅仅是补全代码:深度解析AI如何重构我的技术栈
人工智能·重构