码农技术炒股之路——数据源选择

在给本系列博文拟定标题时,我原先写下的是《股票交易信息获取及分析系统》。之后感觉这个名字过于高大上,又不自觉的在草稿中写下《码农技术炒股之路》。这个名称让我会心一笑,因为它即突出了我的身份,又点名了本系列博文要介绍的东西——技术炒股。最后“之路”一词可以让我好好介绍下这个项目的前因后果,希望大家也感受下这个项目的温度,因为它的产生并非我一人杜撰出来的愿景。(转载请指明出于breaksoftware的csdn博客)

首先回忆下我入市的经历。我非常荣幸的于15年5月进入A股市场,然后就经历了难得一见的股灾,其结果是我现在仍然在努力的“回本”。最开始时,选择股票我也是人云亦云——我相信现在很多人炒股都是如此。之后便沉下心来做一些技术分析,因为我相信A股市场还是一个庄家炒散户的投机性市场,而我们这些小散要做的就是顺势而为。于是“势”的预测是一个重点。预测是需要数据的,而我们一般人都很少有这么大量且完整的历史数据,这是摆在技术炒股人面前的第一个难题。假如我们解决了这个难题,剩下的就是我们如何设计一个“盈”率很高的模型,这是第二个难题。

第一个难题的解决方案将是《码农技术炒股之路》的重点。因为它具有很大的确定性,即每个人都要获取的是准确的数据。而第二个难题就具有多样性了,因为“仁者见仁智者见智”,每个人都有自己喜欢的技术指标。即使两人喜欢运用的技术指标相同,也可能喜欢不同的指标特征。所以这块内容我将在最后做个介绍,并运用点简单的指标来筛选股票。

目前来说,上述两个问题都有比较简单的解决方案——直接使用工具软件。我们日常使用的同花顺、大智慧等软件都提供了编写公式分析股票的功能。如果读者觉得工具软件提供的功能足够使用,那么这系列博文剩下的内容可能就没什么乐趣了。因为这类软件可以让我们更多的关注于“模型”而非本系列介绍的重点——“数据”。如果觉得这些软件提供的信息还不够,或者它们的分析还非常低效,时效性差——我想这是真正探究过这些软件公式的人的真实想法,则本系列博文将向你介绍我解决这些问题的思路,供大家借鉴批判。

介绍了这么多背景,现在我们开始回归技术。因为技术才是我们介绍的根本。

获取方式

数据获取方式的选择是至关重要的,因为它关系到整个系统的稳定性和持久性。我们先来看看几种获取方式及其优劣:

  1. 从第三方购买。作为个人用户,我们无法预测做出来的东西是否可以带来足够的价值。而尝试的第一步却是付费,我想很多人选择说no。当然对于企业级用户来说,购买第三方服务是不错,毕竟服务方可以提供数据源稳定性保障。
  2. 分析闭源软件协议。我们可以分析同花顺、大智慧等软件的通信协议,也许可能很方便获取我们所要的数据。但是这个方案相对来说非常不够光明正大,而且做一款非安全类产品的第一步就切入安全领域,可能就不太合适。再说个题外话,我对比过我“抓取和计算的数据”和“同花顺的数据”,其实同花顺里一些计算型数据是错误的,这个我们之后会介绍。
  3. 通过免费的第三方获取。网上有个tushare的免费项目,大家可以通过它获取股票数据。我看了下的确不错。因为我没有使用它,所以我也没法说出其缺点。但是我还是希望所有数据都是掌握在我自己手里,特别是在做大量数据测试时,每次都要通过网络去取数据,其效率当然不如我直接在本地数据库和内存里来的快。
  4. 自己抓取并保存到数据库。优点显而易见——我们自己掌控一切,缺点也显而易见——我们要负责一切。好在我们做技术的最不怕的就是“负责一切”。

数据源

数据源的选择也是非常重要的。因为我们是从头开始搭建整个系统,所以历史数据是空的。于是我们可以获取的数据如下:

  • 个股历史数据,以日为单位。
  • 个股实时数据,以秒为单位。
  • 个股单日收盘数据,以日为单位。
  • 所有股票代码和股票名称。

由于个股以秒为单位的历史数据非常大,且我认为过去的已经失去时效性,所以没有将其列入我要抓取的范围之中。

个股基本信息——市场类型、代码、名称

由于经常有新股上市,所以我们的股票池中会不定期新增一些股票。而其他接口都是以股票代码为参数,所以在抓取个数数据之前,我们先要获取当前市面上所有股票的基本信息——代码和名称。抓取的URL是:

http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx/JS.aspx?type=ct&st=(FFRank)&sr=1&p=1&ps=3500&js=var%20mozselQI={pages:(pc),data:[(x)]}&token=894050c76af8597a853f5b408b759f5d&cmd=C._AB&sty=DCFFITAM&rt=49461817

我们先看下这个URL的重要参数,上面例子中p为1是代表获取第1页的数据,ps代表每页获取的股票数据。由于目前A股股票不足3500支,所以我就将URL中ps参数设置为3500,即抓取全部股票数据。对于数据抓取参数的设置,我的一个原则是——最安全的最大化一次性拉取。其他参数可以一直重用,不用反复变更——哪怕是token字段。(该接口在本文撰写时2017-03-29仍是有效的)

我们看看通过上述接口,获取2支股票时接口返回信息

var mozselQI={pages:1703,data:["1,603656,泰禾光电,55.90,100.00,1,10.00,78.19,8,61.05,74.11,12,-,机械行业,BK05451,2017-03-29 15:00:00","2,002774,快意电梯,11.69,100.00,2,9.97,41.78,31,-,41.78,31,-,机械行业,BK05451,2017-03-29 15:00:00"]}

结果中=号右侧为一个json格式数据。data字段是一个字符串数组,其中每个字符串是一支股票信息。字符串中数据以逗号分隔。第一个字段可以是1或者2,1表示沪市、2表示深市。第二个字段是股票代码。第三个字段是股票名称。因为我们尚不用获取诸如市值等信息,所以上述接口可以满足获取其最基本信息的需求。最主要的是该接口可以一次性拉取所有股票数据。(该接口从http://data.eastmoney.com/zjlx/list.html#sha网页请求中分析得出,如果以后该接口不能用,大家可以尝试照此分析)

个股历史数据

历史数据我只关心“天”级别的数据。这儿要非常感谢网易,它提供了一个非常简便的接口。以000001股票为例,数据可以从http://quotes.money.163.com/trade/lsjysj_000001.html网页中下载数据。我们再深挖一下该网页,可以发现数据的直接下载地址是:http://quotes.money.163.com/service/chddata.html?code=1000001&start=19910102&end=20170329&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP

code字段是由市场类型和股票代码组成。第一位如果是0,代表股票为沪市的;如果是1,则代表是深市的。之后跟着的6位则是股票代码。

start字段是数据抓取的起始时间,end是数据抓取的结束时间。

fields字段表示要抓取的数据类型。这个组合是以分号分割,我们可以根据自己的需求确定抓取那些数据。

抓取的数据是以csv格式返回的,对这种格式不熟悉的朋友可以查看《一种准标准CSV格式的介绍和分析以及解析算法》一文。最后我们看下000001股票的抓取结果节选

日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值
2017-03-29,‘000001,平安银行,9.11,9.15,9.09,9.13,9.12,-0.01,-0.1096,0.3553,60114068,548060692.96,1.56422447544e+11,1.54123045938e+11
2017-03-28,‘000001,平安银行,9.12,9.17,9.1,9.16,9.14,-0.02,-0.2188,0.2845,48137276,439405816.17,1.56594151658e+11,1.54292226011e+11

个股实时数据

个股实时数据的内容则比较繁杂,比如有股价、竞卖情况、竞买情况,还有更高级的如大资金流入流出、中资金流入流出、小资金流入流出等数据。所以这块数据我们可能没法通过一个接口一次性获取。

这儿提供一些比较有价值的数据源(以000001为例):

  • 交易明细。可以从http://quotes.money.163.com/trade/cjmx_000001.html中分析出请求数据的URL:http://quotes.money.163.com/service/zhubi_ajax.html?symbol=000001&end=11%3A26%3A00,其中end是抓取的截止时间。这个接口的有效性是5分钟,即如上例中是请求截止时间是11:26:00,则取出的是11:21:00到11:26:00之间的交易明细。
  • 大单统计。可以从http://quotes.money.163.com/trade/ddtj_000001.html#01b03中分析出请求数据的URL:http://quotes.money.163.com/service/dadan_data.html?symbol=000001&amount=500000&page=0。amount代表成交金额的最低下限,即该请求得到的数据是成交金额大于50万的交易记录。但是该返回是HTML格式数据,分析起来相对麻烦。
  • 股价和竞买竞卖。这些数据我们可以通过http://hq.sinajs.cn/list=sz000001机构获得。之所以选用该接口,是因为它接收批量请求,即一次可以获取多支股票的数据。当然数量也是有限制的,所以之后在抓取时,我们需要对股票进行分片请求。我们看下返回结果
    var hq_str_sz000001="平安银行,9.120,9.110,9.070,9.120,9.060,9.060,9.070,38301159,347937617.390,2913880,9.060,2622600,9.050,2205600,9.040,994700,9.030,871800,9.020,122460,9.070,755266,9.080,729720,9.090,771040,9.100,937120,9.110,2017-03-30,11:35:00,00";

    其字段的对应关系如下:股票名称,今日开盘价、昨日收盘价、当前价格、今天最高价、今天最低价、竞买价、竞卖价、成交量、成交总价、买1数量、买1价格、买2数量、买2价格、买3数量、买3价格、买4数量、买4价格、买5数量、买5价格、卖1数量、卖1价格、卖2数量、卖2价格、卖3数量、卖3价格、卖4数量、卖4价格、卖5数量、卖5价格、当前日期、当前时间、未知字段(可能代表股票是否退市)

  • 大、中、小资金流入情况。这个数据我们可以通过http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx/JS.aspx?type=ct&st=(BalFlowMain)&sr=-1&p=0&ps=1&js=var%%20vDUaFOen={pages:(pc),date:%%222017-13-21%%22,data:[(x)]}&token=894050c76af8597a853f5b408b759f5d&cmd=C._AB&sty=DCFFITA&rt=49430148获取。其中p代表页码数,ps代表每页多少支股票数据。另一个加粗字段则代表时间。我们看下去返回
    var% vDUaFOen={pages:3408,date:%"2017-13-21%",data:["1,600545,新疆城建,15.04,10.02,35911.38,19.12,37222.87,19.81,-1311.49,-0.70,-21393.11,-11.39,-14518.27,-7.73,2017-03-30 13:25:28"]}

    其字段的对应关系是:市场类型(1沪市,2深市)、股票代码、股票名称、股价、涨幅、主力进流入、主力进流入占比、超大单净流入、超大单净流入占比、大单净流入、大单净流入占比、中单净流入、中单净流入占比、小单净流入、小单净流入占比、时间。

掌握了这么多数据源,下一步我们看看如何设计一个良好的架构和程序结构来让它们发挥价值。

时间: 2024-10-12 22:45:36

码农技术炒股之路——数据源选择的相关文章

码农进“城”之路

编程开发是座围城,而我,一直是个城外人. 首次产生进"城"的想法,源于一次跟大学旧友的聊天.作为一个机械院毕业的直男,当时的我已在车间工作了一段时间.忽闻同班同学转职成功,从车间转战办公室,还是从事的软件行业,虽然当时的我并不明白软件实施和软件开发半毛钱关系都没有,但对我来说,他们都带软件两个字,听着就很前沿,顿时让我心驰神往.跟他聊几句之后,我便草草的制定了自己认为的进"城"计划.很显然,我的第一步计划完全效仿人家,我也要成为一名软件实施工程师!简单的上网搜了半天

二次元码农的成长之路(二)json到底有什么用途

写的有问题请指出 一.什么是json 1json指的是javaScript的表示方法 2JSON是轻量级的文本数据交换格式 3 Json是独立语言 4 json具有自我描述性 更易理解 二.语法规则 1对象表示为键值对 2数据由逗号分隔 3花括号保存对象 4方括号保存数组 比如{"name","Tom","age":"19"},{"student"=[{"name":"Tom&

码农的奋斗之路 穷爸爸富爸爸系列-致富需要做的六件事 读后感

很多人在财务上挣扎,他们只知道为钱而工作,但却从未想过如何让钱为自己工作.每个人都该思考的问题!!! 第一件事  做好为财务自由付出努力的准备 安稳的代价 省吃俭用的代价 这两方面都不做.其他途径---财商! 第二件事 不要怕犯错,但要善于从错误中吸取经验 从错误中学习,敢于试错,前提是你迈出第一步出去,即便迈出后错了,人生很长,错不可怕,要学会从错误中吸取经验. 第三件事 按信息时代的法则对自己进行教育 基本的金融教育 现金流 一般所得 证券投资组合 被动收入 职业收入 你的成功取决于有多少答

”去他丫的北上广,老子要去成都定居了!“一名33岁老码农有话说

"不后悔来成都,这里真的生活质量相比北京.深圳要高很多,巴适的很",这是老叶最近和我聊天聊的,老叶是一名工作12年的程序员,在北京,深圳都呆过,一直没有合适的城市让他心安或者是有归属感,来成都后,就定下了自己以后都在这座城市了. 老叶是湖南人,12年前,从一个一般二本学校毕业后,还是个初生牛犊不怕虎的小伙子,毕业后,就去闯北京,起初是求生存,在北京一家小公司干着,月薪只有3000,相比现在年轻人一毕业拿的薪资,可以说非常低了.求生存是在北京的第一步,那时老叶住在北京靠近中关村一个叫树村

Java架构师之路:从Java码农到年薪八十万的架构师,最牛Java架构师进阶路线

从Java码农到年薪八十万的架构师,资深架构师大牛给予Java技术提升学习路线建议,如何成为一名资深Java架构师? 对于工作多年的程序员而言,日后的职业发展无非是继续专精技术.转型管理和晋升架构师三种选择.架构师在一家公司有多重要.优秀架构师需要具备怎样的素质以及架构师的发展现状三个方面来分析 程序员如何才能晋升为优秀的高薪架构师? 希望通过本文让程序员们了解架构师的市场行情,了解架构师的发展前景,并帮助你更清晰地做出职业规划. 架构师在一家公司有多重要 架构师在公司中担当着「IT架构灵魂人物

从初级“码农”到高级“架构”,我的成长之路(Java向)

我是如何走上技术这条路的? 2008 年大学毕业,我离开了母校武汉理工大学,在院长老师的推荐下,我来到了上海,这个对于我来说非常陌生的地方.我有幸加入了一家创业公司,刚开始工作的时候我学习了什么是云计算?什么是 SaaS.PaaS.IaaS?我们花了三年时间开发了一款PaaS 平台,让用户可以在该平台上量身定制自己的软件,最终为客户提供基于 SaaS 的产品.确实很骄傲,那时我们已经在做云了,只是没想到后来云会在中国得到这么好的市场. 在 2008 年,我为公司拿回了"第一桶金",这也

今天在CSDN看懂这个帖子,也是我的困惑,记录一下(过了三十的码农,你选择的是哪个,说出你的想法)

http://bbs.csdn.net/topics/390944177 1.继续开发生涯,做资深码农,从senior.team lead.tech lead到principal,如果你无欲无求,可以安心做个普通的码农,跟少林的扫地僧那样,隐藏得很深,很深...2.转做设计和架构,譬如architect3.转型做咨询,譬如consultant,这个在外国很流行,收入也比普通开发人员高4.转型做管理,譬如project manager,director, 技术总监,CTO等5.转型做测试,遇到过这

工作那些事(十一)谈谈码农与农民工区别和发展之路

今天看到帖子: (从这里开始引用,红色为批注) http://bbs.csdn.NET/topics/390610815?page=1#post-395774111 发表于: 2013-10-10 14:24:29 现在才感悟到,码农与农民工真正区别: 1.农民工晚上不加班,因为打扰居民生活会被告.  码农要加班.农民工也很辛苦,起的很早,并且也要有手艺. 2,农民工下班,想喝酒,去买,想吃烧鸡,买一只.  码农晚饭,快餐店,解决.想吃只鸡,要掂量掂量月底怎么办.农民工有说的那么好吗? 3.农民

【头条】造风扇技术那家强,码农为自己的翔代言

码农自己制作小风扇,妈妈再也用不担心我们夏天晚上被热醒了. 简要描述: 硬件线路连接=>硬件编程=>软件编程 实现功能 : 1.红外线遥控板 控制风扇开关 挡速 2.液晶显示器 显示风扇的工作情况 3.客户端 显示风扇工作情况 4.开启风扇时 记录上次的挡速 关键技术:         1.硬件中断         2.红外线通信         3.串口通信         4.FALSE存储 硬件截图: 客户端软件截图: 硬件编程源码: 1 /***********************