1、交易开拓者代码学习各种买卖指令及实例 (TB)( 转)2012 年 07 月 27 日 22:35原文地址:交易开拓者代码学习各种买卖指令及实例 (TB)(转)作者:竹本无青各种买卖指令Buy说明 产生一个多头建仓操作。 语法 Buy(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数 Share 买入数量,为整型值,默认为使用系统设置参数;Price 买入价格,为浮点数,默认=0 时为使用现价( 非最后 Bar 为 Close);Delay 买入动作是否延迟,默认为当前 Bar 发送委托,当 Delay=True,在下一个 Bar 执行。
2、备注 产生一个多头建仓操作,无返回值,该函数仅支持交易指令。该函数仅用于多头建仓,其处理规则如下:如果当前持仓状态为持平,即 MarketPosition = 0 时,该函数按照参数进行多头建仓。如果当前持仓状态为空仓,即 MarketPosition = -1 时,该函数首先平掉所有空仓,达到持平的状态,然后再按照参数进行多头建仓。如果当前持仓状态为多仓,即 MarketPosition = 1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统中关于连续建仓的设置,以及资金,最大持仓量等限制。 示例 在 MarketPosition=0 的情况下:Buy(50,10.2,1) 表示用
3、 10.2 的价格买入 50 张合约,延迟到下一个 Bar 发送委托。Buy(10,Close) 表示用当前 Bar 收盘价买入 10 张合约,马上发送委托。Buy(5,0) 表示用现价买入 5 张合约,马上发送委托。 BuyToCover说明 产生一个空头平仓操作。 语法 BuyToCover(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数 Share 买入数量,为整型值,默认为平掉当前所有持仓;Price 买入价格,为浮点数,默认=0 时为使用现价( 非最后 Bar 为 Close);Delay 买入动作是否延迟,默认为当前 Bar
4、发送委托,当 Delay=True,在下一个 Bar 执行。 备注 产生一个空头平仓操作,无返回值,该函数仅支持交易指令。该函数仅用于空头平仓,其处理规则如下:如果当前持仓状态为持平,即 MarketPosition = 0 时,该函数不执行任何操作。如果当前持仓状态为多仓,即 MarketPosition = 1 时,该函数不执行任何操作。如果当前持仓状态为空仓,即 MarketPosition = -1 时,如果此时 Share 使用默认值,该函数将平掉所有空仓,达到持平的状态,否则只平掉参数 Share 的空仓。 示例 在 MarketPosition = -1 的情况下:BuyToCo
5、ver(50,10.2,1) 表示用 10.2 的价格空头买入 50 张合约,延迟到下一个 Bar 发送委托。BuyToCover(10,Close) 表示用当前 Bar 收盘价空头买入 10 张合约,马上发送委托。BuyToCover(5,0) 表示用现价空头买入 5 张合约),马上发送委托。 sell说明 产生一个多头平仓操作。 (BK)语法 Sell(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数 Share 卖出数量,为整型值,默认为平掉当前所有持仓;Price 卖出价格,为浮点数,默认=0 时为使用现价( 非最后 Bar 为 C
6、lose);Delay 卖出动作是否延迟,默认为当前 Bar 发送委托,当 Delay=True,在下一个 Bar 执行。 备注 产生一个多头平仓操作,无返回值,该函数仅支持交易指令。该函数仅用于多头平仓,其处理规则如下:如果当前持仓状态为持平,即 MarketPosition = 0 时,该函数不执行任何操作。如果当前持仓状态为空仓,即 MarketPosition = -1 时,该函数不执行任何操作。如果当前持仓状态为多仓,即 MarketPosition = 1 时,如果此时 Share 使用默认值,该函数将平掉所有多仓,达到持平的状态,否则只平掉参数 Share 的多仓。 示例 在 M
7、arketPosition=0 的情况下:Sell(50,10.2,1) 表示用 10.2 的价格卖出 50 张合约,延迟到下一个 Bar 发送委托。Sell(10,Close) 表示用当前 Bar 收盘价卖出 10 张合约,马上发送委托。Sell(5,0) 表示用现价卖出 5 张合约,马上发送委托。 sellshort说明 产生一个空头建仓操作。 语法 SellShort(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数 Share 卖出数量,为整型值,默认为使用系统设置参数;Price 卖出价格,为浮点数,默认=0 时为使用现价( 非最
8、后 Bar 为 Close);Delay 卖出动作是否延迟,默认为当前 Bar 发送委托,当 Delay=True,在下一个 Bar 执行。 备注 产生一个空头建仓操作,无返回值,该函数仅支持交易指令。该函数仅用于空头建仓,其处理规则如下:如果当前持仓状态为持平,即 MarketPosition = 0 时,该函数按照参数进行空头建仓。如果当前持仓状态为多仓,即 MarketPosition = 1 时,该函数首先平掉所有多仓,达到持平的状态,然后再按照参数进行空头建仓。如果当前持仓状态为空仓,即 MarketPosition = -1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统
9、中关于连续建仓的设置,以及资金,最大持仓量等限制。 示例 在 MarketPosition=0 的情况下:SellShort(50,10.2,1) 表示用 10.2 的价格空头卖出 50 张合约,延迟到下一个 Bar 发送委托。SellShort(10,Close) 表示用当前 Bar 收盘价空头卖出 10 张合约,马上发送委托。SellShort(5,0) 表示用现价空头卖出 5 张合约,马上发送委托。对应的 BPK,SPK,你清楚了吗函数名 描述 Buy 平掉所有空头持仓,开多头仓位。(*BPK*)Sell 平掉指定的多头持仓。 SellShort 平掉所有多头持仓,开空头仓位。 (*SP
10、K*)BuyToCover 平掉指定的空头持仓。获得当前持仓状态,太妙了MarketPosition说明 获得当前持仓状态。 语法 Integer MarketPosition()参数 无 备注 获得当前持仓状态,返回值为整型,该函数仅支持交易指令。返回值定义如下:-1 当前位置为持空仓0 当前位置为持平1 当前位置为持多仓 示例 无内建平仓指令-精华之特色内建平仓指令除了上节的 Sell 和 BuyToCover 可以进行平仓之外,TradeBlazer 公式提供了额外的八种平仓函数,通过合理的应用内建平仓函数,可以帮助您有效的锁定风险并及时获利。您可以组合使用内建平仓函数,也可以在自己的交
11、易指令中调用内建平仓函数进行平仓,八个内建平仓函数如下:函数名 描述 SetExitOnClose 该平仓函数用来在当日收盘后产生一个平仓动作,将当前所有的持仓按当日收盘价全部平掉。 SetBreakEven 该平仓函数在获利条件满足的情况下启动,当盈利回落达到保本时产生平仓动作,平掉指定的仓位。 SetStopLoss 该平仓函数在亏损达到设定条件时产生平仓动作,平掉指定的仓位。 SetProfitTarget 该平仓函数在盈利达到设定条件时产生平仓动作,平掉指定的仓位。 SetPeriodTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。 SetPercent
12、Trailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。 SetDollarTrailing 该平仓函数在盈利回落到设定条件时产生平仓动作,平掉指定的仓位。 SetInactivate 该平仓函数在设定时间内行情一直在某个幅度内波动时产生平仓动作,平掉指定的仓位。 关于 ExitPosition上述多个平仓函数都用到了参数 ExitPosition,作为平仓函数仓位控制的重要参数,有必要对该参数进行单独说明。ExitPosition 是布尔型参数,当 ExitPosition=True 时,表示将当前所有的持仓作为一个整体,根据其平均建仓成本,计算各平仓函数的盈亏,当条
13、件满足时,会将所有仓位一起平掉;当 ExitPosition=False 时,表示单独对每个建仓位置进行平仓,单独计算各平仓函数盈亏时,当单个建仓位置条件满足后,平掉该建仓位置即可。触发单触发单触发单是交易开拓者特有的交易方式,触发单是指用户设置条件,将触发单提交到交易开拓者的交易服务器,当设定条件满足情况,交易服务器会自动发送委托到交易所。触发单可以帮助解决用户盯盘的辛苦,及手动发单的速度问题。触发单分为以下四种类型:吊买、吊卖、追买、追卖。每个触发单在发送时需要输入以下参数:触发价格:触发单设定的条件价格,通过比较现价和触发价格确定是否下单。下单之后,该触发单会从交易服务器中删除;执行价格
14、:条件满足之后,发送委托的价格,设定为 0 可自动获取当时的叫买 /卖价;过期时间:设定触发单的过期时间,到这个时间还没有触发的订单会被设为过期,不再进行监控。吊买吊买是指当现价向下跌破触发价格,即按执行价格产生一个即时买入委托单,如下图所示:吊卖吊卖是指当现价向上突破触发价格,即按执行价格产生一个即时卖出委托单,如下图所示:追买追买是指当现价向上突破触发价格,即按执行价格产生一个即时买入委托单,如下图所示:追卖追卖是指当现价向下跌破触发价格,即按执行价格产生一个即时卖出委托单,如下图所示:修改或删除触发单当存在某个商品的触发单,可通过双击帐户管理的触发单页面的项目,打开交易师,进行修改或删除
15、操作。您可以修改数量、触发单类型、触发价格、执行价格、过期时间及止损获利等,完成修改之后,点击修改按钮即可完成修改;您可以直接点击删除按钮将该触发单删除。注意: 触发单在发送之后将会生效,该委托单在服务器上运行,此时您关闭程序或电脑不会影响触发单的执行。SetPercentTrailing(2000,0.2,True); 又是一个宝SetPercentTrailing(2000,0.2,True); 当前所有持仓盈利在大于 2000 之后回落,当回落百分比达到 20%之后,执行所有持仓位置的百分比回落平仓。 (此时是计算所有持仓的盈利数)SetPercentTrailing(1000,0.1,
16、False); 当前持仓的某一个建仓位置的盈利大于 1000 之后回落,当回落百分比达到 10%之后,执行该持仓位置的百分比回落平仓。 (此时只计算该持仓位置的盈利)SetStopLoss(0,2000,True); 当前所有持仓亏损达到 2000 之后,执行所有持仓位置的止损平仓。 (此时是计算所有持仓的亏损数)SetStopLoss(1,50, False); 当前持仓的某一个建仓位置每张合约的亏损达到 50 之后,执行该持仓位置的止损平仓。 (此时只计算该持仓位置的每张合约亏损)SetBreakEven(0,2000,True); 当前所有持仓的盈利达到 2000 之后,启动所有持仓位置
17、的保本平仓。 (此时是计算所有持仓的盈利数)SetBreakEven(1,50, False); 当前持仓的某一个建仓位置每张合约的盈利达到 50 之后,启动该持仓位置的保本平仓。 (此时只计算该持仓位置的每张约的盈利)精华中精华文华所没有实现复杂策略工具一循环语句循环语句包括两种表达方式:For 和 While。ForFor 语句是一个循环语句,重复执行某项操作,直到循环结束。语法如下:For 循环变量 = 初始值 To 结束值TradeBlazer 公式语句;循环变量为在之前已经定义的一个数值型变量,For 循环的执行是从循环变量从初始值到结束值,按照步长为 1 递增,依次执行 Trade
18、Blazer 公式语句。结束值必须大于或等于初始值才有意义,初始值和结束值可以使用浮点数,但是在执行过程中会被直接取整。只计算其整数部分。TradeBlazer 公式语句是一些语句的组合,如果 TradeBlazer 公式语句是单条,您可以省略,二条或者二条以上的语句必须使用。第一次执行时,首先将循环变量赋值为初始值,然后判断循环变量是否小于等于结束值,如果满足条件,则执行 TradeBlazer 公式语句,同时循环变量加 1。接着重新判断循环变量是否小于等于结束值,一直到条件为 False,退出循环。例如,以下的用户计算 Price 最近 Length 周期的和。ParamsNumericS
19、eries Price(1);Numeric Length(10);VarsNumeric SumValue(0);Numeric i;Beginfor i = 0 to Length - 1SumValue = SumValue Price i ;Return SumValue;End如果希望 For 语句从大到小进行循环,可以使用以下的语法:For 循环变量 = 初始值 DownTo 结束值TradeBlazer 公式语句;For-DownTo 让循环变量从结束值每次递减 1 直到等于结束值,依次调用 TradeBlazer 公式语句执行,初始值必须大于或等于结束值才有意义。For 语句是
20、比较常用的一种循环控制语句,它应用于知道循环次数的地方,很多内建用户函数中都使用 For 语句来完成相应的功能,比如 Summation,Highest,Lowest,LinearReg等。WhileWhile 语句在条件为真的时候重复执行某一项操作。即,只要条件表达式的值为真(True)时,就重复执行某个动作。直到行情信息改变以致条件为假(False)时,循环才结束。语法如下:While (Condition)TradeBlazer 公式语句;Condition 是一个逻辑表达式,当 Condition 为 True 的时候,TradeBlazer 公式语句将会被循环执行,Condition 可以是多个条件表达式的逻辑组合, Condition 必须用() 括起来。TradeBlazer 公式语句是一些语句的组合,如果 TradeBlazer 公式语句是单条,您可以省略,二条或者二条以上的语句必须使用。例如,以下的公式用来计算要产生大于 100000 成交量需要最近 Bar 的个数:VarsNumeric SumVolume(0);Numeric Counter (0);BeginWhile (SumVolume 100000)SumVolume = SumVolume VolCounterCounter = Counter 1;End