• Posts tagged "金融"

Blog Archives

图书出版《R的极客理想-量化投资篇》

R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

  • 张丹(Conan), 程序员Java,R,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/r-book3/

前言

终于等到R的极客理想系列,第三本《R的极客理想-量化投资篇》一书出版了。写书不仅是一个漫长的过程,更是知识的浓缩和再精华的过程;写书不仅把自己会的东西记录下来,还要站在读者的角度,让其他人也能看得懂;写书不同于写博客,不仅要保证超过5遍以上的审阅,还要遵守出版的各种规则,包括格式、文字、目录、图片,公式,代码,引用….

写书不是一件容易的事情,这是R的极客理想系列最后一本图书。希望更多的朋友都能静心下来,写本自己的书。尊重知识,就是尊重你的未来。

目录

  1. 写书体验
  2. 为什么要写这本书
  3. 读者对象
  4. 如何阅读本书
  5. 致谢

1. 写书体验

本书是我写的“R的极客理想”系列丛书的第三本,是R语言与金融量化投资领域结合的一本书,本书的主要写作目标就是把R语言的技术和实际的金融量化案例结合起来,让读者能切身的体会把知识变成真正的生产力。

本书撰写花了很长的时间才得以完成,因本书涉猎广泛,包括了大量地跨学科的知识,用通俗易懂的语言描述出来,并让读者更容易地理解并非易事,以致于我自己在写作过程中,有过数次想放弃的冲动。这本书最终完成,都源于每次看到读者在我博客中的留言,看到大家的对于知识的期待和对于我本人的鼓励,这些都是我把这项艰苦的事业完成,源源不断的动力和鞭策。有的同学开玩笑地留言说,“集齐全套图书,就可以召唤神龙了”。我真的非常感谢读者,对于图书的高度肯定和对我不断的支持。

在本书的写作过程中,我经历了一次创业的洗礼,体验了人生的大起和大落,这段特殊的经历也让我有了新目标和方向。每当我回忆整个的创业过程,都觉得自己太年轻了。光有满腔的热情和技术,只能让我把事情做起来,但是经验和阅历的不足,不能支撑我成为一个成功的创业者。天时,地利,人和,缺一不可。

图书介绍的网站http://fens.me/book,介绍了本书的基本情况,包括序、前方、目录、勘误、代码、试读、封面、交流等几个方面内容,读者有任何问题,都可以在网站中留言,并得到我的回复。同时,可以加QQ群:383275651,和更多的网友进行交流。网站还有视频专区(http://fens.me/video),提供我录制的各种视频课程,包括 R, Nodejs, Hadoop, 金融量化投资 等,视频收入仅用于网站的运营成本。

前两本上市后不仅再国内取得了不俗的成绩,获得了良好的口碑,而且英文版被美国知名的出版集团CRC引进,在北美市场也获得了读者的热捧,本书的英文版和繁体版随后也会在美国和中国台湾发行。

最后附上购买链接,各大网站都能买到,建议先去比比价:互动出版社京东当当亚马逊

当然,如果你需要一本签名的书,可以联系我订购,但是成本有点高,图书原价+货到付款;也可以带着书,到各种我参加的分享会来找我,我每年有不少的分享活动

2. 为什么要写这本书

本书撰写的一个主要思路是从IT人的角度,通过技术来切入金融市场,进行量化投资。发挥IT人的专注学习、乐于分享的精神,借助互联网快速传播知识,打破传统的金融壁垒。发挥“极客”的创造力,让知识变成生产力,让更多的有理想的IT人,能够有机会进入金融行业,推动金融行业的改革和创新。

但这不是一本简单易懂的书,因为量化投资是跨学科的领域。你需要有多学科的知识储备,才能胜任量化投资的工作。而本书所涉及的相关的内容,可能需要多本书籍的相关知识支撑才能描述完成。

阅读本书,不但需要你有R语言的使用经验,更需要有对金融市场知识的理解。本书主要介绍了三部分内容,涵盖金融市场,统计知识和IT技术。

  • 金融市场,包括了中国的金融二级市场环境的介绍、交易工具的使用、金融产品的交易规则、国内机构投研思路、策略和回测、基金会计等金融行业的基础知识。
  • 统计知识,包括了时间序列、一元线性回归、多元线性回归、自回归等统计和计量的模型算法。
  • IT技术,就是R语言相关的编程技术,金融量化程序包的使用,金融数据处理,金融数据模型的构建,量化策略的实现思路,R语言代码的编写等。

同时,本书使用了很多的真实案例,以中国实际的金融市场为背景,你会感觉到市场所带来的波动,国家宏观政策对于市场的影响,散户思维与专业投资者的差异,量化思路与主观思路对于市场的不同理解。

本书是我在实际投资研究中的总结,从金融理论模型,到市场特征检验,再到数学公式,R语言建模,再到历史数据回测,会计资产核算,最后进行实盘交易。通过R语言,可以很简单地实现我们脑子中的一个投资想法。类似的投资想法其实谁都有,利用IT人的技术优势,可以真正地与实际操作结合起来。

本书所涉及的金融产品,包括了股票、期货、债券、基金、现金管理等,跨越多个金融市场多种金融标的物。交易模型和交易策略,有基于市场技术指标的量价策略,有基于统计理论的套利策略,有基于金融产品规则的事件性策略;有针对全市场扫描的选股策略,也有高频交易的择时策略。相信本书,会另你感受到金融市场的魅力,以及技术优势能给我们带来的价值。

要想深入理解本书的每一篇的内容,可能你需要像我一样,不仅有技术的积累,还要真正地去金融市场做做交易,多和行业内的人进行沟通,不断地学习和思考。

让IT技术,提高金融的效率。

传统的交易员,都是凭借多年的交易训练,人工的每日盯盘,观察市场的变化。一个好的交易员,可以同时观测几个金融市场的几十个交易品种。随着金融产品的发展,股票市场已经达到3000多只股票,债券市场达到3000多只债券,公墓基金市场达到了6000多只基金,还有多种的金融衍生品,大量金融产品的发展,已经不是能依靠个人之力去消化和分析了。

通过计算机在全市场进行扫面,发现不合理的定价和交易机会,可以极大的提高交易员效率。一种理想化的设计,让程序来为我们交易赚钱,我们就可以去做自己喜欢的事情了。让技术变现,解放我们的生活。

本书中的原创观点和方法,都是基于理论研究在实践中的经验所得。实际上,长久以来我也在找这样的一本书,能够把书本上的理论模型与实际业务相结合,但并没有找到,或者并没有符合中国市场的实际案例应用,所以只能自己动手写一本。本书也有点像是自己的笔记,我也会经常翻翻,让自己的头脑始终保持清晰思路。

3. 读者对象

本书适合以下所有R语言工作者:

  • R语言的学习者和使用者(必读)
  • 金融宽客(Quant)(必读)
  • 计算机背景的金融量化爱好者(必读)
  • 数据分析背景的金融方向数据科学家(必读)
  • 统计背景的金融科研工作者
  • 金融行业从业者,券商研究员、分析师、基金经理
  • 回归中国市场的海外金融量化从业人员
  • 金融、统计、数据科学专业的学生

4. 如何阅读本书

本书分为三个部分,六个章节,每一个章节都是一块大的知识体系。

  • 第一部分是金融市场与金融理论(第1~2章),从了解金融开始,建立对金融认识的基本思路。
  • 第二部分是R语言数据处理与高性能计算(第3~4章),详细介绍了R语言进行数据处理的必备工具和使用方法。
  • 第三部分是金融策略实战(第5~6章),结合R语言技术和金融知识,解决金融量化领域的实际问题。

第一章,金融市场概述,为全书开篇,主要介绍了如何R语言做量化投资的思路和方法。量化投资是跨学科知识结合的一个方向,包括了R语言的技术层面的知识,基础学科的应用和金融市场的情况。R语言社区提供丰富的金融工具包,可以让我们快速构建量化投资的体系结构。本章内容以我个人的从业体会,从数据的角度观察中国的金融市场,发现机会,找到风口。

第二章,金融理论,主要介绍了金融经典理论模型和R语言的实现方法。用R语言深度解读,投资学理论和统计学理论在实际金融市场中的应用,包括4个基础理论模型,资本资产定价模型、一元回归性线模型、多元回归线性模型、自回归模型,希望这些基础理论模型可以帮助读者,找到理解金融市场的方法。

第三章,R语言数据处理。以R语言数据处理技术为核心,介绍了如何用R语言进行各种类型数据的处理方法,包括标准的结构化数据集的处理和字符数据集的处理,同时深入浅出地介绍了R语言数据处理方式,包括循环、分组、合并、管道、分词等的常用数据处理操作。

第四章,R语言高性能计算。R语言的性能问题一直是被大家所关心的,R本身有很多解决方案来提高性能,但由于R语言内核的单线程设计,让R本身的解决方案有飞跃式的性能提升是困难的。本章将介绍通过3种外部技术,来让R语言的性能达到生产环境的要求。

第五章,债券和回购。金融市场很大,不仅有股票,更大市场是债券。本章重点介绍了如何用R语言去进行债券分析,做一些债券投资和套利。低风险的债券投资,说不定是我们投资理财更好的选择。

第六章,量化投资策略案例。本章全部是综合的案例,从金融市场开始研究,到数学公式,R语言建模,历史数据回测,最后找到投资机会,是一套完整的从理论到实践的学习方法。祝大家在金融市场中玩的开心!

本书有很多综合运用的知识,在您阅读本书的时候,建议读者顺序阅读全部的章节。本书的一些技术实现,用到了我前两本书介绍的知识点,《R的极客理想-高级开发篇》和《R的极客理想-工具篇》,建议读者一起阅读。

5. 致谢

感谢在我最失意的时候,帮助我度过难关的朋友,北京千庄智金科技有限责任公司总经理张颂,量子金服CEO刘亚非,民生银行同事许斌。 感谢所有R语言的读者,以及社区的各位朋友,让我们通过R语言认识,并一起把知识进行传播。 感谢天善智能社区CEO梁勇,为本书提供赞助和推广。同时,感谢台湾銓智金融科技合伙人陈琪龙博士,复旦大学黄达教授,为本书写推荐序。感谢机械工业出版社华章公司的主编 杨福川 和编辑 李艺,帮助我审阅全部章节,让本书得以出版。

特别感谢我的爱人一直在鼓励我,最终让我走出了失意的阴影。感谢我的爸爸、妈妈,感谢你们对我工作上的支持和生活上的照顾!小宝宝,也在今年出生。

谨以此书献给我最亲爱的家人以及众多R语言爱好者们!祝大家阅读愉快,欢迎交流。

转载请注明出处:
http://blog.fens.me/r-book3/

打赏作者

2017猎奇金融大数据:用R语言开始量化投资

跨界知识聚会系列文章,“知识是用来分享和传承的”,各种会议、论坛、沙龙都是分享知识的绝佳场所。我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果。从听众到演讲感觉是不一样的,把知识分享出来,你才能收获更多。

关于作者

  • 张丹, 程序员R,Nodejs,Java
  • weibo:@Conan_Z
  • blog:http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/meeting-cda-20170521

前言

很高兴能够参加由CDA主办的数据分析师线下沙龙的活动,虽然活动规模不大,但是场子很棒,氛围很好。刚好这次沙龙是金融大数据的主题,也是为了给我的新书《R的极客理想-量化投资篇》预热,给大家分享一下R语言在量化投资领域的应用。

本次所分享的内容为我的新书开篇内容,干货多多,错过沙龙的同学,可以在CDA的网站上找到分享的内容。

目录

  1. 我的演讲主题:用R语言开始量化投资
  2. 会议体验和照片分享

1. 我的演讲主题:用R语言开始量化投资

用R语言开始量化投资,PPT下载,主要内容来自我的一篇博文:用R语言开始量化投资

分享主题的目录大纲如下:

  1. 为什么用R语言?
  2. 跨界结合的思维模式
  3. R语言量化工具包
  4. 量化策略实战应用
  5. 有理想的极客

分享结束后,和几个现场的朋友,在聊R语言的大方向,大家都觉得R语言有很大的机会,只是R语言应该如何落地呢?我觉得有很多的点和方向可以做。比如:培训教育,用R来替换SAS,R的企业服务,R的SAAS的个人服务等。

我就在致力于推动R语言在中国金融领域的发展,让R可以给更多的用户使用,培养出更多的数据分析师。也希望让我们中国人的技术能够走出去到世界的舞台。希望多能认识志同道合的朋友,一起做一些事情。

2. 会议体验和照片分享

本次由4个主题组成,主要介绍了金融大数据在国内的应用情况。本次的场地是由科技寺提供的,忍不住还要再说一够场面很棒,如果再能配上咖啡就更好了。

本次猎奇金融大数据专场4位嘉宾:

鲁四海,主题:大数据风控。
中国新一代IT产业推进联盟技术分委会秘书长、首席数据官联盟发起人。主要研究方向为大数据,参与编写了《影响中国大数据产业进程100人》,在中国新IT联盟、北达软讲授大数据技术应用课程。

张丹,主题:如何用R语言开始量化投资。
《R的极客理想》系列图书作者,前况客创始人兼CTO。10年IT编程背景,精通R ,Java, Nodejs 编程,获得10项SUN及IBM技术认证。

于洋,主题:金融大数据运营增长创新案例。
TalkingData增长部门总监,曾加入金山从事游戏数据分析及运营,2012年加入TalkingData,历任游戏业务咨询总监,金融业务咨询总监,现从事在零售,金融,航旅等方向的数据营销,运营及增长创新业务。

李金霞,主题:实战案例:数据驱动下的互联网营销。
神策数据数据分析师,曾就职于民生银行、百度人才、飞信,负责数据处理相关工作。2016年加入神策数据,主导客户包括纷享销客、网易七鱼、ofo、拉钩云人事、多盟等。

嘉宾在分享的照片。

曹鑫,主持人。

张丹,《R的极客理想》系列图书作者

鲁四海,

于洋,

李金霞,美女分析师

2.2 会议相关照片

本次分享的场地,很有特色,宽敞、明亮、很有创意、很舒服,像是咖啡厅,开放式的办公环境,很棒!

很意外地获得了一个CDA给的奖杯,收藏一下。

沙龙很成功,感谢工作人员的辛苦劳动组织。在北京以数据为主题的沙龙,并不是太多,祝CDA的活动能一直坚持品质,越办越好!

转载请注明出处:
http://blog.fens.me/meeting-cda-20170521

打赏作者

用R语言开始量化投资

R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/r-quant-start/

前言

做数据分析的朋友,一定知道R语言。R语言是一门统计语言,在数据分析领域优势是非常明显的。金融本身是玩数据行业,R的最大的优势就是数据分析,所以把R语言与金融结合,用R来做量化投资的策略,真的很配,不仅顺手而且方便,用了你就会知道。

本文以“用R语言开始量化投资”做为新书《R的极客理想-量化投资篇》的开篇,主要强调了R语言在量化投资领域有着广阔的应用场景,而且是重要的量化投资工具。

公开课:Hellobi Live | 5月23日如何用R语言开始量化投资

目录

  1. 为什么用R语言?
  2. 跨界结合的思维模式
  3. R语言量化工具包
  4. 量化策略实战应用
  5. 有理想的极客

1. 为什么用R语言?

R语言是一门面向数据的编程语言,早期只是在统计领域,被统计学家所使用。

近年来随着大数据技术的发展,以及R语言自身生态的快速壮大,R语言已经不仅在统计领域,在各大行业领域中都能看到R语言的身影,包括了互联网,数据科学,人工智能,机器学习,生物医疗,游戏,电子商务,全球地理科学,数据可视化等等。

下图是R语言的任务列表,这些任务都是面向具体业务的。截图不全,请大家去R官方网站,查看完整的任务列表。

从R语言的任务列表,我们就能明显看出,R语言和其他编程语言的区别。R语言第三方包所提供的支持,都是对于各种行业的数据操作和算法的支持,而不仅仅纯IT系统开发功能的支持。

R语言不仅能把数据分析做好,而且能够让我们能够有更多地思考,通过数据连接到我们每个人的日常生活。比如,我们去超市购物,你购买的东西会记录在你的购物小票中,如果把这些购物小票都收集起来,通过Apriori关联规则的频繁项集算法,就可以分析出自己的购物习惯。

我们每天都会收到各种推销的骚扰电话,有时候是卖房的,有时候是银行贷款,有时候是股票推荐,有时候是代开发票,有的是猜猜我是谁,处处都体现了中国的国情。那么我们可以收集自己通话记录,通过电话号码、号码注册位置、通话时长来分析一下,哪些是有用通话,哪些是浪费时间的通话,从而计算出我们每一天会浪费多少时间,通过Bayes算法来把有效通话和无效通话进行二元分类,从而阻止骚扰电话的入侵。

如果我们不仅能够收集自己的通话记录,把亲戚朋友的或更多人的通话记录都收集起来,组建一个数据库。再把统计出来的骚扰电话统一标记,做成黑名单,然后把黑名单公开出来,就可以让更多的人面受骚扰电话的影响。

人们的衣食住行都会产生数据,产生数据的地方,就需要做数据分析。通过数据分析,提高生活的效率,为我们节约宝贵的个人时间。

在人类社会中,除了衣食住行的基本需求外,更多的是对钱的需求。我们每天都会跟钱打交道,会有消费的需求,月底会有工资收入,当收入大于消费,资金积累到一定阶段的时候,我们就会有投资的需求。中国人的投资一般就几种,买房,买黄金,买股票,买保险,买理财。投资时,大部分人是不理性的,心血来潮就买了,也不仔细观察行情,买完就被套住,像 “中国大妈抢购黄金”,“中国大妈是救市的主力军” 都一度被新闻媒体热炒。

在金融市场中最不缺的就是机会,不管投资什么,如果能在交易的时候能多思考一下,说不定结果就会不样。运用我们数据分析的知识,和对于金融市场规则的理解,通过R语言进行数据分析,抓住机会,让我们把辛辛苦苦赚到的钱保值和增值。

2. 跨界结合的思维模式

R语言与其他编程语言最大不同在于,R语言是面向数据的,这一点很重要,甚至影响了思维模式。

我写了10多年的JAVA程序,程序员思路在我的脑子里根深地固。我习惯用于面向对象思想来建模,把世界中的物体、行为、连接都用面向对象的方法来表达。我也习惯了IT项目,从架构设计到开发的自上而下的设计思路,或完全由需求驱动的敏捷开发,为业务随需而变的的开发路径。作为程序员,我有理想,我自认为技术能改变世界。这一切都是程序化思维在影响着我。如果你还不熟悉啥是面向对象,请参考《R的极客理想-高级开发篇》第四章面向对象编程。

后来,当我接触了R语言,通过另一扇门理解世界的时候,我发现世界是不一样的。在没有程序的世界里,你可以通过文字来表达你的做事的方法,你可以感性地认识世界,你也可以让数据来说出这个世界意义。你可以天天看新闻联播,了解国家大事;也可以看微博、朋友圈的爆料,及时了解身边的消息。这并不是程序员的思维,而大众化的社会。这个社会里,程序员只是小众。

改变世界的方法,除了技术还有别的,比如,政策、资本、市场、法律、人事等,从公司运作的层面看,似乎哪个都比技术更重要。也许程序员更不关心这些,但面对市场时,再牛技术也会被其他因素所制约。

我经历过创业,一个很深刻的教训就是,要让自己跳出原有的思维定式,通过多维的视角看世界、看自己。通过R语言,帮我打开了通过数据看世界的窗口。我的能力提升不再是,如何把程序把写得多得漂亮,在时间复杂度上用O(log(N))解决O(N^2)的问题,而变成了怎么收集数据,怎么提高数据质量,用于解决实际的业务问题。当然,作为程序员的职业强迫性,我也会要求自己熬夜一晚上把50行代码优化成40行。

问题被转化了,术业要有专攻,但作为一个有理想的极客,全面掌握跨领域的知识才是我们的目标。我创业时,经常被投资人问到,做量化投资的项目有多难?招几个金融背景的,再招几个IT背景的,捣鼓个项目,很快就做出来了。其实不然,不同背景的人是很难交流和沟通,尤其是金融和IT,一种是封闭不愿意分享,一种是开放毫无保留;一种是先把话说出来,一种是先把事情做起来;一种是所有人都要为我服务,一种是只专注于自己的兴趣。所以,如果没有能够跨界通吃的人,是做不好量化的项目的。

我们就要立志做个跨着学科的人,这才是最核心的点,是不可被替代的。从IT技术出发,你需要扎实的编程功底架构思想,科学的项目管理方法,严谨的产品设计逻辑;你还需要统计、数学等基础学科的知识,数据挖掘与机器学习的数据处理经验;最重要的,你要能结合业务,不管是量化投资或其他的领域,理解市场的规则。

听起来很难,而且是真的很难!虽然很难,但不光是对你,对所有人都是这么难。但是只要能坚持的走下来,一定能通过知识改变命运的。

3. R语言量化工具包

做量化投资,R语言的优势在哪?R语言可以帮助我们从多种维度去理解量化投资。

  • R语言本身就是我们需要掌握的IT的技术,是一个需要编程的技术活,但极大的降低了对编程的要求,短短20-30行R语言代码,已经能干很多事情了。
  • R语言是面向数据的,有方便数据处理操作,对于数学、统计等基础学科有丰富的函数支持,同时提供多种数据挖掘和机器学习的算法库,让我们可以直接使用。
  • 在量化领域更是R语言的强项,有针对投资研究的包,有做回测分析的包,有做金融产品定价的包,有做投资组合优化的包,还有风险管理的包,涵盖了量化投资的方方面面,只是有些包的使用要针对中国市场特点进行改进和优化。

R语言为量化投资提供了丰富的工具包,我做了分类列在下面。再也没有哪种语言会做到这种的支持了。R包,投资研究包,回测分析包,金融产品定价包,投资组合优化包,风险管理包,涵盖了量化投资的方方面面。

完整的量化投资工具包,请参考文章R语言量化投资常用包总结。在《R的极客理想》系列图书的3本书中,分别对于这些包做了介绍。请大家对照包名,进行查看和使用。

4. 量化策略实战应用

利用R语言的便利性,我们可以很容易的通过上面介绍的这些工具包,做一个交易模型。构建一个简单的投资策略,甚至都不需要有太多的代码。

接下来,我就举例说明一下,怎么把R语言提供的程序包合在一起使用。按照下面的步骤做一个简单的交易策略,基于移动平均线MACD,针对全球指数的投资方案。如果你还是金融新手,不了解MACD策略,那么请请参考《R的极客理想-高级开发篇》书中,2.3节二条均线打天下。

本文所使用的系统环境

  • Win10 64bit
  • R: 3.2.3 x86_64-w64-mingw32/x64 b4bit

下面是一个简化的量化策略的研究过程,分为如下的6步进行。

  1. 用quantmod包下载数据。
  2. 用zoo包和xts包进行数据格式标准化。
  3. 用TTR包进行模型计算。
  4. 用PerformanceAnalytics包进行指标风险。
  5. 用ggplot2包进行可视化输出。
  6. 最后,进行结果分析。

首先,我们要获取数据,个人玩可以通过互联网免费下载数据,专业机构通常都是买专业数据库。这里我们通过quantmod包,从Yahoo财经下载数据的。

我选择了全球的5个市场的指数进行比较,代码和名称对应关系。

指数名称指数代码(Yahoo财经代码)简称
标普500^GSPCGSPC
日经225^N225N225
恒生指数^HSIHSI
富时新加坡STI^STISTI
上证综指000001.SSSSE

下面通过R语言代码,我们来完成这个交易策略模型的构建。当然,这里只是为了说明整个过程,给大家一个直观的感觉,这里会省略对于策略的细节处理。


# 加载程序库
> library(quantmod)
> library(TTR)
> library(PerformanceAnalytics)
> library(ggplot2)
> library(scales)

# 从Yahoo财经下载各全球指数数据
> options(stringsAsFactors = FALSE) 
> symbols<-c("^GSPC","^N225","^HSI","^STI","000001.SS")
> suppressWarnings(getSymbols(symbols,src = "yahoo",from="2012-01-01"))
[1] "GSPC"      "N225"      "HSI"       "STI"       "000001.SS"

# 取指数价格调整后的数据,合并数据集
> df<-merge(GSPC$GSPC.Adjusted,HSI$HSI.Adjusted,N225$N225.Adjusted,STI$STI.Adjusted,`000001.SS`$`000001.SS.Adjusted`)

# 对列重命名
> names(df)<-c("GSPC","HSI","N225","STI","SSE")

接下来,让我看数据是什么样子的,并画出全球指数。


# 查看数据前6行
> head(df)
              GSPC      HSI    N225     STI     SSE
2012-01-03 1277.06 18877.41      NA 2688.36      NA
2012-01-04 1277.30 18727.31 8560.11 2711.02 2169.39
2012-01-05 1281.06 18813.41 8488.71 2713.02 2148.45
2012-01-06 1277.81 18593.06 8390.35 2715.59 2163.40
2012-01-09 1280.70 18865.72      NA 2691.28 2225.89
2012-01-10 1292.08 19004.28 8422.26 2719.83 2285.74

# 查看数据最后6行
> tail(df)
              GSPC      HSI     N225     STI     SSE
2017-02-24 2367.34 23965.70 19283.54 3117.03 3253.43
2017-02-27 2369.73 23925.05 19107.47 3108.62 3228.66
2017-02-28 2363.64 23740.73 19118.99 3096.61 3241.73
2017-03-01 2395.96 23776.49 19393.54 3122.77 3246.93
2017-03-02 2381.92 23728.07 19564.80 3136.48 3230.03
2017-03-03 2383.12 23552.72 19469.17 3122.34 3218.31

# 查看数据类型,为xts
> class(df)
[1] "xts" "zoo"

整个数据集是从2012年01月03日到2017年03月03日之间数据,数据为xts类型,xts类型是R语言中专用的时间序列类型。 关于xts的详细介绍,可以参考《R的极客理想-工具篇》书中,2.2节可扩展的时间序列xts。

画出全球指数,曲线图。

由于各国指数成立时间不同,成份股也不同,所以指数值有的很大有的相对比较小,我们不能用指数大小来判断好坏。 通常情况下,我们会转换成收益率进行比较,通过收益率进行度量后,这样所有的标的都是在同一个维度了。

画出全球指数的每日累计收益率,曲线图。

收益率越高,说明指数在这期间是表现越多的,我们越应该去投资。上图中日经225(N225)指数大幅超越了其他指数,中国的上证综指(SSE)一起一落波动非常大,标普500(GSPC)走势稳健。

计算指数的平均年化收益率,如果我们把钱一直投资在这些看指数上面,那么我们每年的平均回报是多少呢?


> Return.annualized(ret_df)
                       GSPC       HSI      N225        STI        SSE
Annualized Return 0.1133813 0.0619811 0.1927681 0.03696703 0.04817027

这里日经指数(N225)年化回报率是最高的,有每年平均有19.28%的年化收益率,与图1-3的累计收益率走势相符。 而中国的上证综指(SSE)仅有4.82%的年化收益率,回报不算高,但波动太大了。 综合来看,标普500(GSPC)其实是投资的首选,11.34%年化收益率,平均波动率也不是太高,所以风险和收益都是相对不错的。

接下来,我们构建一个简单的MACD模型,通过MACD策略再对上面5个指数构建交易策略。


> # MACD 策略模型
> MACD<-function(dt,n=30){ #代码省略
> }

# MACD策略,年化收益率
> lapply(df, function(col) MACD(col,30))
           GSPC       HSI      N225        STI       SSE
close 0.2137435 0.2406476 0.2261996 0.01869112 0.2817241

我们写了一个MACD的策略函数,就相当于是建模的过程,函数的输出为策略的收益率。 然后,我们把指数数据传给MACD()函数,经过计算输出策略收益率。 最后,把策略收益率与纯指数率,放到一起来进行对比。

策略GSPCHSIN225STISSE
指数收益0.11338130.06198110.19276810.036967030.04817027
策略收益0.21374350.24064760.22619960.018691120.2817241

我们可以很明显的看出,用一根均线的MACD策略,平均年收益率会大幅优于纯指数的收益率,如果我们这样交易就可以赚到更多的钱。 其实,这就是量化投资的思想,从数据中发现规律。 可能上面的过程和代码,会让你觉得很迷惑,怎么就能赚到钱了?别着急,本节只是本书的开篇,等你仔细阅读了全书,你就能领悟到这里的玄机了。

一共40行左右代码,完成了很多的事情。 如果要把整个操作都细分列举出来,包括了数据采集,数据清洗,数据标准化,指标计算,数据建模,历史回测,投资组合构建,组合优化,计算结果评价,数据可视化等组成部分。

要搭建一套量化交易的系统,主要就是完成这些部分。对于个人玩家来说,按照上面R语言代码的思路,就已经可以实现了。 如果你想做的更好,不仅是个人玩,通过成立公司把系统做大做强,为更多的用户提供量化服务,那么你还需要有一整套的平台架构方案,同时配合你要做的金融业务。

5. 有理想的极客

本文是新书《R的极客理想-量化投资篇》的开篇内容,希望大家跟着我的思路,通过R语言入手,体会R语言建模的乐趣,并真正地把技术变现。 我认为R语言是非常好的一门语言,从量化投资的角度,我会一直推动R语言在中国的发展,当成一项事业来做。 同时,本书也会译成英文版在全球发行,让中国的技术走出去。加油!!

R语言只是一门计算机语言技术,不能独自承担改写历史的重任,但R语言确实给了我们很大的想像空间,让我们能动手去了解这个世界的规律,找到无穷无尽的交叉点,创造出新的帝国。

如果你和我一样,都能站在这个角度来学习和使用R语言,那么我们一定可以成为并肩向前的同路人。

转载请注明出处:
http://blog.fens.me/r-quant-start/

打赏作者

用数据解读摩羯智投

用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据。在互联网混迹多年,已经熟练掌握一些IT技术。单纯地在互联网做开发,总觉得使劲的方式不对。要想靠技术养活自己,就要把技术变现。通过“跨界”可以寻找新的机会,创造技术的壁垒。

金融是离钱最近的市场,也是变现的好渠道!今天就开始踏上“用IT技术玩金融”之旅!

关于作者:

  • 张丹(Conan), 程序员R,Nodejs,Java
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/finance-mojie

mojie-title

前言

进入2016年,伴随世界经济危机的到来,中国互联网创业,也在经历长时间的寒冬,有不少的公司都因资金链断裂,停止了运营。与寒冬反差很大的是,AI技术却火了起来,受到资本的追捧。智能投顾作为金融领域的AI热点,一直在持续升温。

到2016年底,招商银行发布了一个名为“摩羯智投”的应用,一下子吸引了众多人的眼球,打开了银行进军智能投顾领域的大门。本文将用数据来解读“摩羯智投”的到底是怎么玩的。

目录

  1. 摩羯智投介绍
  2. 数据收集
  3. 数据建模分析
  4. 结论

1. 摩羯智投介绍

摩羯智投,是招商银行在2016年12月6日发布的一款手机端应用,嵌入在招商银行的APP中,加入了FinTech理念,把金融和人工智能进行了结合。

按招商银行发布的文章中介绍,摩羯智投是运用机器学习算法,构建的以公募基金为基础的、全球资产配置的“智能基金组合配置服务”。在客户进行投资期限和风险收益选择后,摩羯智投会根据客户自主选择的“目标—收益”要求、构建基金组合,由客户进行决策、“一键购买”并享受后续服务。

摩羯智投并非一个单一的产品,而是一套资产配置服务流程,它包含了目标风险确定、组合构建、一键购买、风险预警、调仓提示、一键优化、售后服务报告等,涉及基金投资的售前、售中、售后全流程服务环节。比如,摩羯智投会实时进行全球市场扫描,根据最新市场状况,去计算最优组合比例,如果客户所持组合偏离最优状态,摩羯智投将为客户提供动态的基金组合调整建议,在客户认可后,即可自主进行一键优化。

摩羯智投的开机画面。

05

看完招商银行官方的介绍,接下来我们从数据进行分析,看看“摩羯智投”到底有多智能。

2. 数据收集

要做数据分析,我们就要以数据来思考。我的思路,要先收集数据,把应用所有的输入项和输出项的数据进行整理,然后我们通过统计的方法和金融知识来找到数据之间的关系。

注:由于应用中没有明确的字段定义,下面字段我按照字面意思进行解读。

数据输入项只有2个字段,包括

  • 大致投资期限:从投资开始到投资结束的期限。
  • 风险承受能力:承担多大的风险,以及风险带来的损失。

数据输出项,字段就比较多,包括

  • 模拟历史年化收益(%):对历史数据回测,所获得的年化收益率。
  • 模拟历史年化波动率(%):对历史数据回测,所获得的年化波动率。
  • 模拟历史收益(元):在投资10000元,并持有一年,所获得的收益金额。
  • 95%的概率下亏损(元):在95%概率下最大亏损金额。
  • 固定收益(%):固定收益类基金的配置比例。
  • 现金及货币(%):现金货币类基金的配置比例。
  • 股票类(%):股票类基金的配置比例。
  • 另类及其他(%):另类投资的类基金的配置比例。
  • 投资组合收益率曲线:按比例构成的组合,生成的收益率曲线。
  • 投资组合配置详情:4类资产对应的具体基金品种和配置比例

对应到“摩羯智投”的操作界面上,我标出了输入数据和输出数据的提取点。

mojie

根据界面来收集到的数据,整理为CSV格式,便于之后的分析。数据收集,我分别存储到了3个CSV文件中。

  • a.csv:用于收集第1-2个界面的数据,用户直接输入和输出数据,包括:大致投资期限(term),风险承受能力(rick),模拟历史年化收益(ret),模拟历史年化波动率(vol),模拟历史收益(gains),亏损(loss),固定收益(fixed),现金及货币(cash),股票类(stock),另类及其他(alter)
  • b.csv:用于收集所有标的基金所对应的市场数据,从wind中采集,包括:基金名称(name),基金代码(code),基金成立时间(create),基金类型(type),净值20140101(first2014),净值20150101(first2015),净值20160101(first2016),净值20161208(last)
  • c.csv:用于收集第3个界面的数据,每个组合的标的基金的配置比例,包括:大致投资期限(term),风险承受能力(rick),基金类型(type),基金代码(code),配置比例(weight)

a.csv的数据样例前10条,如下:
data1

b.csv的数据样例前10条,如下:
data2

c.csv的数据样例前20条,如下:
data3

这里还需要特别说明的事,由于应用的数据,可能会动态的发生变化,我是采集的2016年12月8日的“摩羯智投”应用中的数据。

多说一句,数据花点时间谁都可以在应用中拿到,虽然我已经整理了数据,但请大家不要太随意地张嘴要数据和代码,毕竟写一篇文章非常辛苦。如果你想直接用我的数据和代码,请扫文章下面二维码,请作者喝杯咖啡吧。 :_D

3. 数据建模分析

收集好了数据,接下来就可以进行数据分析了。当然,分析的角度有很多种,可以从金融、统计、数据挖掘等专业方向,也可以计算一些简单的指标,最大值,最小值,平均值等等。我思考的出发点,主要在金融和统计上面,如果存在片面性,还请大家给予指正。

下面将从6个知识点,对“摩羯智投”进行分析。

3.1 分析一:只有2个输入项。

由于只有2个输入项,大致投资期限和风险承受能力。大致投资期限有3个选项,风险承受能力有10个选项,那么实际的组合个数就是3*10=30个。对于只有30个组合来说,并不能完全实现个性化,当有31个用户使用产品时,就会有2个人购买的组合是是重复的。

3.2 分析二:只有17只标的基金

我们对30个组合进行配置尝试后,发现详细持仓方案中,只有17只基金,配置比例不同而矣。标的过少,可能导致风险不能足够的分散化,遇到极端行情会导致大的回撤。17只基金分别是


> paste(dfb$name,"(",dfb$code,")",sep="")
 [1] "工银纯债B(OF000403)"     "易增强回报B(OF110018)"   "建信稳定增利C(OF530008)"
 [4] "工银天颐B(OF485014)"     "南方量化成长(OF001421)"  "中欧潜力价值(OF001810)" 
 [7] "大成500(OF096001)"       "黄金接连C类(OF000217)"   "亚洲美元债C(OF002401)"  
[10] "大摩收益C(OF233013)"     "博时信用债C(OF050111)"   "兴权可转债(OF340001)"   
[13] "创金多因子(OF002210)"    "招商现金增值A(OF217004)" "富国中小盘(OF100061)"   
[16] "工银瑞信全球(OF486002)"  "南方成份(OF202005)"   

3.3 分析三:相关性分析

直接利用a.csv的数据集,查看输入项和输出项的相关性,发现相关关系。

通过R语言程序实现


# 加载数据
> dfa<-read.csv(file="a.csv")
> names(dfa)<-c("term","risk","ret","vol","fixed","cash","stock","alter","gains","loss")

# 画出配对示意图
> pairs(df)

r1

把数据变成可视化来显示,对于我们理解数据非常有帮助。

  • term列,和其他列的散点图,完全呈现离散的分布,说明term列与其他列并没有相关性的关系。
  • risk列,除了和alter列没有线性关系,和其他列呈现明显的线性关系。

我们把上面相关性图,再加上一些元素,如相关系数、拟合曲线、分布图等,重新画出相关性图,如下所示。

r2

这样就清晰了多了。

  • risk列,与模拟历史年化收益(ret),模拟历史年化波动率(vol),拟历史收益(gains),呈现极度正相关,输出项的数字完全受risk值影响。
  • risk列,与固定收益(fixed)和现金及货币(cash),极度负相关;与股票类(stock),极度正相关;另类及其他(alter),负相关。这种情况,与资产的风险收益属性是匹配。
  • vol列,与亏损(loss),是100%线性相关。
  • ret列,与拟历史收益(gains),是100%线性相关,这里可以获得公司:gains = 10000 * ret 。

3.4 分析四:线性回归

通过相关性的检查,我们可以发现risk与很多列都是极度相关的。

那么我们可以用线性回归的方法,把risk与有相关性的列的参数估计出来。如果不太了解,一元线性回归的可以参考文章,R语言解读一元线性回归模型

由于vol和loss是100%线性相关,以vol为x,loss为y,构建一元线性回归方程。


# 回归方程
> lv<-lm(loss~vol,data=dfa)
> summary(lv)
Call:
lm(formula = loss ~ vol, data = dfa)

Residuals:
    Min      1Q  Median      3Q     Max 
-36.119 -31.491  -6.621  27.884  67.305 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -447.514     13.056  -34.28   <2e-16 ***
vol          149.109      1.707   87.34   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 34.2 on 28 degrees of freedom
Multiple R-squared:  0.9963,	Adjusted R-squared:  0.9962 
F-statistic:  7629 on 1 and 28 DF,  p-value: < 2.2e-16

进行线性回归的统计检查:T检查,F检查都非常显著,同时R-squared为0.9963,具有极度相关性。


# 画出散点图和拟合曲线
> plot(loss~vol,data=dfa)
> abline(lv)

r6

从图中看到,拟合效果非常好,可以整理出公式:loss = -447.514 + 149.109*vol。

另外,由于risk决定vol,再让我们算一下risk和loss的关系,以risk为x,loss为y,构建一元线性回归方程。


# 构建一元线性回归方程
> lm(loss~risk,data=dfa)
Call:
lm(formula = loss ~ risk, data = dfa)

Coefficients:
(Intercept)         risk  
     -435.8        180.0 

# 详细指标
> summary(lr)
Call:
lm(formula = loss ~ risk, data = dfa)

Residuals:
    Min      1Q  Median      3Q     Max 
-219.88 -136.93  -59.26  100.69  508.31 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -435.84      72.38  -6.021 1.73e-06 ***
risk          179.95      11.67  15.426 3.23e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 183.5 on 28 degrees of freedom
Multiple R-squared:  0.8947,	Adjusted R-squared:  0.891 
F-statistic:   238 on 1 and 28 DF,  p-value: 3.232e-15 

T检查和F检查,非常显著;R-squared 也比较高。

下面进行残差检查,发现30号点,是偏离比较大,可能是离群值。

r3

我们把30号点去掉,再做显著性检查和残差分析。


> dfa2<-dfa[-30,]
> lr2<-lm(loss~risk,data=dfa2)
> summary(lr2)
Call:
lm(formula = loss ~ risk, data = dfa2)

Residuals:
    Min      1Q  Median      3Q     Max 
-203.00 -100.98  -58.98   83.53  327.46 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -397.55      62.23  -6.389 7.64e-07 ***
risk          169.51      10.32  16.431 1.39e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 155.3 on 27 degrees of freedom
Multiple R-squared:  0.9091,	Adjusted R-squared:  0.9057 
F-statistic:   270 on 1 and 27 DF,  p-value: 1.391e-15

在去掉30号点后,R-squared为0.9091,比之前的0.8947,有所提升。

r4

从残差图中,我们看到没有明显的离群值点,所以去掉30号点,是符合统计提升标准的。

3.5 分析五:关于30号点的金融思考

从数据中,我们发现30号点的最大亏损已经超过了收益,也就是说你可能承担了过大了风险,但是没有获得风险所给你带来的收益。

10

按照资本资产定价模型的理解,我们投资组合的收益来自2部分,无风险收益和风险收益。无风险收益可以用现金或货币类的基金获得,风险收益主要来自股票基金,债券基金,另类投资最基金。直观上理解,风险收益比至少是1:1,即损失100元时,要获得100元风险补偿。对于私募业务来说,投资人可能会要求更高,比如 风险:收益=1:2。

从另外一个角度分析,上面我所说的风险收益比并没有涉及到概率的部分,我猜95%是通过VaR值来做的概率计算。

3.6 分析六:通过标的基金计算收益率

在“摩羯智投”的应用中,我们可以获得各个基金的配置比例,基金净值的数据又可以在公开市场中获得,所以对于预期收益率,我们也可以自己计算一下,看看是不是与“摩羯智投”提供的结果是一致的。

接下来,就利用到上文介绍的数据集,b.csv和c.csv。


# 加载数据
> dfb<-read.csv(file="b.csv",encoding="utf-8",fileEncoding = "utf-8")
> names(dfb)<-c("name","code","create","type","first2014","first2015","first2016","last")

# 分别计算2014,2015,2016收益率
> dfb$ret2014<-(dfb$first2015-dfb$first2014)/dfb$first2014
> dfb$ret2015<-(dfb$first2016-dfb$first2015)/dfb$first2015
> dfb$ret2016<-(dfb$last-dfb$first2016)/dfb$first2016

# 把非法值赋值为0
> dfb$ret2014[c(which(is.na(dfb$ret2014)),which(is.infinite(dfb$ret2014)))]<-0
> dfb$ret2015[c(which(is.na(dfb$ret2015)),which(is.infinite(dfb$ret2015)))]<-0
> dfb$ret2016[c(which(is.na(dfb$ret2016)),which(is.infinite(dfb$ret2016)))]<-0

# 打印前6条
> head(dfb)
          name     code   create  type first2014 first2015 first2016   last    ret2014     ret2015      ret2016
1      工银纯债B OF000403 20140516 fixed    0.0000    1.0850    1.2200 1.2520 0.00000000  0.12442396  0.026229508
2    易增强回报B OF110018 20080319 fixed    1.4403    1.8124    2.1180 2.1693 0.25834896  0.16861620  0.024220963
3  建信稳定增利C OF530008 20080625 fixed    1.4529    1.8030    2.0304 2.0608 0.24096634  0.12612313  0.014972419
4      工银天颐B OF485014 20110810 fixed    1.2090    1.7300    1.9740 1.9680 0.43093466  0.14104046 -0.003039514
5   南方量化成长 OF001421 20150629 stock    0.0000    0.0000    1.2300 1.3400 0.00000000  0.00000000  0.089430894
6   中欧潜力价值 OF001810 20150930 stock    0.0000    0.0000    1.1010 1.2170 0.00000000  0.00000000  0.105358765

由于基金中,招商现金增值A(OF217004)为现金类基金,所以收益率需要直接取年化收益,而不是按上面的计算方法。


#现金类,收益率从wind查年化收益率,进行赋值
dfb[which(dfb$code=='OF217004'),]$ret2014<-0.0452
dfb[which(dfb$code=='OF217004'),]$ret2015<-0.036
dfb[which(dfb$code=='OF217004'),]$ret2016<-0.0237

再加载c.csv基金的详细配置方案。


> dfc<-read.csv(file="c.csv")
> names(dfc)<-c("term","risk","type","code","weight")

# 查看数据
> head(dfc)
  term risk  type     code weight
1    1    1 fixed OF000403   0.20
2    1    1 fixed OF110018   0.14
3    1    1 fixed OF530008   0.11
4    1    1 fixed OF233013   0.10
5    1    1 fixed OF050111   0.05
6    1    1 fixed OF485014   0.05

把数据变型,以type列转置为横表,去掉code列,以weight值进行填充,得到新数据集为r1。


> head(r1)
  term risk  alter   cash  fixed  stock
1    1    1 0.1000 0.2000 0.6500 0.0500
2    1    2 0.1500 0.1965 0.5491 0.1044
3    1    3 0.1562 0.1842 0.4881 0.1715
4    1    4 0.1011 0.1490 0.5162 0.2337
5    1    5 0.1137 0.1416 0.4943 0.2504
6    1    6 0.1143 0.1208 0.4655 0.2994

我们生成plan1的配置方案,当term=1,risk=1时。


# 只保留term=1,risk=1时数据
> plan1<-dfc[dfc$term==1 & dfc$risk==1,]

# 合并plan1数据集和dfb数据集
> plan1m<-merge(plan1[,c("term","risk","code","type","weight")],dfb[,c("code","ret2014","ret2015","ret2016")],by="code")

# 按分配比例计算收益率
> plan1m$ret2014w<-plan1m$weight*plan1m$ret2014
> plan1m$ret2015w<-plan1m$weight*plan1m$ret2015
> plan1m$ret2016w<-plan1m$weight*plan1m$ret2016

# plan1的,各基金分别在2014,2015,2016贡献的收益率
> plan1m
       code term risk  type weight    ret2014     ret2015      ret2016     ret2014w     ret2015w      ret2016w
1  OF000217    1    1 alter   0.05 0.01590909 -0.06711409  0.194844125 0.0007954545 -0.003355705  0.0097422062
2  OF000403    1    1 fixed   0.20 0.00000000  0.12442396  0.026229508 0.0000000000  0.024884793  0.0052459016
3  OF001810    1    1 stock   0.05 0.00000000  0.00000000  0.105358765 0.0000000000  0.000000000  0.0052679382
4  OF002401    1    1 alter   0.05 0.00000000  0.00000000  0.000000000 0.0000000000  0.000000000  0.0000000000
5  OF050111    1    1 fixed   0.05 0.87631433  0.12603844  0.034050727 0.0438157167  0.006301922  0.0017025363
6  OF110018    1    1 fixed   0.14 0.25834896  0.16861620  0.024220963 0.0361688537  0.023606268  0.0033909348
7  OF217004    1    1  cash   0.20 0.04520000  0.03600000  0.023700000 0.0090400000  0.007200000  0.0047400000
8  OF233013    1    1 fixed   0.10 0.24233716  0.20354665  0.047405509 0.0242337165  0.020354665  0.0047405509
9  OF485014    1    1 fixed   0.05 0.43093466  0.14104046 -0.003039514 0.0215467328  0.007052023 -0.0001519757
10 OF530008    1    1 fixed   0.11 0.24096634  0.12612313  0.014972419 0.0265062977  0.013873544  0.0016469661

把数据进行合并,分别计算plan1方案的收益率,和plan1方案不同资产的收益率贡献。


# plan1方案的收益率
> plan1r<-ddply(plan1m,.(term,risk),summarise,ret2016=sum(ret2016w),ret2015=sum(ret2015w),ret2014=sum(ret2014w))
> plan1r
  term risk    ret2016    ret2015   ret2014
1    1    1 0.03632506 0.09991751 0.1621068

#计算3年的累积收益率曲线
> plan1r$cumret<-sum(c(plan1r$ret2016,plan1r$ret2015,plan1r$ret2014))
> plan1r
  term risk    ret2016    ret2015   ret2014    cumret
1    1    1 0.03632506 0.09991751 0.1621068 0.2983493

# plan1方案不同资产的收益率贡献
> plan1rm<-ddply(plan1m,.(term,risk,type),summarise,ret2016=sum(ret2016w),ret2015=sum(ret2015w),ret2014=sum(ret2014w))
> plan1rm
  term risk  type     ret2016      ret2015      ret2014
1    1    1 alter 0.009742206 -0.003355705 0.0007954545
2    1    1  cash 0.004740000  0.007200000 0.0090400000
3    1    1 fixed 0.016574914  0.096073214 0.1522713174
4    1    1 stock 0.005267938  0.000000000 0.0000000000

用我计算的结果,分别对比“摩羯智投”中,近1年和近3年的收益率曲线。

13

近1年对应plan1r$ret2016=0.03632506=3.63%,近3年对应plan1r$cumret=0.2983493=29.83%。我发现计算结果存在差异,从最终结果的数字上来看差异并不大。但对于近3年的收益率曲线的走势来看,差异还是非常明显的。“摩羯智投”给出的近3年收益率曲线是,均匀平稳上升的,而我算出来的,3年数据2014年涨了16%,2015年涨了9%,2016年涨了3%,逐年收益率在递减。所以不应该呈现均匀平稳上升的形状。

究其原因,再来看plan1的组合数据,发现股票基金只有配了一只中欧潜力价值(OF001810),而这只基金在2015年09月30日才成立,所以并不能构建出该基金在2014,2015的年度收益率组合。以此来判断,这个组合势必存在着中间调仓的过程,而“摩羯智投”的收益率曲线,并没有展示出调仓过程的数据,所以收益率曲线是不透明的,不能够直接做为用户购买决策的依据。

接下来,我们把30种组合的收益率,都计算出来。再与“摩羯智投”给出的收益率进行比较。

14

上图中,ret列为“摩羯智投”界面上采集的数据;ret2016,ret2015,ret2014分别为我们根据基金的公开市场的数据,计算出来的百分比结果;mean为ret2016,ret2015,ret2014算数平均数。从数据上看,ret列和mean列,有部分值接近。我们再做一次相关性分析。

r5

这样解读结果就容易多了,ret与2016年的收益率是线性相关的,而mean与2014年的收益率是线性相关的,我猜2014底的“股债双牛”使均值发生了偏离。所以,ret和mean没有关系,“摩羯智投”对于收益率的预期,对于近1年的组合收益可能有更大的权重分配。

所以对于“摩羯智投”给出预期收益和净值曲线,我们并不能通过已知的数据计算出来,这些可能就涉及到它背景的算法,我们就无从知晓了。

4. 结论

以上从数据的角度给对“摩羯智投”进行了分析,首先摩羯构建的组合是线性组合,符合风险收益为基础资本资产定价模型(CAPM)。但由于组合数量有限,基金标的有限,算法不够透明、无法利用已知数据重现结果,缺少客户持续跟踪等部分,所以我把“摩羯智投”理解为是基于金融专业性架构,结合快速上线为目标的试水。可以实现对散户的简单、高效的财富管理体验,部分解放理财经理的压力。但对于专业的投资经理来说,这还仅仅是个玩具,还有相当大的提升空间。

本文只是人个出于兴趣,对“摩羯智投”应用的从数据角度的分析,不代表任何公司或其他第三方机构的立场。由于所获得数据有限,以及个人知识能力有限,如有片面的理解,还指大家指正。

转载请注明出处:
http://blog.fens.me/finance-mojie

打赏作者

2016天善智能交流会第22场: R语言为量化而生

跨界知识聚会系列文章,“知识是用来分享和传承的”,各种会议、论坛、沙龙都是分享知识的绝佳场所。我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果。从听众到演讲感觉是不一样的,把知识分享出来,你才能收获更多。

关于作者

  • 张丹(Conan), 程序员Java,R,Nodejs
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/meeting-hellobi-20160701/

meeting-hellobi

前言

感谢天善智能社区的邀请,有幸参加每周一期的跟数据有关的行业、工具、技术的交流盛宴,活动的口号是“Friday BI Fly 周五BI飞起来”。

目录

  1. 我的分享主题:R语言为量化而生
  2. 会议体验
  3. 自由讨论

1. 我的分享主题:R语言为量化而生

本次分享的主题 R语言为量化而生,主要内容来自我的一篇博客文章:R语言为量化而生。希望能够解释清楚,在量化投资中为什么要用R语言。从程序员的角度看,C++,Java,Python, C#都是可行方案;从数据人员的角度看,Excel, SAS, Matlab更是不错的。那么为什么是R语言呢,R语言的优势在哪里体现?

这类的问题,总是会被问到。那么答案,就在于你对量化这件事情的了解,和对各种编程语言的理解。最近3年,互联网在量化领域的大发展,以Quantopian为代表的在线策略研发平台,用Python做为核心语言,国内同样支持Python的平台也有 优矿聚宽米筐。这些平台主是面向程序员群体的平台,希望通过挖掘草根明星,来推动量化的发展。传统的量化交易软件,像文华MC, TB, TS 都有自己一套的脚本化的编程语言。有实力的专业团队,通常会自成体系的独立开发一套自己的系统。如果面向更广泛的人群,最常用的方法就是Wind导数据,Excel中拉个表出来。

所以,其实用什么语言不重要,关键是怎么理解做量化这件事情。那么R语言的天生优势就是数学计算,数据处理,免费开源,大量支持库。试试吧,你一定会喜欢的。

2. 会议体验

本次分享受天善智能社区的邀请,我真的非常高兴。天善智能是新一代的商业智能和大数据的垂直社区,聚集了大量的数据分析从业人员。活动介绍,https://ask.hellobi.com/blog/tianshansoft/4229。 本次活动同时有30个微信群进行直播,参加的人员,至少有2000人以上。可以天善智能社区,在行业的影响力是非常大的。

发个截图,体会一下微信同步直播的震撼吧!

wx

本此的分享基于微信的直播,我也第一次体验,要用纯文字的方式来进行介绍。想把一个事情说清楚,又增加了不少的难度。由于不能分享屏幕,代码部分会通过图片截屏。

本次活动的总结,https://ask.hellobi.com/blog/tianshansoft/4271,感谢天善社区的工作人员进行整理。

远程分享,就是没能与大家合照,有点遗憾!!贴张自己的照片吧。

01

3. 自由讨论

分享后,很多朋友都对于R语言都是非常的好奇,提了很多的问题,用户的参与性非常强。下列直接贴出用户的问题和我的回复。

1、替新手问一个,请教一下,R语言的数据分析应该从哪方面入手练习啊?因为目前工作上不是用R的,看完书之后想具体去试一下。

张丹: R其实上手很快,找一本书,认真操作练习一遍就上手了。

2、玉琴:不建议用for loop的原因是考虑到性能问题吗

张丹:for loop是调用的R的循环库,apply是调用C的循环库,性能差距还是很大的

3、来自20群的提问:提个问题,微软对R的收购会对R语言的发展产生什么影响?

张丹:我觉得这是正向发展的,是好事情。大公司看到了R的潜力!

4、尚林栋:R语言金融建模的具体步骤能说一下吗

金融建模的具体步骤,你可以参考这篇文章,http://blog.fens.me/finance-stock-ma/

5、刘嘉丰Alan:丹哥,现在有很多量化平台,提供打包好的函数,在线回测,和自己造轮子拿R语言相比,您觉得各有什么优势呢?

张丹:R的优势就是在数学计算,数据处理上。行业标准还没有统一,所以不一定在线平台的轮子就一定好用。但另外,我们从开发或使用的角度,更多的用到的R包,都是RStudio公司的产品,我觉得是RStudio在推动R的整个的进化过程。

6、我也觉得r语言不错,但经常想不到商业场景,到现在,我只是用它统计考勤,各种绩效kpi,每月算一次奖金,已经这样过去2年了,r语言路在何方哪?

张丹: 你所说的统计,只能说简单计数。比如,你要预测下个月的考勤情况,从而设计预算方案。你可能就需要做个回归分析,这时R就能给你很大的帮助了。生活和工作中,随处都是数据分析的场景。

7、Allen:r在拟合上感觉比python用起来更爽一些,其返回的结果较多

张丹:那么R和python比,R更面向数据,特别是对于没有编程基础的人。PYTHON,还是程序语言,还要了解程序结构,程序架构,代码量不会少。

有IT背景程序员,可能更倾向于PYTHON;如果没有IT背景,R更容易上手。

8、越中女儿:请教一个问题:quantmod对美股的实时接口很好用,对A股不支持,且A股基本面数据才更新到2013.09,请问有好用的ETL包么,类似于python的tushare那样对A股友好的,各种etl啊清洗的脏活累活感觉python更好啊,R就是安安静静做做统计,玩玩图形。

张丹: quantmod使用的是yahoo等国外的数据源,这些数据源本身没有A股数据,如果需要A股数据,用tushare还是不错的。 R特有的data.frame,matrix 等类型和操作方法,在python也需要单独去实现。

9、柠檬味的香草:最近想研究一些互联网文本数据与指数或各股走势的关系,但是在使用R语言处理文本数据不是很方便,丹哥可有一些强大的library推荐,对于非结构,文本数据的处理。

张丹:“尽量使用向量计算或矩阵计算的计算方法”,可以这样理解,对于一个二维结构,for需要2次,0(N^2)的时间复杂度。如果我们把数据,直接就按矩阵存储, 你让矩阵里的每个点都加1, 只需要算一次。Hadley提供的包,源代码我都看过,写很棒,也很实用。

r在拟合上感觉比python用起来更爽一些,其返回的结果较多

其实R有很多的第三方的包,已经有了大量的算法包,而其他语言相对较少。只是我们平时接触的不多,所以觉得用不到。R有大量的统计包,你可以从官方网站找到,输出的结果,大部分也都是统计的结果。

R所支持的行业领域,非常广泛。而工程的语言,不会做细粒度的区分,只是通用的解决方法。

10、郑州—金融数据:python有pandas.DataFrame,pandas应该是第三方的数据库结构吧?R的data.frame是内置的。

张丹:pandas.DataFrame,在底层处理,还需要对原PYTHON的数据结构做映射。当然他可以解决的很好,但你看到的内存结构,可能并不是真正的内存结构。

R内置数据类型,就可以理解是内存结构。不需要再考虑转换了。找一个自己熟悉的语言,大多数的功能,每种语言都是能实现。只有很细的领域,才会进一步区分。

11、RHaoop采用分布式并行计算,那请问如何解决需要嵌套循环的算法。

张丹:对于基于hadoop大数据的MR计算,建议做数学变成,通过数学的角度处理。我写过2个例子,一个是pagerank, 一个是itemcf。

12、@柠檬味的香草:想听听丹哥对传统数据挖掘转量化投资的建议。比如前景?竞争力?

张丹:量化投资,其实是IT人都想转的行业。你写的代码,不是通过工资来赚钱,而直接通过交易赚钱,代码的效用是最大化的。但这个行业竞争很大,聪明人都在这里,要么你的技术牛,要么你了解市场,要么的算法是独特的,不然也很难。

JhT: 做量化交易和策略的都是高智商的

越中女儿:我觉得量化对金融市场的理解比对技术本身更重要,R的需求应该会很快凸显出来。因为数据基础都有了,后面就是差会分析的人了。通常懂数据分析的程序员,比纯程序员待遇高。

13、老师,有好的spark或者hadoop入门的书吗,计算机能力弱和java不懂啊

张丹:hadoop有很多书了,我当初看的是 权威指南。spark的书不了解,我的是网上文档。

14、@Mia.W 学RHadoop需要对Hadoop或Mapreduce了解到什么程度,需要从头学hadoop或java吗

张丹:hadoop的MR的原理要了解,找到懂JAVA的同事,帮你把环境搭好。

15、@JhT 我是刚进来的,R的优势是什么?

张丹:R是免费开源的,CRAN上有8000多个包,遍布各行各业。R语言的3个特性,数学计算,数据建模,可视化。

16、@郑州—金融数据个人感觉商业上matlab比R和python支持度都要好,不管是分析,统计,挖掘还是量化方便,收费的毕竟是收费的

张丹:有商业推动,当然要比免费的好了。不过,像SAS和Matlab也在打通和R的接口,毕竟由全球第三方贡献包,要比一家公司提供的包要多很多的。

17、@越中女儿 有用R做过实盘风控么

张丹:有做,其实不太复杂。你把需要的实时数据,都同步存到redis中,用R在秒级调reids取数据,计算完成再写回去。

18、@Jason.k计算机8g内存,数据虽然行数不多,但是很多列,所以数据csv格式大小会高达几个G,这个规模数据量,内存应该是不够的。

张丹:R的机制,会把数据一次性加载到内存中。就算能读到内存,每次计算时,也会有中间变量,所以你的基础内存是不够的。而且对于win性能会更差。

最后,再次感谢 天善社区的小伙伴们的努力,谢谢大家!

转载请注明出处:
http://blog.fens.me/meeting-hellobi-20160701/

打赏作者