您的位置:首页 > 其它

大家一起来写程序预测股价走势

2014-09-15 15:24 453 查看
* 本文面向的读者是对股票数据分析有兴趣且具有基本C#程序编写能力的人

前言

股民看一只股票的历史价格、各种技术指标和相关新闻等等,便会分析预测其未来走势,做出相应的投资操作(买入、卖出或观望)。假如把这个分析预测行为抽象成一个计算机程序函数,其输入参数是最近历史价格、市值、流通市值等数据,输出结果是明日股价走势预测(涨、跌或平)。
/// <summary>
/// 预测未来股价走势
/// </summary>
/// <param name="historyPriceSet">最近历史价格</param>
/// <param name="moreData">市值、流通市值等等</param>
/// <returns>明日股价走势预测</returns>
byte forecast(double[] historyPriceSet, params object[] moreData)
{
throw new NotImplementedException();
}
毫无疑问,没有人会信任这样一个函数,就像没有人信任专家预测明天的股市上涨或者下跌一样,因为不管对于人还是计算机来说,预测一只股票第二天的走势都是非常困难或者说是无法完成的任务。那是否意味着穷尽心智去设计一个预测股价走势的计算机程序(函数)就没有意义了吗?但是不妨请换一个思路看一下:

1)专家A和专家B,他们每天都对同一只股票进行第二天股价走势的预测,涨、跌或者平。一个月以后统计,发现专家A的预测正确率远远高于专家B。

2)计算机预测(函数)的分析逻辑是固定和不变的,即待分析数据不变的话,每次运行(预测)都是得到相同的结果,而人却不大是这样的。

当意识到上面两件事以后,请假设以下这个场景:有2个计算机预测函数(其分析预测逻辑各不相同,就像专家A不同于专家B),每个预测函数都分别对股票池里的每只股票进行“预测”,基于历史数据的“预测”(不要担心诚实的计算机会作弊),一般情况下不出所料的结果是所有的预测结果都让人失望,但是,也有可能我们会惊讶地发现某一个预测函数对某一只股票的历史预测相当准确(预测函数和分析的股票数量越多,出现奇迹的可能性就越大),这时,请这个神勇的预测函数对这只股票进行明天的预测,我想,这个预测应该比较有参考意义吧?

X预测 => 000004 => 明日【涨】

涨 => [14.73, 15.18] => 3.05% 2014-8-8
涨 => [14.99, 14.73] => -1.73% 2014-8-7

涨 => [14.96, 14.99] => 0.20% 2014-8-6

涨 => [14.91, 14.96] => 0.34% 2014-8-5

涨 => [14.86, 14.91] => 0.34% 2014-8-4

涨 => [14.61, 14.86] => 1.71% 2014-8-1

涨 => [14.33, 14.61] => 1.95% 2014-7-31

涨 => [14.27, 14.33] => 0.42% 2014-7-30

涨 => [14.2, 14.27] => 0.49% 2014-7-29

历史预测10次: 9次正确, 1次错误, 0次未知

说到这里,一个比较常见的质疑就是“如果真有这样预测准确的程序,那世界岂不是要毁灭了...”。其实好比那个本月预测比较靠谱的专家A是不会让世界毁灭一样,一个当前一段时间对某一只股票连续预测准确的计算机程序函数也不是件逆天的事物。一个狡猾的投资者并不应该试图一劳永逸地找到并崇拜一个“永远预测靠谱”的专家A,而是应该不断地试图找到当前预测靠谱的的专家X,换个说法,你跟随某电视台某个专家的意见操作,或者你跟随某股票大赛当前排行榜第一名的选手操作,我想后者更容易赚到钱吧。同样地,本文讨论的“插件式股票数据分析系统”(以下简称本系统),并不试图提供一个永远预测正确的函数A,而是试图找到当前预测准确的函数X。

我们如何找到这个函数X?首先,任何人可以使用C#编程语言实现自己的预测分析模型,并基于本系统提供的股票数据进行分析预测,产生分析报告。从程序员的角度讲,其实就是创建一个类库项目,然后实现本系统定义的一个接口类,然后把生成的DLL文件放到系统指定目录就可以。

系统简介

这里只是为了解释本系统的工作流程,所以使用一个最简单“预测逻辑”的预测插件,就是无论什么票,什么样的历史价格,这个插件都会预测明天会上涨,就像一个死多头。

创建一个“多头预测”的预测条目,然后编辑他的参数,一般来说,很多预测插件是可以不要参数的。

创建条目完成后,出现在下面的列表里,默认是被勾上的,表示一旦你开始执行预测任务时,这个预测条目会参与进来。

你可以创建多个相同类型的预测条目,他们的参数可以不同,当然也可以创建不同类型的预测条目。

你还需要设置分析天数,意思是系统每次向预测插件提供前几天的数据供其分析预测。

开始执行预测,系统会自动遍历股票池里的所有股票,并使用所有你创建并选中的预测条目对其历史数据“预测”,默认“预测”最近前10天。

系统会对每个预测插件对每只股票最近前10天的预测结果进行统计,找到准确度最高的前10个预测组合(预测插件=>某只股票),并要求其对最近的数据进行预测,也就是对这只股票明天的走势预测,并生成报告。

 


插件开发

以上就是如何使用系统已经存在的插件,这是不够的,我们需要创造我们自己的插件,以下是每种插件的示例,请放心,这并不困难,真正困难并有挑战的是你自己的核心算法逻辑,本系统就好比SnapAnlytics这样专门售卖预测算法的商店,而你的预测算法才是真正有价值的商品。

走势预测

public interface IStockProphet
{
byte forecast(IStockItem item, IStockLog[] history);
}


详见示例代码和其注释说明。 

 

结语

当我们理解里整个系统以后,还有一个问题摆在我们面前,那就是如何确保我们的股票池数据是最新的,以便每天都能得到最新的数据分析报告,否则对我们真正的投资决策就没有意义了。股票池数据是一个文件夹,你可以加QQ群370767586,在群文件里获得比较新的股票池数据压缩包。这当然不够好,我推荐使用本系统的网站服务(开发中...),你可以通过通过网页配置各种插件条目和其参数,每天系统自动更新数据以后,便还会自动为你的配置执行任务,并将报告发送到你的邮箱。

但这是一个业余玩票性质的项目,我暂时只能提供一个极不可靠的网页服务器(是我书房里的台式机,由“花生壳”连接着互联网),这意味着这个网页并不是24小时可访问的。

很高兴你能读完整篇文章,我们期待着你编写并分享分析插件,加QQ群370767586,可以获得系统程序和相关代码等资源,缺陷报告、建议请发送电邮到56856989@qq.com,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: