• 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 ^GSPC GSPC
日经225 ^N225 N225
恒生指数 ^HSI HSI
富时新加坡STI ^STI STI
上证综指 000001.SS SSE

下面通过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()函数,经过计算输出策略收益率。 最后,把策略收益率与纯指数率,放到一起来进行对比。

策略 GSPC HSI N225 STI SSE
指数收益 0.1133813 0.0619811 0.1927681 0.03696703 0.04817027
策略收益 0.2137435 0.2406476 0.2261996 0.01869112 0.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/

打赏作者