设为首页收藏本站

 找回密码
 注册
楼主: sandboy2005
打印 上一主题 下一主题

我从文华转到TB的过程(我也圈一个地啊) [复制链接]

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
21#
发表于 2007-10-7 13:36:03 |只看该作者

接上面的东东------

SetBreakEven(0,2000,True); 当前所有持仓的盈利达到2000之后,启动所有持仓位置的保本平仓。(此时是计算所有持仓的盈利数)
SetBreakEven(1,50, False); 当前持仓的某一个建仓位置每张合约的盈利达到50之后,启动该持仓位置的保本平仓。(此时只计算该持仓位置的每张约的盈利)
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
22#
发表于 2007-10-7 13:39:51 |只看该作者

精华中精华文华所没有实现复杂策略工具一

循环语句
循环语句包括两种表达方式:For和While。

For
For语句是一个循环语句,重复执行某项操作,直到循环结束。

语法如下:

For 循环变量 = 初始值 To 结束值
{
    TradeBlazer公式语句;
}

循环变量为在之前已经定义的一个数值型变量,For循环的执行是从循环变量从初始值到结束值,按照步长为1递增,依次执行TradeBlazer公式语句。结束值必须大于或等于初始值才有意义,初始值和结束值可以使用浮点数,但是在执行过程中会被直接取整。只计算其整数部分。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

第一次执行时,首先将循环变量赋值为初始值,然后判断循环变量是否小于等于结束值,如果满足条件,则执行TradeBlazer公式语句,同时循环变量加1。接着重新判断循环变量是否小于等于结束值,一直到条件为False,退出循环。

例如,以下的用户计算Price最近Length周期的和。

Params
    NumericSeries Price(1);
    Numeric Length(10);
Vars
    Numeric SumValue(0);
    Numeric i;
Begin
    for i = 0 to Length - 1
    {
        SumValue = SumValue + Price[ i ];
    }
    Return SumValue;
End

如果希望For语句从大到小进行循环,可以使用以下的语法:

For 循环变量 = 初始值 DownTo 结束值
{
    TradeBlazer公式语句;
}

For-DownTo让循环变量从结束值每次递减1直到等于结束值,依次调用TradeBlazer公式语句执行,初始值必须大于或等于结束值才有意义。

For语句是比较常用的一种循环控制语句,它应用于知道循环次数的地方,很多内建用户函数中都使用For语句来完成相应的功能,比如Summation,Highest,Lowest,LinearReg等。

While
While语句在条件为真的时候重复执行某一项操作。即,只要条件表达式的值为真(True)时,就重复执行某个动作。直到行情信息改变以致条件为假(False)时,循环才结束。

语法如下:

While (Condition)
{
    TradeBlazer公式语句;
}

Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句将会被循环执行,Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

例如,以下的公式用来计算要产生大于100000成交量需要最近Bar的个数:

Vars
    Numeric        SumVolume(0);
    Numeric        Counter (0);
Begin
    While (SumVolume < 100000)
    {
        SumVolume = SumVolume + Vol[Counter]
        Counter = Counter + 1;
    }
End

首先,我们定义两个变量SumVolume和Counter,并将其默认值设为0。当SumVolume <100000这个表达式为True时,While内的TradeBlazer公式语句一直被调用,将前Counter个Bar的Vol加到SumVolume中,当SumVolume大于等于100000时,退出循环。

在使用While循环的时候,有可能会遇到循环一直执行,永远不能退出的情况,这种情况我们称之为死循环,比如下面的语句;

While (True)
{
    TradeBlazer公式语句;
}

在这种情况下,循环将一直执行,导致程序不能继续工作,在这种情况,我们可以使用Break来跳出循环,详细情况参加下节。

Break
针对上节的例子,要想从死循环中跳出,我们可以在循环之中添加Break语句,如下:

While (True)
{
    TradeBlazer公式语句;
    If (Condition)
        Break;
}

循环在每次执行后,都将判断Condition的值,当Condition为True时,则执行Break语句,跳出整个循环。

Continue
有的时候在循环中,我们可能希望跳过后面的代码,进入下一次循环,在这种情况下,可以使用Continue语句来达到目的,如下:

While (Condition1)
{
    TradeBlazer公式语句1;
    If (Condition2)
            Continue;
    TradeBlazer公式语句2;
}

当Condition1满足时,循环被执行,在执行完TradeBlazer公式语句1后,将判断Condition2的值,当Condition2为True,将跳过TradeBlazer公式语句2,重新判断Condition1的值,进入下一次循环。否则将继续执行TradeBlazer公式语句2。

[ 本帖最后由 nopain 于 2007-10-7 13:49 编辑 ]
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
23#
发表于 2007-10-7 13:40:39 |只看该作者

精华中精华文华所没有实现复杂策略工具二

控制语句
TradeBlazer公式支持两大类的控制语句:条件语句和循环语句。

条件语句
条件语句包括以下四类表达方式:

If
If语句是一个条件语句,当特定的条件满足后执行一部分操作。

语法如下:

If (Condition)
{
    TradeBlazer公式语句;
}

Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句将会被执行,Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

例如,您可以计算图表中上升缺口(当前Bar的开盘价高于上一个Bar的最高价)出现了多少次,只要在图表中使用If语句,当找到一个满足条件的Bar时,即条件为真时,变量加1,脚本如下:

Vars
    NumericSeries Counter(0);
Begin
    If ( Open > High[1])
    {
        Counter = Counter[1] + 1;
        ...
    }   
    ...
End

在TradeBlazer公式中,If语句被广泛使用,如K线型态和特征走势,都需要大量的使用If语句,当条件满足的时候,在满足条件的Bar上面进行标记。例如,下面的语句就是特征走势的例子:

If(High > High[1] AND Low < Low[1])
{
    PlotNumeric(High,"Outside Bar");
}

If语句在不是用括号的情况,只执行下面的第一条语句,如下的语句,Alert不会只在条件为True时执行,而是每次都执行。

If(High > High[1] AND Low < Low[1])
    PlotNumeric(High,"Outside Bar");
Alert("Outside Bar");

要想Alert只在条件为True时执行,您需要按照下面的格式编写:

If(High > High[1] AND Low < Low[1])
{
    PlotNumeric(High,"Outside Bar");
    Alert("Outside Bar");
}

If-Else
If-Else语句是对指定条件进行判断,如果条件满足执行If后的语句。否则执行Else后面的语句。

语法如下:

If (Condition)
{
    TradeBlazer公式语句1;
}Else
{
    TradeBlazer公式语句2;
}

Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句1将会被执行;Condition为False时,TradeBlazer公式语句2将会被执行。Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

例如,比较当前Bar和上一个Bar的收盘价,如果Close > Close[1],Value1 = Value1 + Vol;否则Value1 = Value1 - Vol,脚本如下:

If (Colse > Close[1])
    Value1 = Value1 + Vol;
Else
    Value1 = Value1 - Vol;

If-Else-If
If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。

语法如下:

If (Condition1)
{
    TradeBlazer公式语句1;
}Else If(Condition2)
{
    TradeBlazer公式语句2;
}Else
{
    TradeBlazer公式语句3;
}

Condition1是一个逻辑表达式,当Condition1为True的时候,TradeBlazer公式语句1将会被执行,Condition1为False时,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer公式语句2将会被执行。Condition2为False时,TradeBlazer公式语句3将会被执行。Condition1,Condition2可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

If-Else-If的语句可以根据需要一直扩展,在最后的Else之后再加If(Condition)和新的执行代码即可。当然您也可以省略最后的Else分支,语法如下:

If (Condition1)
{
    TradeBlazer公式语句1;
}Else If(Condition2)
{
    TradeBlazer公式语句2;
}

If-Else的嵌套
If-Else的嵌套是在If-Else的执行语句中包含新的条件语句,即一个条件被包含在另一个条件中。

语法如下:

If (Condition1)
{
    If (Condition2)
    {
        TradeBlazer公式语句1;
    }Else
    {
        TradeBlazer公式语句2;
    }
}Else
{
    If (Condition3)
    {
        TradeBlazer公式语句3;
    }Else
    {
        TradeBlazer公式语句4;
    }
}

Condition1是一个逻辑表达式,当Condition1为True的时候,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer公式语句1将会被执行。Condition2为False时,TradeBlazer公式语句2将会被执行。当Condition1为False的时候,将会继续判断Condition3的值,当Condition3为True时,TradeBlazer公式语句3将会被执行。Condition3为False时,TradeBlazer公式语句4将会被执行。Condition1,Condition2,Condition3可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

例如,在一个交易指令中,条件设置如下:当前行情上涨的时候,如果收盘价高于开盘价时,则产生一个以收盘价买入1张合约;否则产生一个以开盘价买入1张合约。当前行情没有上涨的时候,如果收盘价高于开盘价,则产生一个以收盘价卖出1张合约;否则产生一个以开盘价卖出1张合约。脚本如下:

If (Open > High[1])
{
    If (Close>Open)
    {
        Buy(1,Open);
    }Else
    {
        Buy(1,Close);
    }
}Else
{
    If (Close > Open)
    {   
        Sell(1,Open);
    }Else
    {
        Sell (1,Close);
    }
}
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
24#
发表于 2007-10-7 13:43:07 |只看该作者

接平仓东东

SetDollarTrailing (2000,True); 当前所有持仓盈利在回落达到2000之后,执行所有持仓位置的价值回落平仓。(此时是计算所有持仓的盈利数)
SetDollarTrailing (1000,False); 当前持仓的某一个建仓位置的盈利在回落达到1000之后,执行该持仓位置的价值回落平仓。(此时只计算该持仓位置的盈利)
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
25#
发表于 2007-10-7 13:43:55 |只看该作者

又是宝贝

说明 当日收盘全部平仓。
语法 SetExitOnClose()
参数 无
备注 当日收盘全部平仓,无返回值,该函数仅支持交易指令。
在当日收盘之后以收盘价全部平仓,将持仓状态变为持平,该函数仅用于历史数据测试,在小于1日线的周期情况下,该操作在建仓日期的最后一个Bar上执行,在1日线及以上的周期中,该操作以建仓Bar的收盘价在同一Bar内执行。在自动交易中因为收盘之后不一定能够保证成功发送委托,所以该函数延迟到第二天的开盘发送。
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
26#
发表于 2007-10-7 13:45:59 |只看该作者

PositionProfit

说明 获得当前持仓位置的浮动盈亏。
语法 Numeric PositionProfit()
参数 无
备注 获得当前持仓位置的浮动盈亏,已考虑交易费用,返回值为浮点数,该函数仅支持交易指令。
只有当MarketPosition != 0时,即有持仓的状况下,该函数才有意义,否则返回0。td>
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
27#
发表于 2007-10-7 13:47:05 |只看该作者

当前持仓的平均建仓价格

说明 获得当前持仓的平均建仓价格。
语法 Numeric AvgEntryPrice()
参数 无
备注 获得当前持仓的平均建仓价格,返回值为浮点数,该函数仅支持交易指令。
示例 无
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
28#
发表于 2007-10-7 13:48:23 |只看该作者

当前持仓位置的每手浮动盈亏

ContractProfit
说明 获得当前持仓位置的每手浮动盈亏。
语法 Numeric ContractProfit()
参数 无
备注 获得当前持仓位置的每手浮动盈亏,已考虑交易费用,返回值为浮点数,该函数仅支持交易指令。
只有当MarketPosition != 0时,即有持仓的状况下,该函数才有意义,否则返回0。
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
29#
发表于 2007-10-7 13:48:54 |只看该作者

获得当前的可用资金

CurrentCapital
说明 获得当前的可用资金。
语法 Numeric CurrentCapital()
参数 无
备注 获得当前的可用资金,已考虑交易费用,返回值为浮点数,该函数仅支持交易指令。
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
232
积分
1532
帖子
152
主题
6
阅读权限
70
注册时间
2007-8-31
最后登录
2019-3-31
30#
发表于 2007-10-7 13:53:37 |只看该作者

根据参数进行获利平仓操作

SetProfitTarget (0,2000,True); 当前所有持仓盈利达到2000之后,执行所有持仓位置的获利平仓。(此时是计算所有持仓的盈利数)
SetProfitTarget (1,50, False); 当前持仓的某一个建仓位置每张合约的盈利达到50之后,执行该持仓位置的获利平仓。(此时只计算该持仓位置的每张合约盈利)
当你退回到根本原来这一切都已经只是有障眼法
水无形而利万物

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-3 15:37

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部