论程序化交易
时间:2023-03-17 09:40:01 | 来源:电子商务
时间:2023-03-17 09:40:01 来源:电子商务
最近卢奴耕者想结合市场分力的构成,开发一套程序化交易,就翻了翻已经被很厚尘土压着的程序化源代码库。顺便总结一下当年接触过的程序化交易。
在曾经的某个时期卢奴耕者觉得自己交易最大的障碍就是无法完美的控制自己的情绪。于是卢奴耕者把目光放在程序化交易上,当然当时国内市场并没有良好的程序化交易平台,国内交易软件所提供的平台自由度不高,许多的想法无法实现。于是卢奴耕者把主要的精力放在了MT4上。开始猛攻了一段时间的编程。为什么要自己学习编程呢?因为自己也尝试过找程序员来写。最终的结果和想要的差别太大,无论怎么沟通都无法实现自己的策略,期间换过许多的程序员,结果都一样。通过和程序员的深入沟通发现了问题的所在。
程序化交易是交易者和程序员两个思想很难无缝衔接的工作。一个交易做得好的交易者并不一定能够清晰完整地把自己的交易策略表达清楚,甚至许多交易者的交易策略更多的来源于”盘感”也就是经验主义。这样的思想是无法用准确的计算机逻辑语言表述清楚的。强行的表述,最终的成品根本无法在历史回测中得到想要的结果。更别提真实地去面对市场。而一个好的程序员对于交易的理解不一定深刻,程序员的思维是受过严格逻辑训练的,这样的思维其实并不适合做交易,交易中的大部分情况下并不需要清晰的逻辑思维,交易中的很多结果也并非存在清晰的因果关系。交易是一个混沌的市场,强行的去理清混沌中的秩序是一件非常难的事情。
举个例子来说,卢奴耕者想要5日均线上穿10日均线就做多(这仅仅是例子),那么我们在实际中所看到的上穿已经是很明显的上穿了。这里先科普下均线的形成,5日均线就是前5天收盘价(这里可以自行设置)的平均值,这个值在二维的K线窗口中是一个点,所谓的5日均线就是把这些个点连接起来。其他周期的均线也是这样。
这里交易者理解的上穿一定是10日均线已经远离5日均线。但是在程序员的眼中,只要10日均线在当前盘面上的点大于5日均线在当前盘面上的点就是上穿。哪怕是大0.01也叫上穿。好了这里就需要另一个概念的引入,就是粘合,卢奴耕者现在问交易者,你认为什么是粘合?相信大部分人都无法用准确的数字来描述清楚什么是粘合。这就造成了交易者和程序员之间的沟通障碍。因为交易者自己都无法准确的描述什么是粘合,那么如何让程序员写出能够过滤粘合的程序呢?
当然上边只是卢奴耕者随便举的一个例子。实际上的交易系统更加复杂,这种复杂就造成了交易者的策略很难用程序化语言表述出来。在这种情况下卢奴耕者只能通过自己学习编程来实现程序化交易。
当卢奴耕者学习了一段时间后,就开始购买程序,拆解源代码的过程。这里卢奴耕者购买了许多的程序,这里面不乏价格昂贵的。当时国内的一家公司提供的程序售价60万人民币。当时卢奴耕者买了一套,可以说这个程序通过了卢奴耕者的各种测试,无论历史回测,还是真正的跑实盘交易,最终的交易结果卢奴耕者十分满意。但是当卢奴耕者拆解了他的源代码以后就发现了问题的所在,历史回测中规避了会产生亏损的几单交易,策略用的是马丁格尔。这里简单科普一下什么是马丁格尔:简单点说这个其实就是一个亏钱后加倍的一个策略,任何一次的盈利都可以找回之前的全部损失。所以这个程序之所以实盘表现得不错的原因也是这个。以0.01手起步,隔一段距离就翻倍进场。任何的一个回调都可以盈利出局,看似不错,但是卢奴耕者拆解完源代码后就不在实盘运行了。
当时卢奴耕者记得实盘运行了4个月,平均每个月能有20%的盈利。卢奴耕者不继续使用的原因是卢奴耕者知道交易市场极端事情经常发生,我们认为离自己很远的黑天鹅在市场上经常出现。马丁格尔策略的致命点就是如果遇上不回头的大单边行情就会直接大亏。卢奴耕者前些年还亲眼见过一个依托于程序化交易的量化团队,他们的交易报告中有一单是从0.01手直接加到了60多手。这样的仓位随时有爆仓的风险,最后不得不以手动平仓的方式减小损失。
市面上大部分的商用程序化交易还是依托于马丁格尔,因为这个策略的确在很长一段时间可以盈利,交易报告非常漂亮,很有卖点。但是经不起一次的风险,这里不乏有些冲动的小的资产管理团队,拿着散户的钱,用马丁格尔去交易。经受不住一次的大单边最终只能黯然收场。
在卢奴耕者的源代码库里还有一些依托于指标的程序化交易策略。这些指标在盘面上也很漂亮,最高点最低点的标注可谓是精准。但是当卢奴耕者拆解完它的源代码后发现,这里面有未来函数。这里需要科普一下什么是未来函数,卢奴耕者就不引用它的定义了,简单点说就是你当前看到的指标拐点,会随着价格的更新而发生改变,你刚依托于指标提示的拐点下单,然后拐点就改变了,是不是有种被指标欺骗的感觉。目前还有许多公司在拿这些东西商用。也许是商家本身无知,也许商家为了营销无所不用其极。这里卢奴耕者希望大家可以远离以这类指标为依托的程序化交易。这里面典型的就是zigzag指标。大家有兴趣可以自行研究一下。
卢奴耕者源码库里剩下的最多的就是各类指标的堆砌了。怎么讲呢,这里的程序化交易大部分还算中规中矩,有赢有亏。有意思的是这样的程序化交易和卢奴耕者随机下单的程序胜率差不多。卢奴耕者为了更加透彻的研究程序化交易,卢奴耕者不仅自己写了很多的策略模型,而且还在自己的朋友圈里征集策略来测试,当然有许多人是不会把自己的策略分享出来的,他们以为自己的策略真的可以盈利(许多人都有这样的错觉,关注其他文章可以找到答案)还有许多人需要把自己的策略转化成程序,这样自己就可以解放了。卢奴耕者写了很多,废了很大的周折排除了他们策略中模糊的部分(这一点传统的程序员做不到,卢奴耕者对于交易的理解很容易就知道他们的模糊点该如何表达,如何优化)然后去测试10年历史数据,很遗憾事实证明没有一个可以持续稳定的盈利。可能最终的回测结果是盈利的。比如十年4倍5倍等等。
但是这里卢奴耕者要说另外一个概念:一个好的交易系统不仅仅要最终能够盈利,还要中间不能有大幅度回撤。就说一个卢奴耕者写的程序,其中一个程序策略很简单,就是简单的K线组合界定,策略的拥有者声称这个策略帮助它在市场上翻了5倍。好吧,程序化实现。最终结果是8倍。但是,这个策略里有数次回撤在30%以上。许多人可能会说没关系啊最后不是赚回来了吗,说这话的人不了解交易,有些外行,如果这数次的回撤发生在连续的几次或者间隔不远的几次呢?如果把固定的下单量改成按照资金比例下单呢?事实证明这是不行的。以程序化为依托拿真金白银去市场上博弈,如果不能在程序的设计阶段就做到风险最小,那么交易者对自己的财产是极度不负责的(其实大部分人确实是不负责的)。交易本身就是在刀尖上跳舞,如果非要拿着不完美的程序化去市场上交易就不单单是跳舞了,就是在跳舞的过程中加入了劈叉的动作。
卢奴耕者代码库中还有一些其他的程序化交易。这里就不多说了,因为剩下的这些就没有代表性了。看了很多,写了很多。最后卢奴耕者发现这些交易系统都不符合市场的本质。那么程序化的出路在哪里。最后卢奴耕者总结出了程序化生存的根本:就是捕捉市场上的必然。这里先简单提一下,会有其他文章详细介绍。比如美国的非农业就业人口数据的公布,会引起美元的大幅度波动,以美元为结算的对手货币就会出现大幅度的波动,这里面大幅度波动就是必然。只需要写个程序在上边做突破买单,在下边做突破买单就是可以在模拟上稳定盈利。这里说的模拟会肯定盈利,实盘还有其它问题,卢奴耕者会在其它文章描述。
随着现在国内的金融衍生品市场越来越国际化,程序化交易成为了交易市场的下一个风口,卢奴耕者本人也非常看好程序化交易的未来,但是卢奴耕者对于未来能出现好的程序化交易持悲观态度。首先:国内市场的程序化交易门槛儿过高,现成的嵌入分析软件的平台所提供的编程环境并不友好。第二:对接cpt又需要强大的编程能力和团队运作。第三:就是国内市场的历史数据获取成本过于昂贵,没有精准的历史数据就做不了回测,做不了回测就大大的增加了程序的测试成本。第四:国内很难获得TICK级的数据。第五:国内市场在程序化交易上的认知偏差,几年不看程序化市场,现在出现了许多新的名词比如因子,神经网络,Alpha模型,人工智能、自学习等等。这些基本就是旧瓶装新酒,现在程序化这个圈子什么都提,就是不提交易。
综上卢奴耕者固执地以为程序化的交易本身还是交易,程序化交易只不过是交易的另一种操作形式。现在的程序化交易市场的各种高科技名词的堆砌并不能直指交易的本质,看似华丽,实则无用。就像你学会了再花哨的武术架子,但是对手离你五米,你够不到有什么用。所以这种“小资”的程序化交易代表不了未来。
卢奴耕者自信自己在交易市场是有一定阅历的,而且当年为了程序化也孜孜不倦的追求过,相信卢奴耕者比许多人做的都多,看得也多。在这样的情况下卢奴耕者都没有挖掘到一个可以盈利的程序化交易系统,那么普通的交易者遇上真正有盈利能力的程序化交易的概率能有多少呢?少交点智商税吧。尤其是在未来的一段时间,国内市场依托于程序化交易也就是量化交易的基金和私募会涌现出一批又一批。擦亮眼睛,别让人割了韭菜。
如果觉得不错,不要忘记关注,收藏,点赞。如有疑问可以评论一起探讨。