当前位置:首页>跟妹子讲量化:程序化交易是个啥?

跟妹子讲量化:程序化交易是个啥?

浏览 :(2043)发表时间:2017-02-22 15:29

跟妹子讲量化:程序化交易是个啥?

一开头,你们肯定以为我又约了哪位妹子在环境清幽,景色怡人的小店里共度悠闲时光。

 

你们看我的样子像是周末不用加班的人吗?

 

周六早上11点多,公司会议室里,一位兢兢业业的帅小伙(又是在下)对着两台笔记本飞快地敲动着键盘,屏幕上是一行又一行整洁的代码和一篇没来得及排版的报告。这时,倩影略过,定在了会议室的玻璃门前,未等我反应已经敲门而进。抬头一看,是三位清新可人的妹子。

 

“哥你周末不是都在外面工作的吗,怎么今天跑来公司了?”

 

Jasy一边把外带给我的爱心咖啡递给我一边问道。


“赶着发咱们量化FOF的二期产品咯,没准有些idea能用在设计三期产品上。自己搭的数据库只能在公司连,亲自尽调的几十家私募资料也在公司,就跑回来一趟呗。”

 

我头也不回继续敲报告。

 

“可听她两说你今天要给我们讲讲程序化交易的入门耶,现在岂不是没戏了?”

 

小敏是新来的研究员,擅长定价模型,但对策略的仿真交易和程序化实现比较陌生。

 

“哥像是会爽约的人吗,再给我五分钟把报告收尾,咱们又能愉快玩耍了。”

 

这次没装逼,早上8点多就到公司一直弄到现在。

 

一向高冷的Crystal已经翻起旁边我给他们准备的一些简单说明。

 

五分钟一眨眼就过去,手上的工作终于完成。可眼看三位妹子已经等得不耐烦了,我赶紧亮一亮嗓门儿:

 

“各位女士久等了!现在就由小弟我为大家讲解一下程序化交易的入门。”

 

“别废话赶紧开始,老娘等你好久了!”

 

作为川妹子中的战斗机,Jasy总能找到机会毫不留情地拆我台。

 

“行行行,大家先看一下手上的资料,我将会以两个风格和功能截然不同的平台作说明。一个是十分‘亲民’易上手的程序化交易平台‘交易开拓者’也就是我们所说的TB;另一个是商业数学软件,用于算法开发、数据可视化,数据分析以及数值计算的高级技术计算语言和交互式环境Matlab。后者并不是一个程序化交易平台,但可以自主搭建,因此用来和前者那样的零售平台作比较说明。”


[img]/article/201702/22/152124gbq73b1zbg7noy7i.png[/img]


“零售和非零售平台的区别是什么呢?”

 

Crystal总是一开始就抓住重点。

 

“现在我只对Matlab这类数量分析平台在程序化交易实现上的功能与市面上一些平民化的零售程序化交易软件作对比,请翻开材料第5页。”

 

虽然平时不用路演,但毕竟读书那会积了些演讲经验,给人讲解起来感觉也是人模狗样……呸,有模有样才对。

 

[img]/article/201702/22/152606avhy0yl4bmbe0ggq.png[/img]

 

“大家可以看到TB的主界面,可视化成程度很高,界面操作性很强。加载品种(包括股票和期货)的价格历史数据可以很方便地按自己需要的格式呈现出来,数据频率,周期均可调节,甚至可以在同一个窗口内叠加多个品种数据,而一个工作区内可根据自己需要建立多个窗口。接着请翻到第6页。”


[img]/article/201702/22/152652arop4547zdha9alt.png[/img]


“这幅图上可以看到交易信号,因为我加载了交易策略在同一个窗口上,这样对每一笔历史交易或实时交易状况都有清晰可观的了解。”


[img]/article/201702/22/152734wswmw00mg0mym3aj.png[/img]

 

“大家可以看到另一幅图是在Matlab上画出来的,但步骤就不会像TB那么简单,也没那么美观。首先我们要把价格数据通过代码以K线的形式呈现,然后在交易回测的函数中加入在原有K线图中添加交易信号的代码。当然,做起来比我说的要麻烦,而且要做成像零售平台那样美观,图像比例自动可调,也很花时间。毕竟人家软件公司就是做这个赚钱的。”

 

说完,只见台下圆滚滚的三双大眼睛盯着我,甚是入神。

 

“T.J你刚说的是可视化方面的,那具体使用起来有哪些区别的?”

 

小敏最近在做一个套利的策略,程序化实现比起传统的手动交易能有效降低滑点等成本,而且能兼顾更多的品种配对。利益驱动下,小敏对程序化交易有着迫切的需求……

 

“那就要从一个交易策略的编写说起,但非零售一体化的平台,需要自己搭建交易系统的,我现在假设已经做好了这方面工作,以后有空再说交易系统的搭建。今天就只是比较交易策略的编写。”

 

[img]/article/201702/22/152814tfb78obobmov7jlj.png[/img]

 

“大家可以看到这是一个简单趋势跟踪策略里的一部分代码,其中有大家熟悉的Close,High,Low,Volume等值。同样属于高级语言,TB这类平台和Matlab有个很大的区别在于,数据的结构和遍历逻辑是大相庭径的。我先对TB进行说明。”

 

看着三位妹子一边疑惑又一边迫不及待的样子,让我讲解起来更添几分趣味。

 

“用惯TB的交易员要是跟用Matlab或Python一类平台的交易员说起‘回溯’这个词,后者可能一时半刻反应不过来。那是因为在TB里像Close[1],和Matlab里Close(1)是完全不一样的概念。前者指的是,一个价格序列中当前值的上一个值,后者则是一个价格序列中的第一个值。简单来说,一个是尾,一个是头。”


[img]/article/201702/22/152853d2fvkx2t1vof2skq.png[/img]


“各位看到第8页是我一个策略在仿真交易函数中的一小段,你们会发现比起TB我需要写一个for循环结构从矩阵第一个值开始去遍历所有的K线数据。而TB是自动完成了这项动作,因此不用在代码中体现。”

 

细心的Crystal思维不只跟上了,还发现了要点所在:“你刚说矩阵?TB中的数据结构也是矩阵吗?”

 

“不是哦Crystal,Matlab最常用的数据格式是矩阵(Matrix),只不过我们可以根据自己需求去定义一个N维矩阵,例如我们只需面向Close值做处理的话,我们可以定义一个一维矩阵。但TB上只能是一个简单的时间序列结构,而一切脚本的执行TB本身是在你定义的时间周期内滚动计算。”

 

“那我们怎样开始上手策略的实现呢?”

 

小敏仍然希望能尽快投入实战。

 

“双均线策略。大家不要觉得不够高级,虽然在实盘中不一定使用这个策略,但作为上手的练习,均线策略尤为合适。因为这需要你实现数据的清洗和读取,移动均线的计算,交易下单的编写,甚至信号图的绘制,这些步骤可以说是贯穿到每一个策略中无论简单还是复杂。然后在简单均线策略的实现后,再进一步加入各种风险管理,仓位管理的模块,作为加强。”

 

“那我们马上开始试一下吧。”

 

明明Jasy连一行代码都没写过,却是最心急的一个。

 

“等等,不知道怎么处理数据就想开始写策略啦?”

 

终于被我逮着机会拆一次Jasy的台。

 

“先去吃饭吧,附近新开了一家餐厅挺不错的。”

 

Jasy机智而又自然地错开话题,完美化解了我的进攻……