news 2026/5/9 2:39:58

第二篇:深入量化——Tushare数据处理与策略开发实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二篇:深入量化——Tushare数据处理与策略开发实战

在上一篇中,我们学会了如何用Tushare获取单只股票的数据并做基础可视化。但量化分析的核心,在于从数据中找规律、把规律变成策略、然后用数据验证策略的可行性。

今天我们更进一步,学习多股票数据获取、指标计算、策略构建和数据存储——这将是量化投资中日常打交道最多的几个环节。

一、批量获取多股票行情

实际分析中,往往需要同时处理多只股票的数据。下面这段代码可以批量获取某个时间区间内全部A股的日线数据:

python

import tushare as ts import pandas as pd from tqdm import tqdm # 先获取全部股票列表 pro = ts.pro_api('/你的Token/') stock_list = pro.stock_basic(exchange='', list_status='L')[['ts_code', 'name']] # 批量获取日线数据 def fetch_stock_data_batch(ts_code_list, start_date, end_date): data_dict = {} for ts_code in tqdm(ts_code_list, desc="正在获取数据"): try: df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date) if not df.empty: data_dict[ts_code] = df.sort_values('trade_date') except Exception as e: print(f"获取{ts_code}失败: {e}") return data_dict

注意:免费版每日调用次数有限,建议根据自己的需求合理安排采集范围和频率,避免超限。

二、构建双均线策略

双均线策略是量化投资最经典的入门策略之一。当短期均线上穿长期均线时,我们认为趋势向好,给出买入信号;当短期均线下穿长期均线时,给出卖出信号。

python

def dual_ma_strategy(df, fast_period=5, slow_period=20): df = df.copy() df['fast_ma'] = df['close'].rolling(window=fast_period).mean() df['slow_ma'] = df['close'].rolling(window=slow_period).mean() # 生成交易信号:快线上穿慢线时买入(1),下穿时卖出(-1) df['signal'] = 0 df['signal'] = np.where(df['fast_ma'] > df['slow_ma'], 1, 0) df['position'] = df['signal'].diff() return df # 对茅台数据应用策略 result = dual_ma_strategy(df) result[['close', 'fast_ma', 'slow_ma', 'signal', 'position']].tail(20)

得到position列:1表示买入,-1表示卖出。这个简单的框架,就是量化策略最底层的逻辑骨架。

三、策略可视化

python

fig, axes = plt.subplots(2, 1, figsize=(16, 12), sharex=True) # 价格与均线 ax1 = axes[0] ax1.plot(df.index, df['close'], label='收盘价', color='blue', alpha=0.6) ax1.plot(df.index, result['fast_ma'], label='5日均线', color='orange', linewidth=1.5) ax1.plot(df.index, result['slow_ma'], label='20日均线', color='green', linewidth=1.5) ax1.set_title('双均线策略 - 价格与均线', fontsize=14) ax1.set_ylabel('价格') ax1.legend() # 买卖信号 ax2 = axes[1] buy_signals = result[result['position'] == 1] sell_signals = result[result['position'] == -1] ax2.plot(df.index, df['close'], color='gray', alpha=0.5, label='收盘价') ax2.scatter(buy_signals.index, buy_signals['close'], marker='^', color='red', s=100, label='买入信号', zorder=5) ax2.scatter(sell_signals.index, sell_signals['close'], marker='v', color='green', s=100, label='卖出信号', zorder=5) ax2.set_title('买卖信号标注', fontsize=14) ax2.set_ylabel('价格') ax2.legend() plt.tight_layout() plt.show()

四、数据存储到本地数据库

量化分析需要大量历史数据,每次都从API拿并不现实。建议采用三级存储架构:

  • 热数据层:Redis缓存最近数据

  • 温数据层:PostgreSQL存储1-5年数据

  • 冷数据层:HDFS/本地文件存储全量历史

即便是初学者,也推荐至少将数据存入本地SQLite数据库:

python

# 使用to_sql存入本地数据库 from sqlalchemy import create_engine engine = create_engine('sqlite:///stock_data.db') df_basic = pro.stock_basic(exchange='', list_status='L') df_basic.to_sql('stock_basic', engine, if_exists='replace', index=False) print("✓ 数据已存入本地数据库") # 从本地数据库读取 df = pd.read_sql("SELECT * FROM stock_basic WHERE industry IS NOT NULL", engine)

小结:今天我们从单只股票跨越到了多股票分析,从简单可视化跨越到了策略构建,还学会了将数据存入本地。这些都是量化投资日常工作中最实用的技能。下一篇,我们将迈向真正的高阶领域——多因子模型和机器学习预测。

推荐阅读:上一篇请戳这里https://blog.csdn.net/ted_hou/article/details/160868971

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 2:38:56

天线设计:从基础原理到工程实践的全方位解析

1. 天线设计的魅力:从简单使命到无限创意天线,这个在射频信号链中首当其冲(或最后出场)的元件,其设计领域所展现出的活力与创造性思维,总是让我这个老工程师感到惊叹。我说的不是那种用于克服信号衰落、多径…

作者头像 李华
网站建设 2026/5/9 2:35:28

Product Hunt 每日热榜 | 2026-05-08

1. FlowMarket 标语:一个由人工智能代理构成的社交网络,用于创造企业间的交易。 介绍:FlowMarket 是一个由人工智能代理组成的网络,能够自动发现、匹配和生成B2B交易。你只需几分钟就能创建自己的代理,并让它全天候运…

作者头像 李华
网站建设 2026/5/9 2:32:31

FPGA验证变革:从实验室调试到覆盖率驱动与系统化方法

1. 从“美好明天”到“切肤之痛”:FPGA开发范式的变迁十几年前我刚入行那会儿,听前辈们聊起EDA(电子设计自动化)工具的销售,场景还挺有意思。那时候,Daisy、Mentor、Valid(业内戏称DMV&#xff…

作者头像 李华
网站建设 2026/5/9 2:30:50

登录获取token和刷新token两个接口是怎么用的???

登录获取 Token 和刷新 Token 是两个配合使用的接口,下面是完整的使用流程和代码实现。一、两个接口的作用接口类型使用时机返回内容有效期登录接口用户首次登录accessToken refreshTokenaccessToken 短期(如30分钟)refreshToken 长期&#…

作者头像 李华
网站建设 2026/5/9 2:30:43

AndroidClaw:基于LLM与无障碍服务的手机端AI智能体开发实践

1. 项目概述:一个运行在手机上的AI“操作员” 最近在捣鼓一个挺有意思的东西,我把它叫做“AndroidClaw”。简单来说,这是一个直接运行在你安卓手机上的AI智能体。它的核心目标,是让大语言模型(LLM)能真正“…

作者头像 李华