永康市网站建设制作,给网站做认证,网站备案怎么改,太原网站建设随州前言#xff1a;为什么你要做量化回测#xff1f;
在A股市场摸爬滚打#xff0c;你是否也遇到过这种情况#xff1a;
听大V说“金叉买入”#xff0c;结果一买就被套#xff1f;
感觉某个指标很准#xff0c;但不敢重仓#xff0c;因为不知道历史表现如何#xff1f;
…前言为什么你要做量化回测在A股市场摸爬滚打你是否也遇到过这种情况听大V说“金叉买入”结果一买就被套感觉某个指标很准但不敢重仓因为不知道历史表现如何想复盘几年的数据手动拉K线图拉到眼瞎“凭感觉交易是亏损的开始用数据说话才是盈利的基石。”今天这篇文章不讲虚的理论直接上实战干货。我将手把手教你用Python搭建一个简单的回测框架利用Tushare获取A股历史数据验证一个经典的**“双均线趋势策略”**到底赚不赚钱。一、 工欲善其事数据源的选择做量化数据是第一生产力。很多新手还在用爬虫爬新浪财经不仅速度慢还容易被封IP。在Python量化圈最硬核、最稳定的数据源非 Tushare 莫属。它提供了极其丰富的A股日线、财务、宏观数据而且接口简单Pandas直接读取非常适合做回测。⚠️ 注意 运行本文代码需要Tushare的TokenAPI密钥。如果你还没有账号强烈建议通过以下链接免费注册注册后即可获取基础积分免费拉取日线数据 Tushare大数据社区注册链接点击跳转PS通过此链接注册支持博主咱们一起薅社区羊毛获取更多数据权限二、 策略思路双均线动态止盈为了演示我们选取一个经典且逻辑清晰的策略MA5与MA20双均线策略。买入信号当5日均线短期趋势上穿20日均线中期趋势形成“金叉”视为趋势向上全仓买入。卖出信号当5日均线短期趋势下穿20日均线中期趋势形成“死叉”视为趋势走坏清仓止损/止盈。虽然策略简单但通过Python回测我们可以直观地看到它在具体个股上的表现比如“茅指数”代表贵州茅台。三、 Python代码实战完整版环境准备请确保安装了 pandas, tushare, matplotlib。codeBashdownloadcontent_copyexpand_lesspip install pandas tushare matplotlib获取数据首先我们需要拿到股票的历史K线数据。这里就用到了我们申请的Tushare Token。codePythondownloadcontent_copyexpand_lessimport tushare as tsimport pandas as pdimport matplotlib.pyplot as plt----------------------------------------------------1. 初始化设置----------------------------------------------------替换为你自己的Token一定要去注册获取否则无法运行注册地址https://tushare.pro/register?reg833676ts.set_token(‘你的Tushare_Token_粘贴在这里’)pro ts.pro_api()2. 获取数据函数def get_data(ts_code, start_date, end_date):print(f正在获取 {ts_code} 的数据…)# 使用Tushare的通用行情接口df pro.daily(ts_codets_code, start_datestart_date, end_dateend_date)# 数据清洗Tushare返回的数据通常是倒序的需要按时间正序排列 df df.sort_values(trade_date) df[trade_date] pd.to_datetime(df[trade_date]) df.set_index(trade_date, inplaceTrue) # 只保留我们需要的列 df df[[open, high, low, close, vol]] return df获取 贵州茅台(600519.SH) 过去5年的数据df get_data(‘600519.SH’, ‘20180101’, ‘20231231’)print(df.head())2. 策略逻辑实现向量化回测相比于循环For-loopPandas的向量化操作速度快几十倍。codePythondownloadcontent_copyexpand_less----------------------------------------------------3. 计算技术指标----------------------------------------------------计算5日和20日均线df[‘MA5’] df[‘close’].rolling(window5).mean()df[‘MA20’] df[‘close’].rolling(window20).mean()----------------------------------------------------4. 生成交易信号----------------------------------------------------信号逻辑signal 1 (持有/买入)signal 0 (空仓/卖出)初始化信号列df[‘signal’] 0当 MA5 MA20 时标记为 1 (看多)df.loc[df[‘MA5’] df[‘MA20’], ‘signal’] 1计算仓位变化1-0 是卖出0-1 是买入shift(1) 是为了避免未来函数我们只能用昨天的数据决定今天的操作df[‘position’] df[‘signal’].shift(1)df[‘position’].fillna(0, inplaceTrue)----------------------------------------------------5. 计算收益率----------------------------------------------------计算股票每日的涨跌幅df[‘pct_change’] df[‘close’].pct_change()策略收益 股票涨跌幅 * 昨天的仓位如果昨天空仓(0)今天无论涨跌都不影响策略收益df[‘strategy_return’] df[‘pct_change’] * df[‘position’]计算累计收益曲线 (复利)df[‘cumulative_stock_return’] (1 df[‘pct_change’]).cumprod()df[‘cumulative_strategy_return’] (1 df[‘strategy_return’]).cumprod()print(“回测计算完成”)3. 可视化结果数据要可视化才直观。我们将策略收益和股票本身的走势画在一起对比。codePythondownloadcontent_copyexpand_less----------------------------------------------------6. 绘图展示----------------------------------------------------plt.figure(figsize(12, 6))画出股票本身的走势基准plt.plot(df.index, df[‘cumulative_stock_return’], label‘Stock Buy Hold’, color‘gray’, linestyle’–’)画出策略的走势plt.plot(df.index, df[‘cumulative_strategy_return’], label‘MA5/MA20 Strategy’, color‘red’, linewidth2)plt.title(‘Backtest Result: MA5 vs MA20 Strategy (Moutai)’, fontsize15)plt.xlabel(‘Date’)plt.ylabel(‘Cumulative Return’)plt.legend(loc‘upper left’)plt.grid(True)plt.show()输出最终收益率stock_final df[‘cumulative_stock_return’].iloc[-1] - 1strategy_final df[‘cumulative_strategy_return’].iloc[-1] - 1print(f股票本身收益: {stock_final:.2%})print(f策略累计收益: {strategy_final:.2%})四、 结果分析与避坑指南运行上述代码后你会得到一张资金曲线图。关于收益在震荡市中双均线策略可能会频繁止损左右打脸导致跑输直接持股但在大趋势行情中如2019-2021年的茅台该策略能吃到最肥美的一段并成功躲过2022年的大跌。关于数据质量回测最忌讳数据有误。例如复权因子如果不处理股价分红除权会导致巨大的K线缺口让回测完全失真。Tushare提供了adj‘qfq’前复权参数大家在进阶使用时一定要注意复权数据的获取。五、 总结这只是量化交易的冰山一角。通过Python Tushare我们可以批量回测全市场5000只股票。加入财务指标如只买ROE15%的股票。加入资金流向分析Tushare有港资、主力资金数据。数据是量化的子弹。 建议大家先把环境搭起来跑通代码。 独家福利为了方便大家实操请务必注册Tushare获取稳定的数据权限。通过博主专属链接注册可获得额外积分支持 点击注册 Tushare Pro (推荐)如果有代码运行问题欢迎在评论区留言交流觉得有用请点赞收藏