七天学会「股票数据分析软件」的开发(中)
两天前,我写了 七天学会「股票数据分析软件」的开发(上),号召大家尝试着写写代码,不知道大家进度如何。
如果存在掌握一种技能的刚需,而且知道正确的学习方法,经过刻意练习,这门技能很快就能玩儿的有模有样,但想精进这门技能,就需要靠时间的积累了。有关学习编程的方法,可以参考我的另外一篇图文 学不会编程?试试我的方法。
言归正传,我们继续 「股票数据分析软件」的开发第二部分 – 数据的分析。
由于我们使用的量化模型非常简单,可以参考图文 赚钱是刚需,如何正确的交易股票?。所以 数据分析部分 主要解决两个问题,第一个,计算 沪深300交易数据的分位数。第二个,数据的读取与更新。
我们先说 计算 沪深300交易数据的分位数。由于两年沪深300交易数据的数量大概 490 条左右(远远超过100条),所以我在另一篇图文 如何通过Matlab验证自己的交易策略? 中给出的计算分位数的方法 GetPer(Data)
是简化的版本。
如果数据量小只有两条。比如 double[] = new doulbe[]{0,1}
,25分位数应该是 0.25 而非 0,75分位数应该是 0.75 而非1。严密的求解算法,应该在对数组由小到大排序后,计算分位数对应位置的前后两个数值,然后按照比例折算求得。具体的求解方法参见维基百科相应部分 https://en.wikipedia.org/wiki/Percentile。
有了算法,我们就可以进入编程实现环节,首先构造一个对 double
数组的扩展方法 Quartiles,给定分位数 p
,得到该分位数对应的数值。参数 alreadySorted
用来说明数据 double[] values
是否已经由小到大排序。
public static double Quartiles(this double[] values, double p, bool alreadySorted)
{if (!alreadySorted){values = (double[]) values.Clone();Array.Sort(values);}if (values.Length == 1) return values[0];if (p >= 100) return values[values.Length - 1];if (p < 1) return values[0];int len = values.Length;double pos = p*(len - 1.0)/100;double fpos = Math.Floor(pos);double dif = pos - fpos;int intPos = (int) fpos;double lower = values[intPos];double upper = values[intPos + 1];return lower + dif*(upper - lower);
}
我们接着构造另外一个 double
数组的扩展方法 Percentile,给定数值 value
,得到该数值对应的分位数。参数 alreadySorted
含义同上。
public static int Percentile(this double[] values, double value, bool alreadySorted)
{if (values.Length < 2){throw new Exception("values数组元素个数需要大于等于2.");}if (!alreadySorted){values = (double[]) values.Clone();Array.Sort(values);}if (value <= values[0]) return 1;if (value >= values[values.Length - 1]) return 100;int i;for (i = 0; i < values.Length; i++){if (values[i] >= value){break;}}double lower = values[i - 1];double lowerp = i == 1 ? 0.01 : (i - 1.0)/(values.Length - 1.0);double upper = values[i];double upperp = i/(values.Length - 1.0);double dif = (value - lower)/(upper - lower);double result = lowerp + (upperp - lowerp)*dif;return (int) (result*100);
}
第一个问题到这里就结束了,我们来解决第二个问题 – 数据的读取与更新。为了避免重复计算,我也建立了一张数据表 Stock_AnalysisLog
用来记录数据分析的日志。该表包含字段如下:
- 股票代码
- 年份
- 季度
- 开始日期
- 结束日期
- 备注
数据分析与更新的步骤如下:
Step1:读取数据分析日志,确定需要分析的数据。
Step2:确定分析所需的历史数据是否完备。即数据库中已经存储了计算两年分位数的全部数据,如果数据不完备则提示先要下载历史数据。下载历史数据的功能我们已经在 七天学会「股票数据分析软件」的开发(上) 中介绍完毕。
Step3:分析数据并把结果写入数据库。即把数据取出,计算分位数,然后把计算结果存回数据库。
Step4:记录分析数据的日志。
经过以上四个步骤,数据的分析与更新就全部搞定了。最后,看看我做的Demo:
分析数据:对选中年份、季度的数据进行分位数计算,并显示结果。如下图所示:
查看日志:查看分析和更新数据的日志。如下图所示:
查看数据:查看数据库中选中年份、季度的所有数据。如下图所示:
导出数据:把计算的结果导出到EXCEL表格中。如下图所示:
到此,七天学会「股票数据分析软件」的开发 第二部分就结束了,如果大家遇到什么问题给我留言,我给大家答疑。
经过第一部分,我们从 新浪财经 把股票的数据爬取下来并存入数据库中。经过第二部分,我们把爬取下来的数据进行分析处理,并把分析的结果存入数据库中。就剩下第三部分,把这些分析的结果可视化展示就OK啦。 See You 我们下次见。
相关文章:

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划
1.1 生成执行计划 在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID。而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本的游标&#…

软件测试培训:高薪测试技术要掌握哪些
职业技能一 1. 软件测试: 1) 熟练灵活地运用等价类、边界值、判定表法、因果图法等各种方法设计测试用例,包括单元测试、集成测试、系统测试用例设计。 2) 牢固掌握了软件测试计划、测试日报、测试报告的写作方法与要领。 3) 针对B/S、C/S架构及不同…

MFC-4简单的窗口重绘(非部分重绘)
#include <afxwin.h> #include "resource.h" #include <afxtempl.h> //定义模板类的头文件class MyDocument : public CDocument { public:CArray<CPoint,CPoint &> pArray;//<保存的数据类型,读取保存数据类型的返回值>void AddPoint…
七天学会「股票数据分析软件」的开发(下)
昨天下午把《我不是药神》这部电影看了,搞得我哭的稀里哗啦,里面有一些情节触痛了内心中最薄弱的地方。药厂没有错,他们要收回前期投入的研发成本。主人公 程勇 只能算是整个事件的牺牲品,通过他的牺牲让国家关注到白血病人这个群…

那些对混合云开发和应用程序环境的错误认识
企业架构师们在开发混合云计算应用程序并为支持程序云计算而选择云计算供应商之前,他们应当好好完成他们的准备工作。选择错误的供应商和在错误的环境中开发应用程序都会对应用程序的运行性能、工作流程、变更成本、以及与客户的沟通和交易带来负面影响。 在本文中&…

2021年UI设计培训机构哪个好
想要学好UI设计,选择报一个专业的UI设计培训机构是非常明智的选择,为什么这么说呢?因为培训机构的课程都是根据当下的行业环境制作出来的,而且有专业老师,比自学要好很多,那么在2021年UI设计培训机构哪个好呢?来看看…

UVA 116 Unidirectional TSP DP
题目链接: https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category3&pageshow_problem&problem52 题目描述: 一个整数矩阵, 求第一列到最后一列的最小整数和, 只能从第一列出发向右&…

C++ 数据类型转换
wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....#include <string>// 使用CString必须使用MFC,并且不可包含<windows.h>#define _AFXDLL#include <afx.h>using namespace std;//-----------------------…
如何准备数学建模竞赛!
昨天早晨,我到教十一实验室的时候遇到史会峰老师,他说正准备给学生们进行数学建模的培训。今天早晨,我又遇到了孔令才老师,他同样也说准备给学生们进行数学建模的培训。看到这么多同事在做这个事情,想想自己也应该贡献…

UI设计培训:UI设计师离不开的基本版式设计
不管你是UI设计,还是工业设计,甚至动画设计,终究离不开基本的版式设计,所以版式设计这块非常考验设计师的基础功力。 1. 大且醒目&美观的排版设计 版面设计大概是一位设计师重要的部分,今年的版面设计会围绕着大且…

我对她说,你能不能换件衣服?换种心情?换种脾气?她说,可以,换个人就行了···...
我跟她说,你能不能换件衣服?换种心情?换种脾气?她说,可以,换个人就行了转载于:https://www.cnblogs.com/yangzhong/archive/2010/07/06/1772124.html
如何通过代码连接SQL Server数据库
我们曾经为南方电网做过几个有关架空线路的科技项目,要趁着假期有整段的空闲时间,把这些代码整理一下,放入团队刚刚重构的代码库中。 由于这些项目使用的数据库为 SQL Server,所以在整理代码之前需要解决两个问题: 把…

选择一个稳定、快速的服务器四大注意事项
要想运营好一个网站,稳定和高速的服务器是必不可少的。可是在选择的时候企业就会很发愁,不知道该考虑哪些因素,不知道该怎么选择,下面我们简单的了解一下如何选择一个稳定性好、快速的服务器。 第一 性能要稳定 为了保证网站能够正…

APP不同上线情况对应的测试流程
一个App软件从研发提测到版本上线都会经过哪些测试流程呢?很多人认为就是进行功能测试,没bug了就提交审核,审核通过就直接上线了,其实不然,有些步骤是需要特别关注的,否则极易造成线上bug,本文千锋教育小编…

iOS 进阶—— iOS内存管理
1 似乎每个人在学习 iOS 过程中都考虑过的问题 alloc retain release delloc 做了什么?autoreleasepool 是怎样实现的?__unsafe_unretained 是什么?Block 是怎样实现的什么时候会引起循环引用,什么时候不会引起循环引用?所以我将在本篇博文中详细的从 ARC 解释到…

Google工作原理
今天在晚上看到一个图,讲解google的工作原理,感觉写的不错。贴过来方便以后深入的研究。 转载于:https://www.cnblogs.com/muyuge/archive/2010/07/06/6152590.html
如何利用ArcGis修改shp数据字段名称
最近在处理一批地理信息数据,其中涉及到对shp文件属性字段的修改,在这里做个记录,以防大家再走弯路。 工具: Arcgis软件shp文件 第1步:打开ArcCatalog,选择左上角的链接文件夹,选择你存放数据…

学java为什么要报java培训班?
学java为什么要报java培训班?对于没有基础的小白来说,选择报java培训班是最合适不过的,自学是没有任何规划的,学到的技术都是模棱两可,工作入职后是存在很大风险的,具体的来看看下面的详细介绍吧。 学java为什么要报j…

Tensorflow 全网最全学习资料汇总之框架平台的综合对比【3】
作为机器学习领域、尤其是 Python 生态圈最受欢迎的框架平台,TensorFlow 具有许多吸引开发者的优点。其中最显而易见的是谷歌的技术支持和完善的社区(庞大用户群)。这些都为 TensorFlow 的普及打下了基础。但是,开发者需要了解 Te…

空间两点间的距离
空间两点间的距离公式推导,有图有真相 转载于:https://www.cnblogs.com/graphics/archive/2010/07/08/1773966.html
如何利用ArcGis把经纬度转成shp数据
这段时间在处理一批地理信息数据,由于部分数据是经纬度坐标,如下图所示: 这样,面对的第一个问题,就是把这批数据转换成shp格式。下面做一个记录,与大家分享。 工具: ArcGIS 软件 Step1&#x…

新手参加java培训都学什么
互联网的强大使得很多IT技术变得越来越吃香,java技术就是其中的一种,很多人都开始学习java技术,下面小编就为大家分享一些新手参加java培训都学什么?希望能够给零基础的学员带来一些帮助。 新手参加java培训都学什么? 1、对于新手学习java的…

第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...
第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理 网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行(递归方式实现)Scrapy默认是深度优先的 广度优先 是以层级来执行的…

读懂ConnectString 中 enlist 设置的含义
因为上次遇到在webservice中处理事务的问题,偶然在调试程序的时候对OracleConnection的连接字符串enlist设置的一个有趣的发现。以前看过一篇文章,不记得是什么文章了,文章中说对enlist最好设置为false,当时也没有怎么去深究为什么…

你知道这些 985、211 院校的隶属吗?
前段时间为准备继续深造计算机方向的同学们整理了一些资料,包括: 全国第四轮学科评估结果 – 计算机科学与技术全国第四轮学科评估结果 – 软件工程你知道大陆地区的985、211院校都有哪些吗?你真的知道「专业硕士」与「学术硕士」的11个区别…

新手UI设计师必需要掌握的知识和技能
近几年,许多企业对于UI设计师这个岗位的需求量越来越大,UI设计师的发展空间可见越来越好,想要学好UI设计,必须要掌握足够的知识和技能,下面小编就为大家分享一下新手UI设计师必需要掌握的知识和技能,希望能…
SharePoint 2010中的客户端AJAX应用——ASP.NET AJAX模板
WCF Data Services是SharePoint 2010中一个极具吸引力的新特性。然而,因为它的强大,直接对其进行编程仍然会有点痛苦。幸运的是,一个新的相关技术 —— ASP.Net AJAX模板 – 可以完美的与WCF Data Service进行集成,并允许我们快速…

如何利用Gephi可视化浏览的网站关系
Gephi 是进行数据可视化的一套开源工具。其利用图(有向图、无向图、动态图等)的形式来展现数据,方便我们对数据进行探索。今天给大家介绍利用 Gephi 来可视化我们浏览网站之间关系。 首先,安装 Gephi 的 Http 代理插件 HttpGraph…

nginx 启动脚本
#vim /etc/rc.d/init.d/nginx #为nginx提供SysV init脚本#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \# proxy and IMAP/POP3 proxy server# …

参加前端培训主要学习什么语言
web前端近几年很多人都在学习中,但是想要学好web前端技术,基础是非常重要的,参加web前端培训机构可以进行系统的学习,下面就给大家详细的介绍一下参加前端培训主要学习什么语言? 参加前端培训主要学习什么语言?前端的基础就是HT…