一个可实盘交易的系统

Discussion in 'Philosophy and Strategy' started by maharaj, Jan 10, 2009.

  1. 谢谢 TTL 和 zzhang 朋友提供TB代码。现在可以试试国内的自动交易了。
     
  2. ATR用的就是标准的真实波动幅度,然后也有一个类似于你的K的东西,多空可以设成一样,也可以分开考虑。我一般都设置为1。
    基本算法如下:
    1、判断是否开仓
    if (当前价格 > 开盘价 + ATR)
    多头开仓;
    else if (当前价格 < 开盘价 - ATR)
    空头开仓;

    2、开仓后判断是否被止损,是否进入止赢
    if (当前价格 < 开仓价格 - 止损点)
    多头止损平仓;
    else if (当前价格 > 开仓价格 + 止损点)
    空头止损平仓;

    if (当前价格 > 开仓价格 + 止赢点)
    {
    如果当前K线的价格回撤至止赢点的50%,用当前收盘价止赢平仓;
    }

    3、收盘平仓
    if (未被止损 && 未被止赢)
    收盘平仓;

    一旦被止损或止赢后,则从下根K线开始重新检查是否有开仓信号产生。不知道是否是你想了解的算法 呵呵 是属于你说过的日内趋势的系统 positional day trading

    关于K值,我在调整程序后又测了一下,测试结果如下:
    平均期望值 K=1.1 > K=1.0 > K=0.7
    实际盈利 K=0.7 > K=1.1 > K=1.0
    交易笔数 K=0.7 > K=1.0 > K=1.1
    交易成功率在两位小数上是一样的

    对于上述结果我的理解是K值越大,出现假信号就越少,也就是交易笔数越少和平均期望值越高的原因;
    那为什么K=0.7的实际盈利反而最好呢,我想是因为虽然平均期望值小,但是交易的次数多了,也就是获利的机会多了,所以才造成实际盈利比平均期望值高的1.1要大。

    当然,我觉得K值也不能为了追求高期望值而设的太大,因为那样的话虽然平均期望值提高了,但是你交易的次数少了,整体盈利能力就下降很多了,我取K=2.0测了一下,发现交易笔数只有1.0的一半不到,同时整理盈利也只有1.0的1/3。
    同样,也不能为了追求过高的机会,而降K设的太小,K值小到一定程度,成功率,和整体盈利能力都将骤降。
    另外,我在将K设为0.35和0.1的时候,发现其盈利能力有大幅上升,有点不敢置信,还请mahara等感兴趣的坛友也测测看看基于日线的交易是否有这种情况
    上述测试已扣除交易手续费

    不过我有个问题就是对K值进行优化是否算是在找一个针对历史数据的曲线拟合呢?因为谁也无法保证测试中表现最好的K值在未来的表现一定就很好?如果是这样,那我们是否需要去对K值斤斤计较呢?
     
  3. tradingart,先说一句,我们做测试的平台有太多的不一样,给交流会增加一些困难,建议你先熟悉一种标准平台(问我的话,当然是TradeStation 啦 :))。在这之前,我的意见很难有针对性,仅做参考。

    盈利能力可能指的是总的净盈利?如果是,这完全有可能。还要看用什么代价取得这些盈利,盈利因子和最大回撤就是衡量代价的重要指标。

    如何界定曲线拟合是个经典难题。BlueSpeculat 坛友的blog有这方面的文章。有些书里也有专门的章节介绍。最终的“度”还得靠自己的实践来把握。


    我用ATR的方式也做了测试。ATR 方式需要有多个参数:ATR周期,入点的ATR倍数,加上止损和止赢点位的设置,总共有4个参数。这就增加了曲线拟合的可能性。

    目前为止没有找到能跟 Dual Thrust 方式媲美的。从这点上真佩服 Chalek 的这神来一笔。
     
  4. 我还没有用ATR测试过,但是我的直觉告诉我使用ATR不好。
    如果今天的K线很长,那么,HH-LC 和LC-LL(参考上面的代码)当中总有一个比较大,也就是说明天的买卖点离开盘点比较远。反过来,如果今天的K线很短,那么明天的买卖点离开盘点比较近。这是一种非常好的自适应的调整,好得不得了,我一直在寻找一种方式来解决这个问题,没想到这么简单地解决了,神来之笔,大师之笔,点睛之笔!
    如果使用了ATR,玩完了,买椟还珠了。
     
  5. 大家都想想如何给这个系统添加过滤来提高绩效。
     
  6. 系统交易论坛的“孤舟骑浪”已写出。
    原帖见http://www.tradeblazer.net/forum/viewthread.php?tid=3818&pid=24785&page=1&extra=page=1

    Params
    numeric K(0.7);
    Vars
    numeric Spreadvalue;
    numericseries daynum;
    Begin
    spreadvalue=max(closed(1)-LowD(1),highd(1)-closed(1));
    if(barstatus==0)
    {
    daynum=0;
    }else if(barstatus==1 and day!=day[1])
    {
    daynum=daynum+1;
    }Else
    {
    daynum=daynum[1];
    }
    if(daynum>0)
    {
    if(high>opend(0)+K*spreadvalue)
    {
    buy(0,min(opend(0)+K*spreadvalue+2*minmove*pricescale,high));
    }
    if(low<opend(0)-K*spreadvalue)
    {
    sellshort(0,max(opend(0)-k*spreadvalue-2*minmove*pricescale,low));
    }
    }
    end
     
  7. 34楼TTL所发zzhang朋友编写的TB代码经编译已通过。持仓始终1手。与孤舟骑浪朋友的不同。
     
  8. 多谢 孤舟骑浪 和 tianlan 朋友的热心分享。
     
  9. 为什么呢
     
  10.  
  11. 对了,想问问maharaj坛友,测试结果报告里的
    Profit Factor
    Ratio Avg.Win:Avg.Loss
    两个统计项的结果是扣除手续费的吗,即作为分子的获利交易平均利润和利润总额是否是减去交易手续费再除以分母,还是不扣减手续费?

    谢谢~
     
  12. 一声叹息

    这个系统对于国内市场简直就是无敌金刚,但是对于国外市场,差强人意了。
    唉唉唉
    一叹国内使用系统的朋友之少
    二叹这个系统时日无多,在国门大开的情况下,尤其这样广泛探讨了以后
    三叹国外市场之复杂,出海不易
     
  13. 我理解是扣除交易费用以后的。
     
  14. 总会多起来的。现在大环境(制度,软件,平台)配套还比较差。我最困惑的就是三大交易所都没有止损指令,要靠第三方软件来实现。

    趁着有太阳,赶紧晒谷子。

    是,感觉现在国内的市场就像美国80年代。以后国内期货市场随机性也会越来越大。不过,这样才会有更多的东西要学。不然,人闲着要出事的。:D
     
  15. 没事偷着乐是不?很高兴认识您
     
  16. 我也一样。偷着乐是闷骚,我裸奔。
     
  17. 直接应用好象有难度
    同一根bar来回震荡的损失超过赢利了
     
  18. 我好像很无语。
     
  19. 1分钟上做的测试 呵呵