就实现GRID TRADING请教TS玩家

Discussion in 'TradeStation' started by johnyj, Sep 17, 2005.

  1. 目前GRID TRADING 在外汇交易中是一个焦点,很多人使用该策略获得了惊人的回报。为了对这个策略作出测试,我试图在TS中进行编程。

    策略很简单,但在TS中实现起来却有些麻烦。

    策略是:如果决定中线做多,那么当前价格上下每隔20点挂一张买单,每个买单获利目标20点,不设止损。一旦某单成交并获利平仓,就重新在该位置开设一张新的买单。

    这个策略如果在单边市做反,会一度留下大批未平仓部位,超过上百,但TS中有最多50 entry的限制,因此能开的单并不多,而且TS将所有开仓都混在一起作为一个多头部位,这就限制了对于每一仓位的分别操控,我用了些其他的办法,但仍然觉得实现起来不是很方便。尤其是每隔20点一张买单,而每个买单的获利目标定为100点的时候,更难编程。这里可以看出TS对于多仓位的操作是有很大局限的,而且速度极慢,估计在算法上也不够优化。

    请教用RINA的,是否加上RINA会容易实现一些,我上次装了RINA后TS的测试报告完全坏掉了,根本无法使用,只好全部重装,后来就没再装RINA。

    http://www.stockbooks.cn/cybbs/dispbbs.asp?boardID=77&ID=32593&page=1
     
  2. OK,已经实现了,是用EXCEL做的,想不到EXCEL还真好用啊!
     
  3. 确实如johnyj兄所言,TS中对多仓位的操作的设计是有缺陷的,比如那个CurrentContracts在一次获得计算机会的整个过程中是不会改变的,这样在这一次计算机会中如果有多个影响持仓的操作就会出现问题。
    我在具体使用的时候不得已就自己设置几个数组,分别记录每一笔交易的仓位和价位,然后就好控制了。不过好像操作数组就容易出现速度慢的问题,这是easy的代价,TS5中没有中间变量,复杂的系统中会有大量的中间变量产生的数组,而且这些数组还都不是整型的,速度慢,常常出现CPU达到100%。我知道TS8是支持中间变量的,目前没有办法尝试,估计只有调用dll才能彻底解决这个问题。
    在我的理解中RINA只是对TS的检验报告应用各种模型进行评估分析以确定如何进行最优资金管理而已,应该无法解决这个仓位的问题。
     
  4. 特别感谢johnyj兄,给我们提供了一个极其奇特的思路,仔细思考过以后发现这个思路其实是非常有效的,只要在外部用某种方式判断上升趋势或者下降趋势,用此方法不仅可以抓住趋势,还可以抓住趋势中间的振荡,相当于把所有可识别的振荡都拉开了然后加在趋势之上。而亏损在于趋势的转换判断的准确性,这比一般的仅仅捕捉趋势的交易系统思路要好的多。

    请教johnyj兄,OANDA是个外汇交易平台么?能否给个网址(我不是做外汇的)
    另外你用excel解决了这个问题,如何解决的,可以用excel进行BackTest么?
     
  5. 是啊,这个想法的内涵很不简单,很有点银行的思路(银行从来不认赔,只收钱,就算有一大笔坏帐,门面也还是依然很光鲜,呵呵)。正如一个美国人说的,就和美国政府一样,赤字再大,只要不断印刷新钱,赤字百分比却不变。这样操作了几年,也许资产净值并没有增加多少,可是帐户却大了几百倍,这实在是水涨船高。。。通常这么操的连趋势都不判断了,两个方向同时操。

    EXCEL实现起来很简单,一个价格数据前面几列不是DTOHLCV么,那么后面100列,每列对应一个仓位,依次20点增加,然后每列下每行都用逻辑语句判断一下当前的价格有没有穿越格子那列的价格,如果穿越,则置1,表示持仓。如果持仓,就判断一下是否穿越目标价位,如果穿越,则置2,然后再置0,表示空仓。然后该行起始用一列计数所有的含有2的格子,并乘以获利点数,累加。
    亏损则是所有未平仓位的进入价和当前价格的差距之和。

    http://www2.oanda.com/cgi-bin/msgboard/ultimatebb.cgi?ubb=get_topic;f=15;t=002524

    http://www2.oanda.com/cgi-bin/msgboard/ultimatebb.cgi?ubb=get_topic;f=15;t=003696
     
  6. johnyj兄看来对Excel非常熟悉啊,不过用excel做backtest很麻烦吧?我遇到这样的问题的时候都是对每一笔持仓都保存在数组中来解决的,这样速度虽然不能令人满意,却可以利用TS的Optimize功能了

    “两个方向同时操作?”那岂不是自买自卖了,多单赚的钱不正好是空单亏的钱么,我没想明白,老兄是如何理解的?再次感谢johnyj兄
     
  7. 大致说明一下:这个办法的本质在于建立一个缓冲区。

    比如价格在500到1000范围内变化,当前价格是500。如果我们开两个帐户,一个帐户从500开始做多,每隔10点一张多单,获利目标10点,平仓后重开。另外一个帐户从500开始做空,每隔10点一张空单,也是获利目标10点,平仓后重开。

    假设价格上升到600,那么我们在500,510,520,530。。。590成交的多单,依次都成交并平仓,如果价格曲曲折折地上升到600,我们有一些仓位很可能数次获利平仓。
    总的获利根据市场的拉锯程度,可为120-180点不等。

    与此同时,我们在另一个帐户积攒了一批未平仓空单,也是500,510,520。。。590,600。如果价格曲曲折折地上升到600,那么我们中间会有一些仓位数次获利平仓并重开。但最终当价格到达600时,我们在所有的位置开的空仓都呈现为账面亏损。总的平仓获利为30-70点不等,而总的未平仓亏损是100+90+。。。+10=550点。这时候,我们最多获利250点,而未平仓亏损则达到了550点。

    假设从600开始,行情又回落到了500。这时,我们的空头帐户就一路获利平仓下来,当价格回到500点时,我们就没有一张未平仓空单了。依据市场的拉锯程度不同,空单可以获利120-180点不等。而多头帐户那边,多单则一路积聚下来,当价格回到500的时候,多单的全部未平仓亏损达到了550点,而获利则是30-70点不等。我们又获利了250点,总共已经达到了500点。未平仓亏损仍然是550点,只不过这次是多单了。

    这里你大概已经看出来了,当一个方向的单子遍布整个运动区域以后,只要价格还维持在这个范围内运动,那么我们的未平仓亏损也就是风险无论如何不会超过550点,而我们的获利是随着价格在这个范围内的每一个波动而增加的。同时,在行情运行到区域中间的时候,账面亏损会缩小到最低,这可能提供一个最佳的全部平仓的机会。

    当然这是一种理想情况。有时价格在一个区域来回运动可以达到7-10次之多,那时就是这个系统的黄金时期,在账面最大亏损不变的情况下,账面利润可以迅速扩大。但假设价格突破600高点,不断向上创新高,这时系统的未平仓亏损就呈现为指数式上升(800点时空单总共账面损失达到4650点,而1000点时则是12750点),而系统的获利却只是线性上升,因此严格的资金管理以及预先依据历史高低价格范围给资金留出余地对于这个系统来说是非常重要的。

    从长远角度来看,一旦一个方向的单子已经遍布全部的历史高低价格区间,那么从此以后账面亏损将不再增加,而只有不断地获利平仓。。。当然,这只是一种推测,因为谁也无法判断什么时候价格会突破历史高低点一去不复返。
     
  8. 感谢johnyj兄详细的说明!这种思路确实不是一般投资者所能想得出来的
    在实际交易研究的时候往往会发现,价格确实经常在某一个区间内波动,突破了这个区间,往往又会在下一个等距的区间内波动,以前却没有想到过可以将这些振荡区间利用起来,而且如果手续费足够低的话,用在日内交易上也应该非常有效。抽空应该做一个这样的系统试试看。再次感谢johnjy兄!
     
  9. 呵呵,有兴趣可以继续关注OANDA的讨论。

    目前更加系统的测试揭示了一些问题:这个系统获利的关键仍然在于合理的交易品种选择,在趋势性很强的美元相关货币对上使用非常危险。把握入场的时机也是关键,如果刚好在一个盘整区结束的时候进入,失败的可能是非常大的。

    可以看到某些人提出了一些变通的方法:限定一个方向的最大单数,获利或亏损10%平仓,避开市场的急剧波动,等等。

    机械化是这个方法的最大特点,一旦决策一次性完成,交给自动下单,就不用管了。
     
  10. 我也认为这个题目的确很有意义,几年来也一直在思考这个问题,并在思路的设计上小有收获。
    01年时,我用这个方法在一个死多头朋友的帐户上专门做空,做了15笔,只输了一笔,后来这个朋友发现这个办法不错就自己做了,从此我在他的帐户上就停了下来,而这个朋友也从此不再是死多头,现在依旧在这样做。
     
  11. 我觉得这个方法还有更深一层的哲学意义。

    大多数人都是要么亏损了结要么获利了结,这个方法只了结获利不了结亏损,也就无限地增加了亏损部分转亏为赢的可能,所有亏损的仓位,迟早会返回原地,所以如果单方向操作的话,从长期来看就是一个只赢不亏的无风险系统,而且可能获利能超越一般股票或债券市场的表现。
     
  12. 可能吗? 一个只进不出的怪物?

    数学原理并不复杂 门槛低得很

    如果行得通 银行基金们还忙活个啥? 坐着收钱好了
     
  13. 恰当的时机介入 是这个策略盈利的关键

    这点和大多数的策略没有两样

    呵呵 j兄 我觉得你最近在寻找 永动机
     
  14. 遇到ST、PT怎么办?
     
  15. 呵呵,银行就是坐着收钱啊,央行还自己印钱呢。
     
  16. 这个策略的目的就是摆脱时机选择这个最困难的部份。当然如果有一定的时机选择功力,肯定是有帮助的。
     
  17. 这个方法的讨论,在MONEYTEC和OANDA都有超过上千帖的连续跟踪,我昨天又看了一些,实在是挑战人的想象力。。。

    这个方法的成功主要在于:获利增长的速度要超过交易区域不断扩大对于资金的需求量。在开始的时候,只有很小的一部份资金,无法应付大范围的波动,但随着不断的获利平仓,就有越来越多的资金可以对付更大范围的价格波动,网也越拉越大。


    一个简单的网格交易系统,其绩效是不稳定的,但通过将主观式的基本面分析,传统TA和资金管理方法有效地组织在一起,这个方法的威力可以大增。

    比方说,两年后我们已随着行情的运行在新的区域拉网捕鱼,而在这个区域我们的资金量和操作规模都比原来大了10倍,这时候即使两年前我们在很远的区域有一些未平仓的亏损单,它们对于我们现在的资金影响都不是很大了,我们可以选择把它们砍掉,但完全没有必要,我们关心的永远是尽力在目前这个拉网区域获取足够的利润以保证我们可以安全抵达下一个拉网区域。

    交易者在市场亏损,只有两个途径:一是止损,一是爆仓。只要杜绝这两点,实在看不出有什么可能亏损。

    这个方法只能用于交易外汇和期货。
     
  18. “交易者在市场亏损,只有两个途径:一是止损,一是爆仓。只要杜绝这两点,实在看不出有什么可能亏损”


    为何可以杜绝暴仓呢? oanda不是50:1的杠杆吗?

    那波动只要大于200点, 底仓的反向单不是就爆了吗?还如何死扛呢?
     
  19. 请问你用数组的思路是怎么样的,我怎么觉得很难实现。

    比如说我挂很多限价单,我怎么追踪在某个价位的单子是否成交,或者已经平仓了而需要重新开设呢? TS 的 marketposition是对所有单子而言。。。
     
  20. MarketPosition肯定不能使用了,这个函数在一根K线获得计算的时间内数值是不会变化的
    假如你分别有5种条件的买入指令和卖出指令,为了跟踪他们的持仓,设置一个数组来接管TradeStation对持仓的管理:LongPosition[5]、ShortPosition[5],在每次交易之后分别记录每个条件下的交易成交状况即可。