都说Python能做量化交易,我手把手带你从获取行情数据开始踩坑。
朋友问我学Python能干嘛,我说炒股票。他笑了,说韭菜也想当镰刀。我没反驳,三个月后给他看了个回测曲线。代码我倒背如流,数据买过来却是乱码。
选哪个库是个坑。tushare免费额度像挤牙膏,baostock稳但数据老。我选akshare,文档全是中文,接口直接打。pip install akshare,这步没报错就偷着乐。
写第一行代码:import akshare as ak。同事问这啥,我说股票数据接口。他盯着屏幕等输出,我等了十分钟没反应。原来没设置代理,公司网络拦着。换手机热点,数据刷出来那一刻,我差点哭了。
获取复权数据更坑。普通价格不准,前复权后复权傻傻分不清。我拿华泰柏瑞沪深300ETF练手,代码:fund_etf_hist_em_df = ak.fund_etf_hist_em(symbol='510300', period='daily', start_date='20240101', end_date='20250301', adjust='qfq')。输出出来净值是负的,平台有bug。改参数填“”,数据正常了。别信官方文档,信你自己的眼睛。
保存到本地又出问题。csv文件中文乱码,我加encoding=‘utf-8-sig’。打开Excel还是乱,换‘gbk’。你一个大学生连编码都搞不定?啊对对对,编码就是玄学。最后用pandas.to_csv加参数,再手动改文件类型。我管这叫调试的艺术。
同事问我为什么不用数据库。我说存一万条股票数据,SQLite够了。他非让我用MySQL,装完环境崩溃。我回退到csv,每天定时跑脚本就行。敢上手就是赢,别忙着上生产工具。
数据频率也是个坑。日线太粗,分钟线太细。我选5分钟线做策略,akshare的stock_zh_a_hist_min_em接口。跑历史数据时发现有不连续的跳空,原来是除权没处理。气到摔鼠标。后来写了个校验函数,发现缺失就补前值。不要追求完美数据,能跑通就行。
API调用频率有限制。每秒最多5次,我循环里加time.sleep(0.2)。跑着跑着被ban了,原来并发请求没控制。改成单线程,数据慢了但稳定。同事嘲笑我像老太太买菜,我说至少菜买回来了。
获取tick数据最难。level-2行情要花钱买,我找开源方案。websocket连上某平台,数据流断断续续。换个平台,终于稳定了。代码就一行:ws = create_connection('wss://api.xxx.com/tick')。坑在认证信息藏在环境变量里,我忘了设。
你问我文档写得怎么样。项目文件夹里只有一个README.txt,里面写着“别放弃”。真的,别放弃。每次报错都是练手,每次跑通都是进步。
最后送一段我每天跑的数据代码:import akshare as ak, pandas as pd,df = ak.stock_zh_a_hist(symbol=“000001”, period=“daily”), df.to_csv(“pingan.csv”)。就这几行,我写了三天。现在看是笑话,三个月前是眼泪。干就完了。