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

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
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐