自从上次写了一篇东方财富被封技术文章,不少同学留言吐槽都遇到这种问题, 这里再谈行情数据源。
毕竟量化分析,行情数据源是关键。没有高质量的数据,分析就无从谈起。
这里从个人角度分析, 获取量化行情数据源的推荐技术方案。
如果需要新开户,可以联系我。 一个人最多3个账户,也提供其他券商的销户流程。
代码类似:
from xtquant import xtdata
import pandas as pd
def get_history_data(symbol, period='1d', start_date='', end_date='', adjust='none'):
"""
封装类似 AkShare 的历史行情接口
:param symbol: 股票代码(如 "000001.SZ")
:param period: 周期,可选 1d/1m/5m/tick 等
:param start_date: 起始日期(格式 20230101)
:param end_date: 结束日期(格式 20231231)
:param adjust: 复权类型,none/front/back
:return: pd.DataFrame
"""
# 1. 下载历史数据(增量下载避免重复)
def on_progress(data):
print(f"下载进度: {data['finished']}/{data['total']}")
xtdata.download_history_data2(
stock_list=[symbol],
period=period,
start_time=start_date,
end_time=end_date,
callback=on_progress
)
# 2. 查询本地数据
data = xtdata.get_market_data_ex(
field_list=['time', 'open', 'high', 'low', 'close', 'volume', 'amount'],
stock_list=[symbol],
period=period,
start_time=start_date,
end_time=end_date,
dividend_type=adjust,
fill_data=True # 自动填充停牌数据
)
# 3. 转换为 AkShare 风格 DataFrame
df = data[symbol].reset_index()
df = df.rename(columns={
'time': '日期',
'open': '开盘价',
'high': '最高价',
'low': '最低价',
'close': '收盘价',
'volume': '成交量',
'amount': '成交额'
})
df['日期'] = pd.to_datetime(df['日期'], format='%Y%m%d%H%M%S') # 统一时间格式
return df.set_index('日期')
# 示例调用
df = get_history_data(symbol="000001.SZ", period="1d", start_date="20240101", adjust="front")
print(df.head())如果从0开始,不需要用到其他第三方库, 对于Python薄弱的同学来说,直接使用大QMT编写策略可能相对容易,直接可以回测。 miniqmt的话需要你自行搞定回测等。
另外,借助AI 实现基础的策略没太大问题。边调试边修改呗。
如果你在乎策略的隐私性, 且不希望花钱,这种技术方案是首选。 不管是选择本地运行 (机器开着耗电) ,还是购买云服务器(现在云服务器不算贵,买个便宜的机器一年几十块)。
二、恒生电子的Ptrade
如果你不想购买云服务器,本地一直开着耗电, 且在意交易速度,恒生电子的Ptrade 是你的另外一个选择。
ptrade跑在服务端上。你的策略,其实在券商的服务器上跑,你关掉客户端以后,策略也能正常运行,这对于一些上班族来说比较友好。 如果你care策略的隐私安全性, 那还是选择qmt。
三、Tushare
如果你用的是mac,不想用windows,也没有在windows自动交易的需求。 那么tushare是你的另一个选择。
官方花几百块购买5000积分, 如果仅仅学习研究,淘宝上看看XX块的共享账号研究(个人不推荐哈,毕竟共享账号可能存在不稳定情况)。
另外,像 akshare、mootdx 、wencai等 目前看或多或少有了限制, 今后还不知道会怎么改版。 如果你希望一劳永逸,自己的量化程序更稳定, 上面可能是你最合适的选择。毕竟你不想一直修改程序吧。
最后说一句,免费的东西可能是最贵的,耗费的是时间精力。除非你认为自己的时间不值钱。