七天学会「股票数据分析软件」的开发(中)

两天前,我写了 七天学会「股票数据分析软件」的开发(上),号召大家尝试着写写代码,不知道大家进度如何。

如果存在掌握一种技能的刚需,而且知道正确的学习方法,经过刻意练习,这门技能很快就能玩儿的有模有样,但想精进这门技能,就需要靠时间的积累了。有关学习编程的方法,可以参考我的另外一篇图文 学不会编程?试试我的方法

言归正传,我们继续 「股票数据分析软件」的开发第二部分 – 数据的分析。

由于我们使用的量化模型非常简单,可以参考图文 赚钱是刚需,如何正确的交易股票?。所以 数据分析部分 主要解决两个问题,第一个,计算 沪深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 我们下次见。

FreeStock股票分析软件(V1.0)   FreeStock 股票分析软件展示了一般股票分析软件的核心技术,全部代码采用VC6.0编写,没有使用任何第三方控件,程序执行速度快。V1.0基本完成了静态分析部分的决大部分功能,在这个基础上进行盘、选股等功能的扩充是相当容易的。 如果在使用过程程序出现BUG,请告诉我:cymwork@sina.com; 或者对本软件有什么意见或建议,也请告诉我:cymwork@sina.com,以便程序功能更强大,更加方便普通用户的使用。 特色功能: 1、良好的程序结构,便于扩充:所有的图形元素都封装在类,使用及扩充很容易; 2、高效快速的文件系统:这在股票分析软件至关重要的,数据文件采用B+树索引,单个数据文件可存储2G的资料; 3、超强的表格系统:表格在任何任何软件都很重要,这个表格呢? 以下是已经基本完成的功能简介: 行情表:显示实时盘数据,也是与用户进行交互的接口; 画线工具:提供如下的画线功能: 名称 功能简述 直线 在图形移动两点画直线,以测量趋势。 圆 在图形移动两点画园,分析周期和转折点的规律。 正弦曲线 在图形移动两点画正弦曲线,分析周期和转折点的规律。 矩形曲线 在图形移动两点画矩形曲线,分析周期和转折点的规律。 菲氏正弦波 在图形移动两点画菲氏正弦波,分析周期和转折点的规律,并可智能化计算出未来股价的三个重要转折日期。 菲氏矩形波 在图形移动两点画菲氏矩形波,分析周期和转折点的规律。 椭圆 在图形移动两点画椭园,分析周期和转折点的规律。 角度线 在图形移动两点或输入角度值,分析波段趋势规律。 上升甘氏 在图形分析上升波段趋势规律和对下降波段的支撑作用。 下降甘氏 在图形分析下降波段趋势规律和对上升波段的支撑作用。 菲波那奇数列 在图形移动两点画出菲波那奇数列,分析周期和转折点的规律。 黄金分割线 在图形移动两点画出横向和纵向黄金分割线,分析周期和转折点的规律。 百分比线 在图形移动两点画出横向百分比线,分析周期和转折点的规律。 黑洞阻挡线 在图形移动两点画出起点黑洞阻挡线,分析期阻挡规律。 密集成交带 选择股价波段,可显示该波段的密集成交带。 gan指标 是智能化研究股价波段的多价位阻挡工具。 十字光标:很方便的查看图形数据; 键盘宝:与用户交互的接口,支持公式的输入; 区域统计:方便的数据统计; 筹码分布图:几乎所有股票分析软件都有的; 日线报表:查看个股的历史数据; 多股同列:可以实现2、4、9股同列,由于时间的关系,V1.0没有做选择的界面,所以只有4股同列; 分析周期:可以很方便地在日线、周线、月线、5分钟、15分钟、30分钟、60分钟及盘走势间切换; 画面组合:盘可以最多3图组合;盘后最多可以4图组合; 指标内容:V1.0只完成了K线、成交量及MACD三个指标; 除复权:Ctrl+J,Ctrl+H热健 图形操作:放大、缩小;左移、右移;左翻页、右翻页; 数据导入:V1.0完成了乾隆格式的历史数据导入,速度极快; 界面设置:V1.0内置两套方案,由于时间的关系,没有做选择的界面,在SPLASH见到的是另外一套方案。 说明: 1、打包文件附带的历史数据有: 1A0001,1A0002,1A0003,600601,600602,600603 0001,0002,0003,2A01,2A02,2A03,2B01. 2、目前深证的代码只支持4位。 如果在使用过程程序出现BUG,请告诉我:cymwork@sina.com; 或者对本软件有什么意见或建议,也请告诉我:cymwork@sina.com,以便程序功能更强大,更加方便普通用户的使用。 cymwork 于2002年03月13日 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程备考

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值