指标(indicator),回测(backtesting),和扫描(scan/exploration)的简介及入门链接

Discussion in 'AmiBroker' started by espresso, Mar 24, 2011.

  1. 回复下面的一个帖子时意识到,这是一个大概总结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做技术分析和回测,进行策略的研究,然后使用其他平台实现自动交易。
     
  2. 谢谢expresso,好东西 :)

    不过不会第三种方法,你是否考虑卖...:)?
     
  3. 楼上Stanwell兄的想法以前也有海友问过,不过这东西的确是不方便出售,到不是有什么技术机密,只是因为配置运行环境和建立交易计划都不太容易。不管是否收费,放出来给大家只会是给自己和别人添乱啊,最后搞得大家都焦头烂额。我这里只是给大家提供一个思路,可以少走一些弯路。

    今后时机成熟,也许会考虑和有稳定策略的朋友合作,毕竟,这种系统不是卖一套出去收点钱的快餐软件,配置和运行维护其实更重要。 :)
     
  4. AB高手
     
  5. 我有几个系统,准备自动一下,但编程把我难住了。

    我的一个很大苦恼是我主要使用从Tim Morge那里学来的market structure交易,全手动。espresso兄有何高见吗?
     
  6. 上面没说清楚,我手动交易不用指标的,只是画线。为了自动交易才开发了几个系统作为和手动的互补。人老了,自动化部分的编程很头痛。
     
  7. 不用指标应该也没有问题的,只要能至少生成进场,出场,头寸大小这几个关键信息,基本能被自动化。
    最简单的方法就是把信号生成和信号处理的程序分开,不要混在一起写。
    比如,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 单位 等这些都做成可自定义的值,
    这样就会逐渐积累起一套信号生成,信号响应的代码,
    实际运行时也可以根据情况修改这些参数。

    这算是比较简单的一个方法吧,在日线上交易的系统应该可以应付了,
    如果是多品种的日内策略估计还是忙不过来....
     
  8. 受教了,多谢。

    看来必需得下功夫学学这方面的编程了。
     
  9. 多谢espresso的回复!寥寥数语,使我们新手少走几年湾路!谢谢了!
     
  10. 不用客气。 :)