独立于交易开发平台的策略自动化引擎:ATSXL

Discussion in 'General Topics on Software and Data' started by espresso, Sep 21, 2013.

  1. 几年前在网上搜罗交易开发平台资料时发现了海洋论坛,然后就积极参与讨论,积极灌水。:)
    论坛上一些长期性的话题包括:交易开发平台,交易商及其接口的选择,策略的开发和执行,和对各种神圣杯子的鉴赏和批判。:D

    见过很多这样的讨论或问题:
    - 关于 Open Quant, Quant Developer, Amibroker, Ninjia Trader, WLD, Tradestation, MultiCharts 的讨论
    - 关于 OANDA, IB, MBT, Dukascopy, LMAX 的讨论
    - 如何使用 Amibroker 通过 IB (TWS API) 交易接口进行交易?
    - 如何使用 MT4 通过 IB 交易接口进行交易?

    最终归结为:
    - 开发平台 X 和 Y 的比较
    - 交易商 A 和 B 的比较
    - 如何使用开发平台 X 通过 A 交易接口进行(手动,半自动,全自动)交易?

    之前也有过一些讨论涉及到这个话题:是否能够让策略开发独立于策略执行?


    (穿越到4,5年前...)

    我的一个想法是不想再被锁定在某个开发平台和交易商上面。那么如何让策略开发,策略执行,订单管理独立于这些平台呢?

    比如,我现在可以用Amibroker做回测和生成市场信号,
    策略在Amibroker外面运行(因为用AFL写完整策略不仅很烦,而且被锁定在Amibroker上面),
    然后下单到MBT,
    订单管理也在Amibroker外面(也算策略的一部分)。
    如果Amibroker和MBT不再适合的话,
    可以用eSignal, TradeStation, Matlab,R, 甚至MT4做回测和生成信号,
    下单到Dukascopy, IB,或者其他交易平台

    其实我个人是这样的:如果已经有类似的东西,一般就不愿浪费时间再折腾自己造个轮子什么的。但是找了很久,实在没有这么一个符合我这种想法的东西。就自己动手做一个吧。

    ...
     
    Last edited by a moderator: Nov 19, 2013
  2. 挖此坑必有深意,却不知何谓“填平”?
     
  3. broker1-->broker1 adapter --> your independent platform
    broker2-->broker2 adapter --> your independent platform
    ...
    data vendor1-->dv1 adapter --> your independent platform
    data vendor2-->dv2 adapter --> your independent platform
    ...

    是这个意思吧,只要接口定义的好就可以了。
    但是任何一个平台肯定还是有一些绑定的东西的,比如语言和数据库。
     
  4. 台湾很多人用的下单机,算不算类似的?
     
  5. 高内聚低耦合,只不过有时候适得其反还要花更多的力气。
     
  6. (快速掠过1500多天加上昨天,回到现在)

    #1楼最后一段的最后一句已经是过去完成时了。:D

    挖坑的意思主要是鼓励自己把这件事做完,其实我对这事一直积极性不高,毕竟和我自己的交易是有矛盾的。但是又会老想着这事,干脆做事不后悔,进场吧。;) 其实对我也没有什么影响和损失。但也算做一件以后不会让自己想起来会后悔的事。这样的话,10年后不会这样想:要是我以前怎么怎么难说就怎么怎么......

    “填平”的意思就是:我打算年底前把第一个免费版本发出来,Amibroker 可以通过它连接 IB (TWS API) 接口进行自动交易。

    还有另外两个免费版本会陆续发出来。Amibroker 可以通过它们连接 MBT Navigator 和 Dukascopy JFX API 进行自动交易。

    其实还有一个MT4接口的版本,可以自动交易 FXCM 和 OANDA (MT4) ,不过很久不用了,今后看情况再说。
     
  7. 嗯,从软件开发的角度可以这么说,但是对于交易为主导的人来说,就太复杂了。
    这其实就是我不喜欢类似open quant, mt5 这些把事情搞得太复杂的开发平台的原因,钱没赚到,先修炼成程序员了。 :)

    下单算是一个功能吧,不过还有更重要的,就是策略是独立于开发平台和交易商接口的,
    这个引擎会根据你的策略,在某些事件,某些条件成立的时候对你的订单,或场内的单子做相应处理。

    你的开发和回测平台可以是 Amibroker(我比较喜欢的), 但也可以是你喜欢的tradestation, MT4, 甚至Matlab, R, Excel
    你的交易商可以是 IB, Dukascopy, MBT, OANDA。
    如果你想做个LMAX接口的话,可以联系我。如果你有做交易接口编程经验的话,我保证你2-3个星期内做出个接上这个系统就能交易的接口。;)

    嗯,是超级低耦合,对任何开发平台和交易接口都是独立的。
     


  8. 还是要取决于策略的类型吧,如果低频的那么不用太复杂的系统。但是如果需要对成交的价位有较高的控制力,tradestation神马的并不合适。磨刀不误砍柴工啊。如果系统对策略的抽象足够好,那么可能几个小时就能将一个复杂的策略的代码写出来。

    我现在就遇到一个策略处理的分层问题,很多细节没有能够很好的抽象出来,导致代码又臭又长,而且很难维护。暂时还在考虑如何更好的处理这些问题。
     
  9. 支持鼓励!:D
     
  10. 年初的时候有个帖子,“程序化交易开发者的重要经验”,好像你也在里面,我在那里提到过“策略和代码分开”的思路,不过没法深入到细节,因为很少人见过这种实际运行的系统。这次这个系统就是“策略和代码分开“的一个现实版本。:)

    “策略处理的分层问题”,我的原则是能不写代码就尽量不写代码。当然了,为了实现这个原则,如果处理不当的话,你最终会写很多不能重用的代码。:D

    作为系统开发者,我就是要实现绝大多数情况“不用写代码”,
    作为交易者,我就希望足够地懒,把精力集中在策略和交易上面,专门用“不用写代码”的方法。 :D
     
    russelharvey likes this.
  11. 哈哈,多谢支持!:D
     
  12. 我也不想写代码哈哈。

    但是现在我好像没有看到什么开源的,可以处理订单细节的代码库。但是对于短线交易,处理这些细节是无法回避的。

    举个例子,比如我要买入x股一个证券,但是他的流动性很差。因此我想bid在当前买入价(或者买入价+1),这样可以不支付价差费用。但是当市场有异动时,我就要支付价差立即买入(异动的判断可能利用某些算法实现)。那么平均而言,我可以获得比每次都支付价差好一些的价格。

    但是实际上你还要考虑很多细节问题,比如你在撤销原来的bid,使用另外一个市价单买入时,第一个订单却成交了,这样就会产生overfill,你的代码就要处理overfill的情况;另外也有可能撤单由于某些原因被拒绝了(我遇到过一次,解释说因为交易所过载导致),或者根本没有被传递到交易所,那么也要处理这些情况。等等等等。

    既要高效又要考虑到这些细节,必须设计一个有效的分层结构。比如撤单失败的消息回报系统底层会自动再次尝试撤单,而并不把此消息发送给策略本身,这样就可以降低复杂性。但是我还没有看到任何现成的系统能够自动处理这些问题。暂时我也不知道如何有效的对这些问题进行分层设计。

    谢谢!
     
    russelharvey likes this.
  13. 复杂的东西交给人脑,机械的东西交给电脑:D:p
    如果资金大了(成本合算了),一些复杂的东西也可以雇个人(有耐心的人,小姑娘等,并不需要懂交易等,只要有足够的耐心和纪律,有些东西搞程序(太复杂)不如雇人手工操作的)操作(比程序可靠灵活):D:p
     
  14. 如果这个系统这么牛,为什么要拿出来呢?而且还是免费版?是下个套吧?

    免费版自然是针对收费版而言,不过这里提前告知大家,其实免费版和收费版的功能是一样的;) :D
    但是,免费版只能交易一个品种,比如EURUSD,你可以自定其他品种,但是只能一个。
    因为只能交易一个品种,就没有那些性能优化的代码(因为没有优化的意义)。
    免费版和收费版就是性能上不一样而已。

    在解释为什么要发免费版之前,
    先说一个事实:这个世界上的钱不是太少,而是太多!尤其是在各种期货,外汇,国债,股票市场里面的钱。
    发这个免费版的用意就是让使用者不要把时间花在琢磨怎么能够免费地用这个系统上面,愿意用就免费地用,没有后顾之忧了吧。
    把重点放在回测,策略,和策略的执行/监控上面。
    把时间和精力花在怎么从市场里面多挣钱(而不是为了省小钱)才是正确的思维模式。
    就算交易一个品种,找到一个策略,部署好了,按计划执行,能赚钱是大概率事件。
    能从市场里面挣到钱的人其实也无所谓收费版本的费用,那就是business里面的一项成本。
    我希望用这个系统的用户能找到好策略,多赚钱,到时候要增加品种,扩大规模,有性能上的需求时,再谈收费版,甚至定制版的事都不迟。:D
    (其实我对收费版的积极性也不大,不少细节未定,这个以后说吧)

    至于为什么把这个系统放出来,其实很多原因:
    #1 我对自己的这个系统还是很自豪的,自己用得很高兴,天天在我睡觉的时候给我自动下单:cool:
    独乐乐不如众乐乐,我相信和别人分享好东西还是有好回报的。

    #2 开发平台和交易商接口千差万别,很多人费半天劲搞了个交易系统出来,结果哪天开发平台或者交易商那边有点状况,或者要改变市场和交易品种,之前那些程序就几乎是白写。所以,如果有点先见之明的话,就要让自己的交易系统独立于交易商和开发平台。这是我当初开发这套系统的最重要原因。

    #3 在海洋这里和其他地方经常看到有人花了不少时间在建自己的交易平台,从数据,图形,到指标,再到交易接口...。做所谓的系统交易/自动化交易/量化交易,其实很容易走偏方向,最后交易没做成,做了程序员。

    #4 开发一个真正能用于实战的交易系统比想像的要困难不少。我肯定不算是程序大牛,但自认比很多编程新手要强一些,就算是这样,开发这套系统也至少花了我3,4年的时间(保守估计花了我3000个小时!),还不算之前很多年其他方面的积累,虽然是边用边开发,也没耽误啥,但是最后的感觉就是,做程序真的比做交易辛苦多了。如果4,5年前我见到有类似系统的话,是一定会去买一套的,那可是节省了我几年的时间啊。

    #5 有个自动或半自动交易平台其实还只是刚开始,真正的利润是来源于策略和执行力,而不是一个自动化的交易系统,所以我可以把这个系统免费放出来,但是肯定不会把自己的策略放出来。

    #6 现在这个世界已经是电子化交易为主导了,市场里面各种大小杀器24小时运行着,个人交易者本来优势就不多,如果能有一个能够半自动或者自动的订单管理,策略运行系统辅助一下,那其实是增加了一些自身的优势。

    #7 这一点其实有点煽情了,不过我觉得每个人到人生某个阶段时都会体会到。开发交易系统这种事真的是太耗费时间,整天坐在电脑前的那些时间,真得不如多陪陪家人,去锻炼一下身体,和朋友聊聊天,或者出去玩一下。

    所以,如果任何人得到了一些益处的话,那就挺值得。

    运行环境和功能改天再介绍
    先说几个亮点:可以在家里电脑运行,也可以部署到VPS/EC2上面。编写策略本身不用写代码,当然如果你酷爱写程序或者有很多量化计算方面的要求的话,可以通过插件的方式调用Matlab, R, 或者使用VBA,当然了你还可以自己写插件,不过这方面我就完全不是我发这个系统的重点和初衷了。 :)
     
  15. 期待!
     
  16. 就是个做个公共的交易接口吧。有什么平台都往里面加。
     
  17. 楼主厉害,很是期待。
     
  18. 记得一个大牛接受记者采访,自我介绍是:我的职业是一名工程师,不过让我富有的却是做股票,当然我最喜欢的事还是写小说,已发表长篇两篇。。。。
    听上去很“人格分离”的事,一个人做了。
    espresso兄做的事情也让人有“人格分离”的感觉,呵呵。
     
  19. 呵呵,你考虑得过于复杂了。一个请求(下单/修改/撤销)发出去之后,一定要等到trade server反馈一个状态或订单号给你,才能有后面的操作。如果一段时间之后没有回应,就属于超时(断线或回报丢失),这个时候必须先查询订单或头寸的状态,才能有后面的进一步的操作。在这种逻辑下面,你应该不会遇到overfill的情况。不管怎么样,你要写很多的代码。:)

    在我现在的系统里是这样处理的:订单发出去之后,策略里面的那些修改/撤销订单,计算和调整止损,设定出场点的规则是不会被激活的,只有当系统收到一个有效订单号后,后面的很多规则才被激活。如果订单发出去之后收到了错误信息,系统运行日志里面会有记录。我用一个独立的日志监测软件定时扫描日志里面的错误,然后发邮件给我。

    当然了,我可以在系统里面配置另外的规则去撤销单子,比如连续3次去撤销同一个单子。但是这样太复杂了,没有太大意义。

    不管怎么说,我在策略这一层不用写任何代码,最多增加几条规则,配置一下日志监测软件。
     
  20. 介绍运行环境之前先大概介绍一下系统的几个主要部分和基本功能。
    其实,大家可以看到,这个系统使用了很多被无数人大量测试和使用过的平台和技术,
    我的原则就是用最高效的方法组建出一个非常稳定的交易系统。
    如果下面每个环节都自己开发的话........................................................ 就会死的很惨,嘿嘿 ;)

    至于系统的具体功能方面,取决于你在下面每个层面上的选择。

    策略回测:用现成的。我主要使用Amibroker,大家可以用Tradestation, OQ, QD, WLD, MT4, eSignal, prorealtime, Excel, Matlab, R, Python,C++, 铅笔或计算器什么的也行,总之就是你手头有的,最上手的,能懒就懒啦。:)

    市场数据源:用现成的。对于外汇而言,我就是用mt4的,方便又免费,你也可以用yahoo或者IB免费的(稳定性和准确性是个大问题,不推荐),或者eSignal, IQFeed这些收费的。一般来说就是你回测平台能得到的数据源就可以。

    市场信号生成:用现成的。我还是用amibroker,大家也可以用上面提到的现成开发平台,可以使用各种算法去过滤这些原始的市场信号,各种分类,识别,和决策算法都可以放在这一层(其实放在后面的量化层更好!)

    订单管理和策略运行:就是这个系统的核心了。策略主要是一堆参数,一些事件,一些规则,一堆公式组成。这个层面上有无限的灵活性,主要还是你脑袋里面的想法最重要。

    量化层:用现成的。比如简单的仓位和风险的计算用一些简单公式即可,或者复杂一点,使用决策树,决策矩阵,状态矩阵,神经网络,各种识别和分类算法,这些东西可以用excel,matlab,R,或者其他的一些库,以插件的方式来调用。原始的市场信号也可以在这一层过滤,这取决于你的喜好和策略里面的逻辑。我是倾向于把复杂计算放在这一层,这样可以直接使用那些算法库和计算平台,而不必把这些东西集成到前面的开发平台那一层。这个差别很大!这一层对于主观交易,半自动交易其实不是必须的。

    运行监控:使用一个独立的第三方日志监控软件,从系统运行日志中扫描各种你需要知道的信息,发邮件,短信,或声音警告。我是用一个收费软件。你需要自己去买,或者自己写一个脚本(这个后面要说一下)。这个系统不包括任何对外发送信息的功能,主要是由于安全性和性能方面的考虑,一切的重要信息只会写到3个系统运行日志文件中,而且,这对于事后分析非常有用!很多策略上需要改进的地方,都可以从日志文件中看到。

    交易商接口:这个系统已经有IB (TWS API), MBT (Navigator API), DUKASCOPY (JFX API) 的接口。其实还有一个MT4的接口可以接到FXCM和OANADA的MT4平台,不过我不太推荐,如果你实在要用也可以,只是针对MT4做出的策略移植到ECN类交易平台时有些麻烦而已(原因今后细说,主要是ECN和MM模式的一个重要差别)。你可以开发其他接口,相对很容易。

    =================================================

    我之后会提供一个简单的教程,
    提供一个 Amibroker 里面简单的均线交叉的扫描策略,
    和这个策略在这个系统里面的例子(包括几种进场和出场策略的实现),
    把IB TWS的模拟帐号配置好,
    配置好日志扫描,就可以运行了。