您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者公式>>正文内容

TBV4公式升级说明[开拓者公式]

 

 
  •  经过很长一段时间的开发和调试工作,TBV4终于快要正式发布了,感谢各位朋友一路以来的关注和支持,这次升级主要是公式平台的升级,修改可谓天翻地覆,杯具的就是,由于改动太多,没法直接兼容TBV3的公式以及导入导出文件,请大家谅解!

    一、公式升级取消的功能点:
    1、内建平仓指令:
        已删除8个内建平仓函数,准备等新版本稳定后以用户函数的形式提供类似功能。
    2、保证金不足强平机制:
        旧版公式在测试和实际交易中,如果出现保证金不足的情况,会产生强制平仓的指令。考虑到保证金不足是以虚拟资金计算,如果设置不正确可能会导致实盘平仓的严重后果,所以取消该功能。
    3、延迟发单机制:
        旧版通过交易函数中使用delay参数达到延迟到下一个Bar开盘发单的效果,在实际应用中,通过Delay参数只能使用NextOpen等未来函数来获取价格,整个设计过于复杂。考虑到可以通过获取上一个Bar的条件值来进行判断,在当前Bar开盘交易这种方法替代延迟发单的机制,决定取消该功能。
    4、公式类型调整:
        用户字段,技术指标,K线型态,特征走势,交易指令这5种类型公式统一为公式应用,公式应用既可以输出线条,也可以进行交易。
    5、公式的条件表达式取消无效值传递机制:
        旧版本中,如果 a = 无效值 , b = 100, 则 a + b = 无效值。+-*/等数学运算及> < 等逻辑运算表达式都支持无效值传递机制。
        新版本中,如果 a = 无效值,b = 100,则 a + b <> 无效值。所以不能再用旧版本的方法来进行无效值判断。
       进行这种调整是因为旧版本对所有的运算符进行了重载,但这种重载浪费大量的计算时间,导致公式执行效率低下,为了提高公式的运行效率,决定取消这种机制。
       在旧版本系统中,可能有以下类似的写法:
       bInBoardRange = (Open < Q_LowerLimit + 10*MinMove*PriceScale) Or (Open > Q_UpperLimit - 10*MinMove*PriceScale);
       在不是当天的Bar上,因为Q_LowerLimit和Q_UpperLimit是无效值,因此整个表达式都是无效值。bInBoardRange的值为False,所以能够正常使用。
       同样的代码,在新版中,由于没有无效值的传递机制,在不是当天的Bar上,bInBoardRange的值可能是True,系统不能正常的运行。
       为了处理这种情况,需要进行有效性判断,大致代码如下:
       bInBoardRange  = false;
       If(Q_UpperLimit != InvalidNumeric && Q_LowerLimit != InvalidNumeric)
       {
          bInBoardRange = (Open < Q_LowerLimit + 10*MinMove*PriceScale) Or (Open > Q_UpperLimit - 10*MinMove*PriceScale);
      }



    二、公式升级增加的功能点:
    1、叠加商品可以进行交易和测试:
        旧版本只能使用Buy(1,MyPrice);这样的语句进行交易,新版本可以使用Data1.Buy(1,MyPrice),以及Data1.MarketPosition这样的函数获取交易状态。大部分函数都支持使用Data#.前缀进行调用。
       这样可以方便的实现多个商品的,单个系统的组合测试,可以测试套利和对冲系统。
    2、PlotNumeric,PlotString,PlotBool画线输出函数增加定位点参数:
        以PlotNumeric距离,其他类似,PlotNumeric的前两个参数保持不变,第三个参数修改为定位点参数,默认参数为0,其他的参数和旧版一致。
        当我们使用定位点函数时,对于PlotNumeric,将输出一条线段,连接定位点和输出值的点;PlotBool和PlotString将在指位置画出相应的内容。
    3、增加投资组合函数:
        增加portfolio_XXX类型的函数,用户获取当前图表,当前公式应用对应的投资组合的状态和性能信息,原CurrentCapital用Portfolio_CurrentCapital代替。
    4、序列变量自动传递最新值:【new】
         旧版本中为了序列变量的上一个Bar值,需要编写语句 MyVar = MyVar[1];
         新版本中变为自动传递,即可以省略这条语句,但随之带来的变化就是,序列变量的默认值,只会在第一个Bar有效。
    5、Bar数据和序列变量在回溯越界时取值调整:【new】
         旧版本中,Bar数据和序列变量,序列参数等值,当回溯的索引越界是,即Value[nOffset]的nOffset > CurrentBar时,会是无效值。
         新版本中,这种情况下会用该数据源的第1个值代替。
    6、叠加数据时补齐数据方式:【new】
         多个商品进行叠加时,可能在数据的前段出现某个商品有数据,但其他商品无数据,旧版本会使用无效值填充。
         新版本使用第一个有效的Bar的Open填充高开低收,成交量设置为0,持仓量设置为第一个有效Bar的持仓量。
    7、公式应用全局变量扩容:
        单个公式应用的全局变量从50个扩充500个。
    8、单个图表内多个公式之间的相关性:
       旧版本中,单个图表中的多个交易指令会相互影响,形成干扰。虽然利于将开平仓等指令进行模块化,但不利于利用资源。
       新版本中,单个图表中的多个公式应用就像以前的多个技术指标一样,不再有相关性。这样就可以很容易的单个图表驱动多个交易系统,节省电脑资源。
    9、公式编译提速:
       调整旧版本所有公式联编的架构,客户修改用户函数时,需要重新编译所有的自定义公式应用,编译公式应用时,只需要编译当前公式应用即可。
       如果客户完全了解用户函数和公式应用的调用关系,在开发调试用户函数过程中先选择单独编译用户函数,等用户函数算法稳定之后,再全部编译一次,这样可以大幅提升系统开发速度。
    10、交易策略参数优化提速:
       通过调整价格,公式运行速度得到近10倍的提升,并增加了多线程测试,在性能强劲的电脑上,可以达到旧版本几十倍的测试速度。可以考虑攒钱买32核电脑进行测试了。
       另外,交易策略的参数优化增加了参数淘汰率,要使用淘汰算法,需要将重要的参数放在前面,测试完一个参数之后,按比例淘汰较差的参数。提升测试效率。
    11、投资组合测试报告:
       单个图表可以支持多个交易系统的执行,同时我们增加了对多个交易系统的测试报告组合分析。方便评估多个系统的组合效果。
    12、公式导入导出中增加无源码模式:
        对于用户的公式应用,考虑到安全问题,我们增加了无源码加密的方式,将执行文件直接导入导出,方便交易系统的应用。为了控制时间和权限,用户可以在公式代码中增加时间验证和账户验证,这样编译后的公式在应用过程中再无后顾之忧。
    13、讯号消失的处理机制调整:
        旧版本中,如果出现系统的讯号消失,会反复开仓,导致头寸完全混乱,并可能出现巨大的亏损。
        新版本中,对于用户操作失误写出的讯号消失的系统,第一次发单之后,不在重复发单,当出现讯号消失时,还会弹出提示,提醒用户修改系统代码。
    14、循环代码体内调用序列函数的支持:
        函数代码内有使用序列变量或序列参数进行计算的称为序列函数,旧版本中在循环体内调用序列函数会出现计算出错的问题,新版本对于这种情况进行了修复。
        但要确保这种写法的正确执行,必须保证每个Bar,这个循环体的执行次数都是一样的。否则仍然会出现错误。同样的原理,If条件语句里面不能使用序列函数进行计算。
       下面是一个错误写法的例子:
       If(MarketPosition!=1 && CrossOver(Avg1,Avg2))
       {
           Buy....   
       }
       因为MarketPosition在等于1的情况下,会导致后面的语句不被执行,这样,就不是每个Bar都调用了该序列函数。就会出现数据计算出错。
       正确的写法如下:
        MyBuyCondition = CrossOver(Avg1,Avg2);
       If(MarketPosition!=1 && MyBuyCondition )
       {
          Buy...
       }
    15、函数序列参数的输入值验证:
         旧版本中,CrossOver这样的函数,因为两个参数都是序列参数,只能使用两个序列变量,比如Avg1,Avg2作为参数进行传入。不能使用CrossOver(Close,1000)这样的写法。为此,旧版本中还增加了CrossOverHor这样的函数来处理这种情况。
         新版本中,可以直接传入普通值进行计算,甚至传入数据的回溯值。旧版本中CrossOver(Close[1],Avg1);这样的写法是正确的,但CrossOver(Close[1],Avg1[1])则是错误的,新版本则可以支持后面的写法。
    16、用户函数中可以使用所有系统函数:
        这样可以很方便的封装交易指令和算法。
    17、讯号发生的时间如果不在图表最后Bar时间的附近,将会被忽略。
        日线及以上周期要求讯号发生的日期和最后Bar的日期相同;
        1分钟及以上周期要求讯号发生的时间和最后Bar的时间误差不超过5分钟。
        Tick和10秒周期要求讯号发生的时间和最后Bar的时间误差不超过1分钟。
         通过这个时间限定,防止最后Bar上较早前的讯号在重新启动时发单。
    18、使用引用参数的函数【new】
        旧版本在使用引用参数时可以传入序列变量,普通变量和引用参数值。
        新版本在使用引用参数时只能传入普通变量和引用参数值。
       

     

 

  • 补充:
    1、叠加商品可以进行交易和测试:
        旧版本只能使用Buy(1,MyPrice);这样的语句进行交易,新版本可以使用Data1.Buy(1,MyPrice),以及Data1.MarketPosition这样的函数获取交易状态。大部分函数都支持使用Data#.前缀进行调用。这样可以方便的实现多个商品的,单个系统的组合测试,可以测试套利和对冲系统。
    3、增加投资组合函数:
        增加portfolio_XXX类型的函数,用户获取当前图表,当前公式应用对应的投资组合的状态和性能信息。
    只是希望TBV4比以前的版本皮实点,总感觉TB很好甚至是精美,可有点脆弱不皮实,也可能精美复杂的东西都不皮实,是我的要求太高了吧。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 262069696  点击在线交流进行 有偿 编写!不贵!点击查看价格!

 


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容