机器学习炒股python
大家好,我是林路。小伙伴们期盼已久的量化交易教程,今天它来了!
有不少小伙伴,一直很关心我量化交易的实战情况,经常会被问到:5 万元,现在赚了多少?
这里统一回复下,目前浮盈 6%。
远低于我的预期,这跟大盘的走弱脱不开关系。9 月开始即巅峰,一路惨遭滑铁卢,大盘再也没回到过 3700 点,属实有些惨淡。
不过越是这种冷清的时候,越是充能学习的时刻。
我最成功的一笔投资,不是买了哪支股票,而是自学了很多有趣的技术。
我还是那句话,最好的投资,就是投资自己!
回顾了自己的这一年,收获良多,我学到了很多新技术。
今天,我们继续聊量化交易
量化交易,说白了,主要分为三个部分:
炒股数据获取选股& 择时策略交易系统对于一些低频的交易策略,甚至都用不上交易系统,手动操作都行。
Udata
一个稳定的炒股数据获取接口很重要,可以自己写爬虫爬数据,但这样太不稳定。
今天给大家推荐一个好用的 API 接口:
https://udata.hs.net
Udata 大牌子,是深耕金融领域 30 年的恒生电子推出的金融数据社区。
恒生电子大家应该都听过,近千亿市值的大公司,用数据这种事,找这类背景好的社区准没错。
今天我就以 Udata 提供的 API 股票接口为例,来一期保姆级的量化交易教程。
Udata 安装
我们先从 Udata 的安装开始讲起。
首先要搭建一个 Python 的开发环境,Python 开发环境不会搭建的,可以看我之前发布的一篇教程:
一劳永逸的 Python 环境搭建方法
Udata 可以使用 pip 安装。
pip install hs_udata
这样就表明安装好了。
然后注册个 Udata 账户,订阅一个体验套餐。各个社区都是一样的,都有免费的体验套餐给初学者使用。
注册并订阅号后,获取 token。
https://udata.hs.net/console/overAllView
打开链接,就能看到 token 获取方式,直接复制即可。
然后使用如下代码,就可以获取数据了。
from hs_udata import set_token, stock_list # 引入 hs_udata 模块中 set_token 和 stock_listif __name__ == "__main__": # 替换你的 token,查看 token 地址:https://udata.hs.net/console/overAllView set_token(token = 'xxxxx') # 获取 股票列表数据,返回格式为 dataframe data = stock_list() # 打印数据前 5 行 print(data.head())
有正确的数据结果了,那恭喜你,配置成功!
量化分析
数据搞定了,我们就可以利用这个 API 接口,做一些策略。
无论是选股,还是择时交易,都可以使用这个 API 接口的数据进行。
Udata 的 API 文档写得很全面:
https://udata.hs.net/datas/202/
应有尽有:
之前的教程,给大家讲解过 ETF 动量轮动策略。
今天来点不一样的,基础的分析技巧,也是我们必备的基本功。
比如画个 K 线,可视化工具,可以直接使用 pyecharts。
如果没有安装这个库,可以先使用 pip 安装一下。
pip install pyecharts
pyecharts 的使用非常简单,可以直接看手册。
https://pyecharts.org/#/zh-cn/intro
我们结合 Udata 的数据获取 api 接口和 pyecharts 可视化工具,就可以自己绘制 K 线。
import hs_udata as udatafrom datetime import datetime, timedeltaimport timefrom pyecharts import options as optsfrom pyecharts.charts import Klineif __name__ == "__main__": # 替换你的 token,查看 token 地址:https://udata.hs.net/console/overAllView udata.set_token(token = 'xxxxx') current_dt = time.strftime("%Y-%m-%d", time.localtime()) current_dt = datetime.strptime(current_dt, '%Y-%m-%d') # 获取 30 天的数据 day_num = 30 all_data = [] all_date = [] for i in range(1, day_num + 1)[::-1]: search_date = current_dt - timedelta(days = i) search_date = search_date.strftime("%Y%m%d") # 恒生电子近 30 日的股价 data = udata.stock_quote_daily(en_prod_code = "600570.SH", trading_date = search_date) # 开盘价 open_price = data['open_price'][0] # 收盘价 close_price = data['close_price'][0] # 最低价 low_price = data['low_price'][0] # 最高价 high_price = data['high_price'][0] # 去掉非交易日数据 if len(open_price) == 0: continue all_date.append(search_date) all_data.append([float(open_price), float(close_price), float(low_price), float(high_price)]) # 使用 pyecharts 绘制 K 线 c = ( Kline() .add_xaxis(all_date) .add_yaxis( "K线", all_data, itemstyle_opts = opts.ItemStyleOpts( color = "#ec0000", color0 = "#00da3c", border_color = "#8A0000", border_color0 = "#008F28", ), ) .set_global_opts( xaxis_opts = opts.AxisOpts(is_scale = True), yaxis_opts = opts.AxisOpts( is_scale = True, splitarea_opts = opts.SplitAreaOpts( is_show = True, areastyle_opts = opts.AreaStyleOpts(opacity = 1) ), ), datazoom_opts = [opts.DataZoomOpts(type_ = "inside")], title_opts = opts.TitleOpts(title = "恒生电子近 30 日 K 线"), ) .render("kline.html") )
运行成功后,会生成一个 kline.html 文件,用浏览器打开这个 html 文件,就可以看到绘制效果了。
可能有小伙伴会问,这都是炒股软件现成的,为什么要自己绘制?
只有亲自写代码后,你才能深刻认识到每个数据背后所代表的含义。这是一个很好的,帮助我们学习的过程。更重要的是,等我们熟练之后,可以根据自己的各种需求,定制化自己独家炒股界面。
你可以监控自己想要监控的所有信息。
像什么 KDJ、MACD 等各种指标,我们都是可以自己计算并可视化出来的。
不再受限于炒股软件的一些指标,甚至一些炒股软件的付费因子,我们都可以自己计算。
再比如,我们可以使用数据,做一些自己不了解的分析。举个非常简单的例子,你知道 A 股的行业分布情况吗?
几行代码就可以搞定。
import hs_udata as udatafrom pyecharts import options as optsfrom pyecharts.charts import Piefrom tqdm import tqdmif __name__ == "__main__": # 替换你的 token,查看 token 地址:https://udata.hs.net/console/overAllView udata.set_token(token = 'xxxxx') # 获取所有股票 data = udata.stock_list(listed_state = "1") codes = data['hs_code'].tolist() industry_name_dict = {} # 遍历股票 for code in tqdm(codes): # 获取股票行业信息 data = udata.industry_category(en_prod_code = code) industry_name_csrc = data['industry_name_csrc'][0].split("-")[0] # print(industry_name_csrc) # 统计行业数量 if industry_name_csrc not in industry_name_dict.keys(): industry_name_dict[industry_name_csrc] = 1 else: industry_name_dict[industry_name_csrc] += 1 # 可视化 c = ( Pie() .add( "", [ list(z) for z in zip( industry_name_dict.keys(), industry_name_dict.values(), ) ], center=["40%", "50%"], ) .set_global_opts( title_opts=opts.TitleOpts(title="A 股股票行业分布"), legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"), ) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) .render("pie.html") )
运行代码,打开 pie.html ,即可查看 A 股股票的行业分布情况。
制造业半壁江山啊!
除了这种简单的行业统计,我们还可以统计每日的龙虎榜情况,监控股东持股情况,资金流向等。
根据股票的每日价格,我们还可以计算各种因子,辅助我们决策。
根据自己的需求,来个私人定制,搭建自己的交易体系。
当然了,师傅领进门,修行看个人。能写的内容太多了,篇幅有限,今天先教一些基础的玩法。这个系列教程,还会继续更新的。
絮叨
最后再多说两句,一直有不少小伙伴问我,卖系统不?卖源码不?卖服务不?
这样的询问,自从发了那期量化炒股的文章后,就没有断过。
说实话,还是建议自己学技术,自己写策略,那多香啊!真的,一切并没有那么难,日积月累,慢慢学,学习用代码赚钱的过程,是一件很有趣的事情。
作者:Jack Cui
原文链接:https://mp.weixin.qq.com/s/80jJbVZinbEz-ocwQsjfPw