回复下面的一个帖子时意识到,这是一个大概总结AB的指标,回测,扫描的帖子,就单独放一个帖子里面了。欢迎大家指正不准确的地方。 原帖: 关于作为INDICATOR的AFL的调用时机和几个值 (http://www.hylt.net/vb/showthread.php?t=31600) =========================================== 拖了好一阵子,写了一些,然后意识到AB的用户手册里面有一个部分其实已经把绝大部分关键内容讲过了,我在下面的内容中把相关部分的链接包括进去。 先简单讲一下我看到的“森林”吧,我眼中的一套完整系统有3个部分来自Amibroker: 指标(indicator),回测(backtesting),扫描(scan/exploration) 策略研发时用到指标和回测 实时运行策略时用到指标和扫描 所以,起始点在于指标。任何基于指标的策略,不管怎么复杂,都需要从最基本的指标开始入手。 为了说明方便,假如就使用最简单的EMA crossover策略,先从指标入手,能够在图上把EMA画出来,把参数做成可调的,把交叉的信号画出来(上下方向的箭头,不同颜色和形状等)。 能够把基本的思想通过指标表现在图上之后,对AB和AFL就基本入门了。可参看下面两个链接: AFL入门: Understanding how AFL language works http://www.amibroker.com/guide/h_understandafl.html 指标入门: Creating your own indicators http://www.amibroker.com/guide/h_indbuilder.html 有了指标之后,就能直观地在图上看到信号产生的情况,对后面的进一步开发非常有帮助。 指标在实时交易系统里面也很有用,比如我的交易系统依靠一些指标产生进场/平仓的信号,那么在图上看到了,交易系统那边也应该有相应的动作,否则就是什么地方有问题。 回测的代码的复杂度根据策略的复杂程度而不同,就我的经验,最好能够重用指标生成信号的代码,因为随着策略的完善,生成信号的代码也越趋复杂,如果回测时信号生成的代码还要重写一遍的话,非常费时而且容易出错。 一开始的时候不必把精力放在策略是否盈利方面,而是要把回测的准确性作为重点,如果回测的结果都不准确,后面的一切都是沙滩上面建高楼。 :) 回测方面的东西,入门容易,但是到后面会成为很复杂的一个部分,特别是你的策略用于期货,外汇时,比如point value, position size等这些东西必须搞得非常清楚,否则的话,回测结果很可能不准确。如果策略中还涉及到头寸管理的话,代码还会更复杂一些。 回测方面,可参看下面的链接: 回测入门: Backtesting your trading ideas http://www.amibroker.com/guide/h_backtest.html 读回测报告: Reading backtest report http://www.amibroker.com/guide/report.html 回测期货/外汇: Backtesting futures (advanced) http://www.amibroker.com/guide/h_walkforward.html 头寸控制: Pyramiding/scaling and multiple currencies in the portfolio backtester (advanced) http://www.amibroker.com/guide/h_pyramid.html 有了一个基本可行的策略之后,如果是可以自动化的策略,则扫描可以派上用场了。其实使用AB进行自动交易的方法很多,但是都离不开大量的代码,所以,希望用AB做自动交易的朋友要有心理准备,除非你有一定的编程功底,要不很容易失望啊。不是不能做,而是做起来很困难... 我目前知道的AB自动交易有如下几种实现方法: 1) 写在指标的AFL代码里面,每个tick数据进来,自动交易代码就被触发。(这种方法实际上到后面虽然策略的复杂而交易品种的增加,几乎会慢得不能用,CPU消耗非常高,代码很复杂); 2) 写在进行扫描的AFL代码里面,每次运行扫描,生成交易信号,然后通过ibcontroller调用IB接口,或其他接口进行交易; 3)仍旧使用扫描去生成交易信号,然后输出到AB外面,比如数据库中,文件中,或者其他通信接口,然后由另外一个系统根据信号做交易; (题外话: 我自己采用第三种方法,经过实践证明是很好的选择,既充分发挥AB的优势,也不存在对AB/AFL的很大依赖性) 回到正题,扫描的作用就是将一段AFL代码或者一个策略逐个在每个品种的数据上运行一遍,符合条件则输出一些东西(计算值,交易信号,等等)。 scan和exploration其实非常接近(不知道为什么AB作者搞出这么两个名字,哈),似乎唯一的区别就是exploration可以输出自定义的结果,而scan只能输出buy/sell信号。 AB手册上的原文: Basically, an exploration works in a similar way to scan but instead of looking for and reporting just buy/sell signals it allows you to generate customizable screening (or exploration) report that can give you much more information than simple scan. 总之,exploration比scan更灵活,更强大,我记得就是初学AB的时候试了一下scan,后来就一直是用exploration做后面的东西。 扫描入门: How to create your own exploration http://www.amibroker.com/guide/h_exploration.html 总的来说,AB的指标和回测方面的功能很强大,性能方面也非常出色,是做技术分析和系统回测的利器。自动交易方面则需要大量的编程。比较有效率的方法是,使用AB做技术分析和回测,进行策略的研究,然后使用其他平台实现自动交易。
楼上Stanwell兄的想法以前也有海友问过,不过这东西的确是不方便出售,到不是有什么技术机密,只是因为配置运行环境和建立交易计划都不太容易。不管是否收费,放出来给大家只会是给自己和别人添乱啊,最后搞得大家都焦头烂额。我这里只是给大家提供一个思路,可以少走一些弯路。 今后时机成熟,也许会考虑和有稳定策略的朋友合作,毕竟,这种系统不是卖一套出去收点钱的快餐软件,配置和运行维护其实更重要。
不用指标应该也没有问题的,只要能至少生成进场,出场,头寸大小这几个关键信息,基本能被自动化。 最简单的方法就是把信号生成和信号处理的程序分开,不要混在一起写。 比如,price breaks down/up line A 生成信号 BreakUpA, BreakDownA 等 或者,price stays within range X for N bars 生成信号 PriceRangeA, PriceRangeB 等 然后 针对 BreakUpA 就有一段专门响应的程序,买入 XX 品种 N 单位 BreakDownA 另外一段程序,平仓 XX 品种 N 单位 line A, XX 品种, N 单位 等这些都做成可自定义的值, 这样就会逐渐积累起一套信号生成,信号响应的代码, 实际运行时也可以根据情况修改这些参数。 这算是比较简单的一个方法吧,在日线上交易的系统应该可以应付了, 如果是多品种的日内策略估计还是忙不过来....