获取沪市主板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 |