TB公式系统编写入门_第1页
TB公式系统编写入门_第2页
TB公式系统编写入门_第3页
TB公式系统编写入门_第4页
TB公式系统编写入门_第5页
已阅读5页,还剩51页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1TB公式编写入门公式编写入门蔡云华蔡云华深圳开拓者科技有限公司深圳开拓者科技有限公司内容安排内容安排TB 公式编写基础知识TB 技术指标和交易指令编写示例2 TB公式如何使用?公式如何使用?TB公式类型用户函数公式应用(包括技术指标、交易指令等)一个做好的TB模型如何使用? 公式导入(*.fbk) 或新建公式应用,粘贴代码,校验保存公式(编译) 打开超级图表,选择交易品种,插入公式应用 修改公式应用设置 启动自动策略交易系统3456 Bar数据数据(K线数据线数据)当前时间周期下所有K线的相关数据,按照时间从先到后的顺序排列而成的序列数据。每根K线中包含的数据如下:7Bar数据含义Date当

2、前K线的日期Time当前K线的开始时间Open当前K线的开盘价High当前K线的最高价Low当前K线的最低价Close当前K线的收盘价(最新价)Vol当前K线成交量OpenInt当前K线持仓量CurrentBar当前K线的索引值(K线的编号,从0开始)BarStatus当前K线的状态值(0第一根K线、2最后即最新一根K线、1其他K线) 序列数据序列数据8序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量序序列列变变量量N N-1 2 1 0 非序列变量非序列变量(简单变

3、量简单变量)9 非序列变量非序列变量 Bar数据的使用数据的使用Bar数据是TB公式运行的基础。Bar数据是序列数据,可以回溯读取。举例: 比较今天的最高价是否突破了昨天的最高价 表达式为:High High1 比较今天的最高价是否突破了前两天的最高价 表达式为:High High1 and HighHigh2 或者:High High1 & HighHigh210 插入多个商品合约插入多个商品合约Data0:图表中最开始选择的商品合约Data1:第一个插入的商品合约Data2:第二个插入的商品合约最多支持50个数据源的Bar数据调用方法: Data0.A_SendOrder()Dat

4、a1.Close等等11 TB公式运行机制公式运行机制从左到右,从上到下12 TB公式的结构公式的结构TB的公式一般由三段组成。ParamsNumeric Length(10); 公式参数段 VarsNumericSeries MA; 公式变量段 BeginMA = AverageFC(Close, Length); 公式脚本段 End13 参数与变量参数与变量 简单地说,参数和变量都是代号,代表一个某一类型的数据,变量还可以代表一个表达式的运算结果;参数的作用是给用户一个不需修改代码即可改变公式运行结果的一个入口;参数的值在公式的内部不能够被修改;变量的作用是保存数据或是计算结果,便于以后调

5、用;参数和变量都需要声明。 参数起什么作用?参数起什么作用? 假如我们要写一个均线指标,现在是用10天做周期。代码如下:BeginPlotNumeric(MA,AverageFC(Close,10); End那如果要改用20天做周期,我们必须改程序,把10改成20,然后编译。下次想用别的周期,还得改,非常麻烦。如果使用参数,就方便多了。程序写好,使用时改参数就好了。代码如下:ParamsNumeric Length(10); BeginPlotNumeric(MA,AverageFC(Close,Length); End 数据类型数据类型TB公式中有三种基本的数据类型 数字型(Numeric)

6、字符型(String)布尔型(Bool)为了对变量、参数进行回溯,又增加了序列类型 数字型序列变量/参数(NumericSeries)字符型序列变量/参数(StringSeries)布尔型序列变量/参数(BoolSeries)为了通过用户函数返回多个值,又增加了引用类型 NumericRef、StringRef、BoolRef变量(或参数)申明方法:数据类型 变量名或参数名 (初始值); 条件语句条件语句-IF Else语句语句v语法如下:If (Condition) TB公式语句1; ElseTB公式语句2; v如果TB公式语句是单条,您可以省略,二条或者二条以上的语句必须使用。 18 交易

7、指令交易指令 Buy - 平掉所有空头持仓,开多头仓位; sell - 平掉指定多头持仓; Sellshort - 平掉所有多头持仓,开空头仓位; Buytocover - 平掉指定空头持仓。 A_SendOrder() - 根据参数发送委托单(直接发单,不经过任何的确认,针对叠加的合约,可用Data1.A_SendOrder(.)进行调用,不可用于历史测试) 盘中和盘后公式运行的差别盘中和盘后公式运行的差别盘后公式的执行情况分析 K线是确定的,不存在信号消失问题 公式在每根K线上只执行一遍 符合开仓条件和平仓条件会标出买卖信号(使用Buy、Sell指令),但并不真正发单盘中公式的执行情况分析

8、K线是变化的,如用最新价或基于最新价计算出的指标来作为入场或出场条件会出现信号消失问题 每当分笔交易数据(tick)传来时,公式都会执行一遍 符合开仓条件和平仓条件除标出买卖信号,还会真正发单 信号消失问题信号消失问题(1)产生原因:使用变化的价格(如Close)或是基于最新价Close计算的技术指标,来作为交易的进场、出场或止损条件时,就会产生信号消失问题。如果编写的公式策略中存在信号闪烁问题,在历史测试中会得出失真的测试结果,在实盘交易时,更会因为重复发单造成严重损失。信号消失问题的一般解决办法:延迟发单或用前一根K线的数据来做为判断条件用能保持得住的价格来做为判断条件 信号消失问题信号消

9、失问题(2)延迟发单举例:condition = 交易条件If (condition)Buy(1, NextOpen, true);用前一根K线做判断举例:condition = 交易条件If (condition1)Buy(1, Open);用High,Low,Open等做判断 If (HighHigh1) buy(1,High1); 写第一个写第一个TB公式公式BeginFileAppend(d:HelloWorld.txt,Hello World!);End 公式运行结果公式运行结果大家都知道每个Hello World!都是怎么产生的吗? 改造成学习改造成学习TB的利器的利器利用这个文件

10、输出语句,还有注释语句,是TB公式调试中的利器,同时也是学习TB机制的利器。这是一个最简单但很实用的TB公式例子。我们通过一个例子来看看每根K线中的BAR数据: BeginFileAppend(d:formula.log,CurrentBar=+text(CurrentBar)+ “BarStatus=+text(BarStatus)+“ Date=+text(Date); End 运行结果运行结果 用注释语句改写用注释语句改写BeginCommentary(Date=+text(Date);Commentary(CurrentBar=+text(CurrentBar);Commentary(

11、BarStatus=+text(Barstatus);End 公式运行结果公式运行结果先点击先点击此按钮此按钮 调试实例调试实例/ 名称: 测试A函数查询手工下单Vars Numeric nCount; Numeric i; string ContractNum;Begin if (BarStatus=2 and AccountDataExist) nCount = A_GetOpenOrderCount(); FileAppend(d:20110616.txt,CurrentTime=+Text(CurrentTime)+t nCount=+Text(nCount); if (nCount0

12、) For i = 1 To nCount ContractNum = A_OpenOrderContractNo(i); FileAppend(d:20110616.txt,OpenOrder+Text(i)+=+ContractNum); End 调试结果调试结果29 实例:单均线系统实例:单均线系统 SMAS交易规则:如果收盘价格高于均线,做多,如原来持有空单,则先平空单,再建多仓如果收盘价格低于均线,做空,如原来持有多单,则先平多单,再建空单均线周期暂采用10日交易头寸暂为1手30 搭好程序框架搭好程序框架ParamsNumeric Length(10);Numeric Lots(1)

13、;VarsNumericSeries MA;Begin1. 计算10日均线 MA = 计算Length周期均线2. 如果收盘价格高于收盘价格高于10日均线日均线,做多Lots手,如有空单,平空 反多 IF (Close1 MA1)3. 如果收盘价格低于收盘价格低于10日均线日均线,做空Lots手,如有多单,平多反空 IF (Close1 MA1)Buy(Lots, Open);If (Close1 MA1)Buy(Lots, Open);If (MarketPosition!=-1 and Close1 MA1)SellShort(Lots,Open); 对策略进行改进对策略进行改进前面的策略

14、是持仓直到出现反向交易信号时,才将原来的仓位平掉。对有些获利的交易来说,利润回吐太多。必须使用更有效的止损策略来保护已有利润。 我们增加一条更短的均线来作为止损,只要收盘价收在这根均线之下,下一K线开盘价,即平仓出场。If (MarketPosition=1)if (Close1 MA11) BuyToCover(Lots,open); 为防止平仓后,因为收盘价格仍在长期均线之上,导致再次入场,我们的入场条件也要做相应修改 If (MarketPosition!=1 and Close1 MA1 and Close1MA11) Buy(Lots, Open); If (MarketPositi

15、on!=-1 and Close1 MA1 and Close1 MA1 and Close1 MA11)Buy(Lots, Open); SMAS_V2(续)If (MarketPosition!=-1 and Close1 MA1 and Close1 MA11)SellShort(Lots,Open);If (MarketPosition=1)if (Close1 MA11) BuyToCover(Lots,open);End 更多的优化更多的优化参数优化-交易策略参数优化功能为防止过度优化及处理优化值处于边界值的问题,将参数取连续数值,观察赢利区域。若最优化结果处于连续赢利数值区域,便

16、认为该最优化参数是合适的参数。若最优化结果离散于连续赢利数值区域或为临界值,则考虑在连续区域取最优值。 SMAS_V2的测试结果的测试结果品种品种测试佣金测试佣金测试时间段测试时间段净利润净利润最大回撤最大回撤净利润净利润/最大回撤最大回撤IF0004%2010.4.16-2564611826911.06-1.40Cu0004%2005.8.30-448978689452.88-6.51ZN0004%2007.3.26-101956386412.07-2.63RU0004%2005.7.18-259073265875.35-9.74RB0004%2009.3.27-2869332155.58-8.92A90004%2005.7.15-3463510082-0.63-3.43M90004%2005.7.19-165578510-0.93-1.94Y90004%2006.1.9-826

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论