TB编程官方实例_第1页
TB编程官方实例_第2页
TB编程官方实例_第3页
TB编程官方实例_第4页
TB编程官方实例_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、1TB编程基础和策略实现示例编程基础和策略实现示例深圳开拓者科技有限公司深圳开拓者科技有限公司内容安排内容安排TB 程序化交易的设置和使用(演示)TB 程序化交易编程基本知识TB 技术指标和交易策略编写示例2 TB公式如何使用?公式如何使用?TB公式类型用户函数公式应用(包括技术指标、交易指令等)如何使用一个交易模型? 或新建公式应用,粘贴代码,校验保存公式(编译) 打开超级图表,选择交易品种,插入公式应用 修改公式应用设置 投资组合性能测试和参数优化 启动自动策略交易系TB公式的导入导出3456 公式源代码公式源代码ParamsNumeric Length(10);Numeric Lots(

2、1);VarsNumericSeries MA;BeginMA = AverageFC(Close,Length);PlotNumeric(MA,MA);If (Close1 MA1)Buy(Lots, Open);If (Close1 High1 比较今天的最高价是否突破了前两天的最高价 表达式为:High High1 and HighHigh2 或者:High High1 & HighHigh212 TB公式运行机制公式运行机制从左到右,从上到下13 例例1:Hello WorldSample1:BeginFileAppend(c:tbsample1.txt,Hello World!);E

3、nd 公式运行结果公式运行结果大家都知道每个Hello World!都是怎么产生的吗? 注释语句注释语句- CommentaryTB的信息输出,除了可以通过FileAppend输出到文件外,也可以将信息输出显示到图表上;Commentary的用法: 在超级图表的当前BAR添加一行注释信息; 参数:String strTip; / 提示的信息 信息输出函数的作用信息输出函数的作用调试和诊断TB公式的代码错误;检验TB公式的运行结果是否符合设计逻辑;学习TB的运行机制,熟悉TB内建函数的用法; 例例2:输出:输出BAR数据数据Sample2:BeginFileAppend(c:tbsample2.

4、txt,Date= +text(Date)+ Time= +text(time)+ Open= +Text(Open)+ High= +Text(High)+ Low= +Text(Low)+ Close=+Text(Close)+ CurrentBar= +Text(CurrentBar)+ Barstatus= +Text(BarStatus);End 例例2 运行结果运行结果 参数与变量参数与变量 简单地说,参数和变量都是代号,代表一个某一类型的数据,变量还可以代表一个表达式的运算结果;参数的作用是给用户一个不需修改代码即可改变公式运行结果的一个外部接口;参数的值在公式的内部不能够被修改

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

6、数据类型 数值型(Numeric)字符型(String)布尔型(Bool)为了对变量、参数进行回溯,又增加了序列类型 数值型序列变量/参数(NumericSeries)字符型序列变量/参数(StringSeries)布尔型序列变量/参数(BoolSeries)为了通过用户函数返回多个值,又增加了引用类型 NumericRef、StringRef、BoolRef变量(或参数)申明方法:数据类型 变量名或参数名 (初始值); 控制语句控制语句条件语句(If-Else) if 语句 if - else 语句 if - Else if 语句 if - Else 嵌套循环语句(ForWhile) For

7、 循环变量 = 初始值 TO 结束值 For 循环变量 = 初始值 Downto 结束值 While 循环 条件语句条件语句-IF Else语句语句v语法如下:If (Condition) TB公式语句1; ElseTB公式语句2; v如果TB公式语句是单条,您可以省略,二条或者二条以上的语句必须使用。 25 技术指标输出函数技术指标输出函数 PlotNumeric 在当前BAR输出一个数值 参数:String Name - 输出值的名称; Numeric Number - 输出的数值; Numeric Locator=0 - 输出值的定位点; Integer Color=-1 - 输出值的颜

8、色; Integer BarsBack=0 - 从当前BAR回溯的 BAR数举例:PlotNumeric(“MA”,AverageFC(Close,10); 输出均线指标值PlotNumeric (“OpenToClose”,open,close); 输出开盘价与收盘价的连线(线型选择柱状图)26 技术指标输出函数技术指标输出函数(2) PlotString 在当前BAR输出一个字符串 参数:String Name - 输出值的名称 String str - 输出的字符串; Numeric Locator=0 - 输出值的定位点; Integer Color=-1 - 输出值的颜色; Inte

9、ger BarsBack=0 - 从当前BAR回溯的 BAR数举例:PlotString(CandleStick,阳线,Low,Red); 在Bar的最低价位置输出字符串“阳线”,并显示为红色27 技术指标输出函数技术指标输出函数(3) PlotBool 在当前BAR输出一个布尔值 参数:String Name - 输出值的名称 Bool bPlot - 输出的布尔值; Numeric Locator=0 - 输出值的定位点; Integer Color=-1 - 输出值的颜色; Integer BarsBack=0 - 从当前BAR回溯的 BAR数举例:PlotString(“con,con

10、,High); 在Bar的最高价位置输出布尔变量con的值,如果con为真, 则显示“笑脸”图标,否则显示为“哭脸”图标28 例例3:技术指标的编写:技术指标的编写Sample3: 单均线加通道指标单均线加通道指标ParamsNumeric Length(10);/ 均线周期Numeric FilterPercent(20);/ 通道幅度比例(%)VarsNumericSeries MA;NumericSeries UpperBand;NumericSeries LowerBand;Bool ConBuy(False);Bool ConSell(False);BeginMA = Average

11、FC(Close,Length);UpperBand = MA * ( 1 + FilterPercent / 10000 );LowerBand = MA * ( 1 - FilterPercent / 10000 );29 PlotNumeric(MA,MA,0,Yellow);PlotNumeric(UpperBand,UpperBand,0,Red);PlotNumeric(LowerBand,LowerBand,0,Green);ConBuy = CrossOver(Close,UpperBand);ConSell = CrossUnder(Close, LowerBand);if

12、(ConBuy)PlotBool(ConBuy,ConBuy,High+(High-Low)*0.3);PlotString(BS,多头突破,High+(High-Low)*0.6,red);if (ConSell)PlotBool(ConSell,!ConSell,Low-(High-Low)*0.3);PlotString(SS,空头突破,Low-(High-Low)*0.6,Green);End30 指标编写常见问题指标编写常见问题指标编写完成后,还要注意在属性设置中进行相应的设置;指标是在主图显示还是在子图显示;指标的线型;从V3转到V4的客户注意参数的位置另外学习的例子可以参考:MA

13、CD指标的写法(柱状图)SAR指标(点图)31 运行结果运行结果32 交易指令交易指令 Buy/Sell Buy - 平掉所有空头持仓,开多头仓位; sell - 平掉指定多头持仓; Sellshort - 平掉所有多头持仓,开空头仓位; Buytocover - 平掉指定空头持仓。 参数:Numeric Share 买入数量,默认=0时,使用系统设置参数Numeric Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close)。33 交易指令交易指令 A_SendOrder针对当前公式应用的帐户、商品发送委托单。该函数直接发单,不经过任何确认,并会在每次公式计算时发送,

14、一般需要配合着仓位头寸进行条件处理,在不清楚运行机制的情况下慎用。不能使用于历史测试,仅适用于实时行情交易。参数:BuyOrSell :买卖类型,买Enum_Buy/卖Enum_Sell; EntryOrExit: 开平仓类型, 开仓 Enum_Entry / 平仓Enum_Exit/ 平今 Enum_ExitToday;fLot 委托单的交易数量; fPrice 委托单的交易价格。 叠加多个商品合约进行交易叠加多个商品合约进行交易TB可以在一个图表中插入多个商品合约,支持同时对多个商品合约数据源编写公式应用。具体的方法是在交易指令、BAR数据及系统函数前加上数据源。TB中数据源的命名规则如下

15、:Data0:图表中最开始选择的商品合约Data1:第一个插入的商品合约Data2:第二个插入的商品合约一个图表最多支持50个数据源;调用方法:Data1.A_SendOrder() Data2.Buy(.)Data3.Close Data4.MarketPosition34 盘中和盘后公式运行的差别盘中和盘后公式运行的差别盘后公式的执行情况分析 K线是确定的,不存在信号消失问题 公式在每根K线上只执行一遍 符合开仓条件和平仓条件会标出买卖信号(使用Buy、Sell指令),但并不真正发单盘中公式的执行情况分析K线是变化的,如用最新价或基于最新价计算出的指标来作为入场或出场条件会出现信号消失问题

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

17、Buy(1, NextOpen, true);用前一根K线做判断举例:condition = 交易条件If (condition1)Buy(1, Open);用High,Low,Open等做判断 If (HighHigh1) buy(1,High1); 例例4:单均线系统:单均线系统ParamsNumeric Length(10);Numeric Lots(1);VarsNumericSeries MA;BeginMA = AverageFC(Close,Length);PlotNumeric(MA,MA);If (MarketPosition 1 and Close1 MA1)Buy(Lot

18、s, Open);If (MarketPosition -1 and Close1 MA1)Buy(Lots, Open);If (MarketPosition!=-1 and Close1 = MyEntryPrice * (1 + TakeProfit * 0.01)MyExitPrice = MyEntryPrice * (1 + TakeProfit * 0.01);if (open MyExitPrice) MyExitPrice = Open;Sell(0,MyExitPrice);43 Else if ( Low MyEntryPrice-Stoploss * MinPoint)

19、MyExitPrice = MyEntryPrice-Stoploss * MinPoint;if (Open MyExitPrice) MyExitPrice = Open;Sell(0,MyExitPrice); Else if (MarketPosition = -1)if (Low = MyEntryPrice * (1 - TakeProfit * 0.01)MyExitPrice = MyEntryPrice * (1 - TakeProfit * 0.01);if (open MyEntryPrice + Stoploss * MinPoint)MyExitPrice = MyE

20、ntryPrice + Stoploss * MinPoint;if (Open MyExitPrice) MyExitPrice = Open;BuyToCover(0,MyExitPrice);End 44 追踪止盈策略的实现追踪止盈策略的实现追踪止盈的设置也有多种方法,常见的有:峰值价回落固定点数峰值价回落一定的百分比峰值价的一定比例;平均波动范围的一定比例;开盘价的一定比例。是否盈利达到一定幅度才启用追踪止盈;动态的回落点数或比例。下面以峰值价回落一定比例为例,来实现它。45 追踪止盈的代码追踪止盈的代码(不包含进场部分)Params Numeric TrailingStop(1);

21、/ 跟踪止损百分比Vars Numeric MinPoint;Numeric MyExitPrice;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;Numeric StopLine(0);Beginif (BarsSinceEntry = 1)HigherAfterEntry = AvgEntryPrice;LowerAfterEntry = AvgEntryPrice; Else If(BarsSinceEntry 1)HigherAfterEntry = Max(HigherAfterEntry1,High1);L

22、owerAfterEntry = Min(LowerAfterEntry1,Low1);46 ElseHigherAfterEntry = HigherAfterEntry1;LowerAfterEntry = LowerAfterEntry1;MinPoint = MinMove * PriceScale;If(MarketPosition=1)StopLine = HigherAfterEntry * (1 - TrailingStop * 0.01);If(Low = StopLine)MyExitPrice = StopLine - MinPoint ;If(Open = StopLi

23、ne)MyExitPrice = StopLine + MinPoint;If(Open MyExitPrice) MyExitPrice = Open;BuyToCover(0,MyExitPrice);End 4748 应注意的问题应注意的问题如果单根K线的最高价和最低价相差很大,有可能出现止盈和止损同时满足的情况,解决办法:切换到更小的时间周期上进行交易;扩大止盈和止损的幅度在开仓BAR,因无法判断开仓价和最高价最低价的先后顺序,因此一般是在开仓BAR的后一根BAR才开始判断是否满足止盈止损或跟踪止盈的的条件。如交易策略需要及时的止损,同样需要切换到更小的时间周期上进行交易。 进场位置和

24、盈利峰值价计算进场位置和盈利峰值价计算 开盘价开盘价最低价最低价追踪止损价追踪止损价盈利峰值价盈利峰值价止止损损没没被被止止损损 再进场策略的设计再进场策略的设计使用止损止盈或追踪止盈出场后,如果趋势没有改变,我们仍然需要再进场的策略以避免错失大的波段趋势;可以考虑的再入场的方法有:价格创出新高或新低,再次入场;出场后一定时间后,大趋势仍未改变则再次入场;出场后大趋势未改变,其他辅助指标出现和大趋势一致的进场信号时再次入场。下面以出场后一定时间后大趋势仍未改变即再次入场的方法来举例。50 跟踪止盈后,我们要设个标志,表示曾经出场过,因此要增加两个布尔型序列变量;BoolSeries bLong

25、Stoped(false);BoolSeries bShortStoped(false);跟踪止盈后,设置这两个变量; / 多头跟踪止盈后If(Low = StopLine ) BuyToCover(0,MyExitPrice);bShortStoped = true;51 这两个序列变量值必须往下传递(V4中可以免写)if (BarStatus 0)bLongStoped = bLongStoped1;bShortStoped = bShortStoped1;多头或空头初次进场和再次进场后,都要将这两个变量复位;bLongStoped = false;bShortStoped = false

26、;为了配合再进场,我们需要记录当前的趋势方向。52 追踪止盈后的等待时间,我们可用止盈后的K线根数来衡量。因为我们止盈后bLongStoped或bShortStoped会被置为True,因此我们可通过一个函数NthCon来寻找跟踪止盈的那根BAR到现在的BAR数。具体止盈后多少根BAR后趋势还在持续再进场,我们可以设置为一个参数:BarsReEntry。多头再进场部分的代码如下BarsAfterLongExit = NthCon(!bLongStoped,1);Commentary(BarsAfterLongExit=+text(BarsAfterLongExit);If(bLongStope

27、d and MarketPosition = 0 and condBuy1 = true and BarsAfterLongExit = BarsReEntry)Buy(Lots,Open);bLongStoped = False;HigherAfterEntry = Open;53 例例6:双均线系统:双均线系统加上跟踪止盈和再进场策略加上跟踪止盈和再进场策略Params Numeric Length1(10);Numeric Length2(20); Numeric Lots(1);Numeric TrailingStop(1); / 跟踪止损百分比跟踪止损百分比Numeric BarsR

28、eEntry(5);/ 出场后趋势维持多少根出场后趋势维持多少根Bar后再进场后再进场Vars NumericSeries MA1; NumericSeries MA2; BoolSeries condBuy(false);BoolSeries condSell(false);Numeric MinPoint;Numeric MyExitPrice;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;Numeric StopLine(0);BoolSeries bLongStoped(false);BoolSeries bS

29、hortStoped(false);Numeric BarsAfterLongExit(0);Numeric BarsAfterShortExit(0);Begin /*if (BarStatus 0) / V4中可以省略的序列变量传递部分中可以省略的序列变量传递部分bLongStoped = bLongStoped1;bShortStoped = bShortStoped1;*/Commentary(bLongStoped=+IIFString(bLongStoped,true,false);Commentary(bShortStoped=+IIFString(bShortStoped,tr

30、ue,false);if (BarsSinceEntry = 1)HigherAfterEntry = AvgEntryPrice;LowerAfterEntry = AvgEntryPrice; Else If(BarsSinceEntry 1)HigherAfterEntry = Max(HigherAfterEntry1,High1);LowerAfterEntry = Min(LowerAfterEntry1,Low1);ElseHigherAfterEntry = HigherAfterEntry1;LowerAfterEntry = LowerAfterEntry1; MA1 =

31、AverageFC(Close,Length1); MA2 = AverageFC(Close,Length2); PlotNumeric(MA1,MA1);PlotNumeric(MA2,MA2);condBuy = CrossOver(MA1,MA2);condSell = CrossUnder(MA1,MA2);if ( condBuy = false and condSell = false )condBuy = condBuy1;condSell = condSell1;If ( MarketPosition 1 and condBuy1 = true and bLongStoped = false)Buy(Lots,Open);HigherAfterEntry = Open;bLongStoped = false;bShortStoped = false;If ( MarKetPosition -1 and condSell1 = true and bShortStoped = false)SellShort(lots,Open); LowerAfterEntry = Open;bLongStoped = false;bShortStoped = false;

温馨提示

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

评论

0/150

提交评论