Dynamic Break Out II系统之分析家版

Discussion in 'General Topics on Software and Data' started by 战神觉者, Dec 14, 2005.

  1. 主要模拟Building Winning Trading Systems with TradeStation 中的DBOII系统的多头版。公布出来供大家参考。

    VARIABLE:ceilingAmt=60,floorAmt=20,bolBandTrig=2;
    VARIABLE:lookBackDays=20;
    VARIABLE:EntAndExitSign=0,SellSign=0,BuySign=1;
    VARIABLE:True=1,False=0;
    IF BARPOS>=60 THEN BEGIN
    todayV:=STD(Close,30);
    yesterDayV:=STD(close[1],30);
    deltaV:=(todayV-yesterDayV)/todayV;
    lookBackDays:=lookBackDays*(1+deltaV);
    lookBackDays:=INTPART(lookBackDays);
    lookBackDays:=Min(lookBackDays,ceilingAmt);
    lookBackDays:=max(lookBackDays,floorAmt);
    MID:=MA(CLOSE,lookBackDays);
    upBand:=MID + bolBandTrig*STD(CLOSE,lookBackDays);
    dnBand:=MID - bolBandTrig*STD(CLOSE,lookBackDays);
    buyPoint:=HHV(HIGH,lookBackDays);
    longLiqPoint:=MID;
    EntPoint:=ENTERBARS;
    IF EntPoint=EntAndExitSign THEN BEGIN
    BuySign:=FALSE;
    SellSign:=True;
    END
    ExitPoint:=EXITBARS;
    IF ExitPoint=EntAndExitSign THEN BEGIN
    BuySign:=TRUE;
    SellSign:=False;
    END
    IF BuySign=TRUE THEN BEGIN
    IF Close>upBand THEN BUY(100%,STOP,buyPoint);
    END
    IF SELLSIGN=TRUE THEN sell(100%,STOP,longLiqPoint);
    END;
     
  2. 不错哦,你用的如何?
     
  3. 就这系统论坛曾进行了深入的探讨,你是否可发份测试报告,我们来比较一下。
     
  4. 20040101-20051204

    系统测试报告
    测试股票数: 1370
    净利润: -4,673,737.00元 净利润率: -5.70%
    总盈利: 12,261,515.00元 总亏损: -16,935,252.00元

    交易次数: 7603次 胜率: 28.99%
    年均交易次数: 3943.76( 2.88/股) 盈利/亏损交易次数: 2204/5399

    最大单次盈利: 63,575.68元 最大单次亏损: -30,014.00元
    平均盈利: 5,563.30元 平均亏损: -3,136.74元
    平均利润: -614.72 平均盈利/平均亏损: 1.77

    最大连续盈利次数: 5 最大连续亏损次数: 9
    交易平均周期数: 30.55
    盈利交易平均周期: 85.94 亏损交易平均周期: 7.94
    盈利系数: -0.16

    最大浮动盈利: 3,447,365.00元 最大浮动亏损: -7,165,756.50元
    最大浮动盈亏差: 10,613,121.50元

    总投入: 82,020,000.00元 有效投入: 81,831,456.00元
    年回报率: -3.00% 年有效回报率: -3.00%
    简单买入持有回报: -129.79% 买入持有年回报率: -1.#J%

    总交易额: 878,217,856.00元 交易费: 6,586,641.50元
    交易费/利润: -1.41

    测试时间: 2004/01/01 ---2005/12/05 共703天
    测试周期数: 460
    平均仓位: 17.37% 最大仓位: 100.00%
    平均持仓量: 2,117.70股 最大持仓量: 62,400.00股

    ------------------------------买入信号统计-----------------------------------
    (统计所有买入信号点情况,不考虑交易测试中资金及策略造成的信号删除问题)
    成功率: 31.18%
    信号数量: 12362 年均信号数量: 6412.31
    五日获利概率: 37.28% 十日获利概率: 38.68%
    二十日获利概率: 32.73% 目标周期获利概率: 32.73%
     
  5. 系统测试摘要

    测试股票数: 1370
    年回报率: -3.00% 年交易次数: 3943.76次( 2.88次/股票)
    胜率: 28.99% 成功率: 31.18%
    平均利润: -614.72元 年均信号数量: 6412.31次
    最大单次盈利: 63575.68元 最大单次亏损: -30014.00元
    交易次数: 7603 盈利交易次数: 2204 (占28.99%)
     
  6. 我认为这个公式不对

    我认为这个公式不正确。我是这样写的。
    Code:
    variable:lookbackdays=20;
    tv:=std(close,30);
    if barpos<31 then 
       lookbackdays:=20;
    else begin
       yv:=ref(tv,1);
       dv:=(tv-yv)/tv;
       lookbackdays:=(1+dv)*lookbackdays;
       if lookbackdays>60 then
          lookbackdays:=60;
       if lookbackdays<20 then
          lookbackdays:=20;
       midBand:ma(close,lookbackdays);
       upBand:midBand+std(close,lookbackdays)*2;
       dnbnad:midBand-std(close,lookbackdays)*2;
       
    end;
    
     
  7. 主要是这句
    lookBackDays:=INTPART(lookBackDays);
    我没有取整数,其他的都一样。
     
  8. lookBackDays是要取整的,如果lookBackDays计算出来是20.2等带小数的,那么MIDBand和upBand等要怎么算啊。比如,MIDBand总不能说20.2日的简单平均吧?不过分析家算计的时候应该也会自动取整。结果会是一样的。
    另外你写的是技术指标,其实就是一个自适应的参数的布林带。而我贴出的是交易系统,主要是融合了自适应参数的布林带和自适应参数的通道突破系统,以STOP指令买卖。
     
  9. 我主要是学习它的思路。如果我使用它的话,或者已经改进了适合自己的了那我不会公布哦。其实公布的系统绩效往往测试并不理解,也许是针对的市场不同;或者是一些系统本身公布出来的目的是学习它的一种思路。正真适合自己的我们还要二次开发,自己开发出来的系统才可能适合自己。p.s:在此版公布前我还没有在分析家统计过绩效。
     
  10. 取不取整差别非常大,你看看这两个公式。看看图形差别很大的。
    Code:
    variable:lookbackdays=20; 
    tv:=std(close,30); 
    if barpos<31 then 
       lookbackdays:=20; 
    else begin 
       yv:=ref(tv,1); 
       dv:=(tv-yv)/tv; 
       lookbackdays:=(1+dv)*lookbackdays; 
       if lookbackdays>60 then 
          lookbackdays:=60; 
       if lookbackdays<20 then 
          lookbackdays:=20; 
      midBand:ma(close,lookbackdays); 
       upBand:midBand+std(close,lookbackdays)*2; 
       dnbnad:midBand-std(close,lookbackdays)*2; 
    
        
    end;
    
    Code:
    VARIABLE:ceilingAmt=60,floorAmt=20,bolBandTrig=2; 
    VARIABLE:lookBackDays=20; 
    VARIABLE:EntAndExitSign=0,SellSign=0,BuySign=1; 
    VARIABLE:True=1,False=0; 
    IF BARPOS>=60 THEN BEGIN 
    todayV:=STD(Close,30); 
    yesterDayV:=STD(close[1],30); 
    deltaV:=(todayV-yesterDayV)/todayV; 
    lookBackDays:=lookBackDays*(1+deltaV); 
    lookBackDays:=INTPART(lookBackDays); 
    lookBackDays:=Min(lookBackDays,ceilingAmt); 
    lookBackDays:=max(lookBackDays,floorAmt); 
    look:lookbackdays;
    end;
    
     
  11. 我的代码是这样,取整后的(技术指标):
    VARIABLE:ceilingAmt=60,floorAmt=20,bolBandTrig=2;
    VARIABLE:lookBackDays=20;
    IF BARPOS>=60 THEN BEGIN
    todayV:=STD(Close,30);
    yesterDayV:=STD(close[1],30);
    deltaV:=(todayV-yesterDayV)/todayV;
    lookBackDays:=lookBackDays*(1+deltaV);
    lookBackDays:=INTPART(lookBackDays);
    lookBackDays:=Min(lookBackDays,ceilingAmt);
    lookBackDays:=max(lookBackDays,floorAmt);
    MID:MA(CLOSE,lookBackDays);
    upBand:MID + bolBandTrig*STD(CLOSE,lookBackDays);
    dnBand:MID - bolBandTrig*STD(CLOSE,lookBackDays);
    end;
     
  12. 应该说取整后和不取整有细微差异。虽然你的代码没有取整不过分析家计算时肯定帮你取整了,只不过算法和INTPART取整两样。
     
  13. 本系统最大的特点是自适应参数
     
  14. 能不能贴份你使用的交易系统的测试图供大家参考,我想系统测试不会影响你的系统使用吧,哈哈。
     
  15. 是否有DBII的文字说明?

    发现了在第六章里。
     
  16. DBOII系统多头版修订1(结果一样,只是代码更易读):
    Input:ceilingAmt(60),floorAmt(20),
    bolBandTrig(2.0),howMany(1000);
    VARIABLE:lookBackDays=20;
    IF BARPOS>=ceilingAmt THEN BEGIN
    todayV:=STD(Close,30);
    yesterDayV:=STD(close[1],30);
    deltaV:=(todayV-yesterDayV)/todayV;
    lookBackDays:=lookBackDays*(1+deltaV);
    lookBackDays:=INTPART(lookBackDays);
    lookBackDays:=Min(lookBackDays,ceilingAmt);
    lookBackDays:=max(lookBackDays,floorAmt);
    MID:=MA(CLOSE,lookBackDays);
    upBand:=MID + bolBandTrig*STD(CLOSE,lookBackDays);
    buyPoint:=HHV(HIGH,lookBackDays);
    longLiqPoint:=MID;
    IF Holding = 0 THEN BEGIN
    IF Close>upBand THEN BUY(howMany,STOP,buyPoint);
    END
    IF Holding >0 THEN sell(howMany,STOP,longLiqPoint);
    END;
     
  17. DBOII系统空头版分析家代码:
    Input:ceilingAmt(60),floorAmt(20),
    bolBandTrig(2.0),howMany(1000);
    Variable:lookBackDays=20;
    IF BARPOS>=ceilingAmt THEN BEGIN
    todayV:=STD(Close,30);
    yesterDayV:=STD(close[1],30);
    deltaV:=(todayV-yesterDayV)/todayV;
    lookBackDays:=lookBackDays*(1+deltaV);
    lookBackDays:=INTPART(lookBackDays);
    lookBackDays:=Min(lookBackDays,ceilingAmt);
    lookBackDays:=max(lookBackDays,floorAmt);
    MID:=MA(CLOSE,lookBackDays);
    dnBand:=MID - bolBandTrig*STD(CLOSE,lookBackDays);
    sellPoint:=LLV(LOW,lookBackDays);
    shortLiqPoint:=MID;
    IF Holding = 0 THEN BEGIN
    IF Close<dnBand THEN BUYSHORT( howMany,STOP,sellPoint);
    END;
    IF Holding <0 THEN SELLSHORT( howMany,STOP,shortLiqPoint);
    END;
     
  18. DBOII系统多空完整分析家版代码:

    Input:ceilingAmt(60),floorAmt(20),
    bolBandTrig(2.0),howMany(1000);
    Variable:lookBackDays=20;
    IF BARPOS>=ceilingAmt THEN BEGIN
    todayV:=STD(Close,30);
    yesterDayV:=STD(close[1],30);
    deltaV:=(todayV-yesterDayV)/todayV;
    lookBackDays:=lookBackDays*(1+deltaV);
    lookBackDays:=INTPART(lookBackDays);
    lookBackDays:=Min(lookBackDays,ceilingAmt);
    lookBackDays:=max(lookBackDays,floorAmt);
    MID:=MA(CLOSE,lookBackDays);
    upBand:=MID + bolBandTrig*STD(CLOSE,lookBackDays);
    dnBand:=MID - bolBandTrig*STD(CLOSE,lookBackDays);
    buyPoint:=HHV(HIGH,lookBackDays);
    sellPoint:=LLV(LOW,lookBackDays);
    longLiqPoint:=MID;
    shortLiqPoint:=MID;
    IF Holding = 0 AND Close>upBand THEN
    BUY(howMany,STOP,buyPoint);
    IF Holding >0 THEN
    sell(howMany,STOP,longLiqPoint);
    IF Holding = 0 AND Close<dnBand THEN
    BUYSHORT( howMany,STOP,sellPoint);
    IF Holding <0 THEN
    SELLSHORT( howMany,STOP,shortLiqPoint);
    END;


    本FXJ版DBOII系统参考了WLD和TS版的DBOII系统,相关链接:
    http://www.hylt.net/club/viewtopic.php?t=4882
    http://www.hylt.net/club/viewtopic.php?t=4847
     
  19. 感谢战神觉者,你的努力使得分析家下的交易系统代码得到丰富,很多分析家用户的水平会有新的进步。
     
  20. “IF Close>upBand THEN BUY(howMany,STOP,buyPoint);
    END ”
    这一句有点问题。