股市跌宕起伏。7 月初 A 股飙升,从 3000 点一路涨到 3450 点。股票瞬间成为大家的热门讨论话题,「你看我还有机会吗?」几乎成为新的问候语。
但是就在上周四,A 股午后重挫,大盘绿油油一片,沪指跌 4.50%,深成指跌 5.37%,创业板指跌 5.93%,254 股跌停,A股蒸发 3 万亿,股民人均亏超 2 万。
怎么捉住时机上车,盈利下车?有没有什么方法可以帮助你做决策呢?
最近,一位常年研究股票系统的开发者 pythonstock 用 Python 写了一个股票分析系统,发布数天就获得了不少关注。
项目开始作者就特别提示了风险,「本项目只能用于 Python 代码学习,股票分析,投资失败亏钱不负责,不算 BUG。」
GitHub 地址:https://github.com/pythonstock/stock
PythonStock V1 是基于Python的pandas,tushare,bokeh,tornado,stockstats,ta-lib等框架开发的全栈股票系统。它具备以下特点:
可以使用docker直接本地部署运行,整个项目在docker hub上压缩后200MB,本地占用500MB磁盘空间。
使用Docker解决了Python库安装问题,使用Mariadb(MySQL)存储数据。借助tushare抓取数据(老API,后续使用tushare pro开发)
使用corn做定时任务,每天进行数据抓取计算,每天18点开始进行数据计算,计算当日数据,使用300天数据进行计算,大约需要15分钟计算完毕。
股票数据接口防止被封,按天进行数据缓存,储存最近3天数据,每天定时清除,同时使用read_pickle to_pickle 的gzip压缩模式存储。
使用tornado开发web系统,支持股票数据,沪深300成份股,中证500成份股,龙虎榜数据,每日股票数据,每日大盘指数行情等
数据展示系统,是通用数据展示系统,配置字典模板之后,页面自动加载数据,并完成数据展示,后续自己开发的指标数据可以加入进去。
增加曲线数据分析,在查看股票中,可以直接跳转到东方财富页面查看相关信息,点击指标之后使用Bokeh将多达 17 个指标的数据绘图,进行图表展示。
股票系统如下图所示:
每日股票指标数据总共17个指标,下面只列出三个关键指标数据。
随机指标(KDJ)一般是根据统计学的原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RSV,然后根据平滑移动平均线的方法来计算K值、D值与J值,并绘成曲线图来研判股票走势。在使用中,常有J线的指标,即3乘以K值减2乘以D值(3K-2D=J),其目的是求出K值与D值的最大乖离程度,以领先KD值找出底部和头部。J大于100时为超买,小于10时为超卖。
相对强弱指标(Relative Strength Index,简称RSI),也称相对强弱指数。(1)强弱指标保持高于50表示为强势市场,反之低于50表示为弱势市场。(2)强弱指标多在70与30之间波动。当六日指标上升到达80时,表示股市已有超买现象,如果一旦继续上升,超过90以上时,则表示已到严重超买的警戒区,股价已形成头部,极可能在短期内反转回转。(3)当六日强弱指标下降至20时,表示股市有超卖现象,如果一旦继续下降至10以下时则表示已到严重超卖区域,股价极可能有止跌回升的机会。
顺势指标又叫CCI指标,其英文全称为“Commodity Channel Index”, 是由美国股市分析家唐纳德·蓝伯特(Donald Lambert)所创造的,是一种重点研判股价偏离度的股市分析工具。(1)当CCI指标从下向上突破﹢100线而进入非常态区间时,表明股价脱离常态而进入异常波动阶段, 中短线应及时买入,如果有比较大的成交量配合,买入信号则更为可靠。(2)当CCI指标从上向下突破﹣100线而进入另一个非常态区间时,表明股价的盘整阶段已经结束, 将进入一个比较长的寻底过程,投资者应以持币观望为主。
我在一周前的一篇文章《面对股市大跌,接下来这么做就对了》对KDJ和RSI指标有详细的介绍。
然后根据KDJ、RSI和CCI 3 个指标进行股票数据计算:
KDJ
1.超买区:K值在80以上,D值在70以上,J值大于90时为超买。一般情况下,股价有可能下跌。投资者应谨慎行事,局外人不应再追涨,局内人应适时卖出。
2.超卖区:K值在20以下,D值在30以下为超卖区。一般情况下,股价有可能上涨,反弹的可能性增大。局内人不应轻易抛出股票,局外人可寻机入场。
RSI
1.当六日指标上升到达80时,表示股市已有超买现象,如果一旦继续上升,超过90以上时,则表示已到严重超买的警戒区,股价已形成头部,极可能在短期内反转回转。
2.当六日强弱指标下降至20时,表示股市有超卖现象,如果一旦继续下降至10以下时则表示已到严重超卖区域,股价极可能有止跌回升的机会。
CCI
1.当CCI>﹢100时,表明股价已经进入非常态区间——超买区间,股价的异动现象应多加关注。
2.当CCI<﹣100时,表明股价已经进入另一个非常态区间——超卖区间,投资者可以逢低吸纳股票。
购买条件结果表:guess_indicators_lite_buy_daily。
购买条件结果表:guess_indicators_lite_sell_daily。
下载 mariadb 和 stock 两个镜像
mkdir -p /data/mariadb/data
docker pull pythonstock/pythonstock:latest
docker pull mariadb:latest
启动镜像
docker run --name mariadb -v /data/mariadb/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mariadb -p 3306:3306 -d mariadb:latest
docker run -itd --link=mariadb --name stock \
-v /data/notebooks:/data/notebooks \
-p 8888:8888 \
-p 9999:9999 \
pythonstock/pythonstock:latest
创建数据库
CREATE DATABASE IF NOT EXISTS `stock_data` CHARACTER SET utf8 COLLATE utf8_general_ci;
在stock容器内运行一个终端
docker exec -it stock bash
sh /data/stock/jobs/cron.daily/run_daily
启动容器后,会调用run_init.sh 进行数据初始化,同时第一次执行后台抓取当日数据,数据库中会生成三张表ts_index_all,ts_today_all,guess_indicators_daily。 以后每日18点(只有18点左右才有今日的数据)进行股票数据抓取并计算。
ts_index_all:指数行情数据
ts_today_all:股票行情数据
guess_indicators_daily:指标数据
此外,项目作者还介绍了该股票系统设计原理、架构设计原理、应用部署要点等知识,具体使用和部署方法参见 GitHub 项目页面。