szkpt 发表于 2008-9-9 16:58:00

序列变量是,每个Tick变一次,还是每个Bar变一次呢?

序列变量是,每个Tick变一次,还是每个Bar变一次呢?

nopain 发表于 2008-9-9 18:22:18

每个Bar

maodong 发表于 2008-9-9 22:42:33

最后一个Bar不是每个Tick都变的吗?

nopain 发表于 2008-9-10 07:19:31

是每个Tick都会计算,但序列变量只会记录该Bar的一个最新的值。不会记录过程中的变化
全局变量则可以记录下来。

举个例子:
我们用一个数值型序列变量 CrossOverCounter; 另外用一个0号全局变量。
在一个1分钟周期下计算,假定到当前Bar之前,CrossOverCounter = 0。0号变量的值也为0。

If(CrossOver(Close,Avg5))
{
     CrossOverCounter = CrossOverCounter + 1;
     SetGlobalVar(0,GetGlobarVar(0)+1);
}

在这根Bar线上面执行完之后,这分钟有100个Tick,公式被执行了100次。其中30次发生了交叉,另外70次没有交叉。执行之后结果如下:

如果最后一个Tick时交叉了,则CrossOverCounter  = 1,否则为0。
0号全局变量的值为30。

leixb 发表于 2009-3-27 21:35:40

不明白

既然在以分钟线为周期的一个bar上,有100次Tick,每个tick都去调用公式,岂不是说每出现一个tick就调用一次公式?那对于每一个Bar上,公式不是要被执行100次吗?在这100个tick运行的过程中,该Bar的close,High可能随时在刷新,如果交易系统需要该Bar定型之后的Close和High,怎么识别呢?
交易系统中,是在每个bar的最后一个tick才去调用交易系统吗?

[ 本帖最后由 leixb 于 2009-3-27 21:37 编辑 ]

nopain 发表于 2009-3-28 12:39:26

回复 #5 leixb 的帖子

Close,High是指当时的Close和High,当前Bar未走完的情况下,都是不稳定的,这正是信号会消失的原因。

leixb 发表于 2009-3-29 13:48:33

明白。
对应于每个Bar,在下一个Bar出现之前,open是确定的,Close,Hihg,Low,持仓量,都存在变数,是随着每个Tick的变化而被刷新的。
那MarketPosition呢?是每个Tick都刷新吗?还是等下一个Bar出来的时候也刷新?
因为这个MarketPosition在编写自动交易系统的时候,经常被用来判断持仓方向,也作为判断是否持仓的依据,所以很重要。
如果MarketPosition在下一个Bar出来之后才能确定,则就容易出现在同一个Bar上被多个Tick反复触发而重复开仓或平仓的问题。
这时,必须配合使用全局变量来记录持仓状况,辅助判断。
如果MarketPosition是在每个Tick都刷新,则从发出交易信号,到返回结果,是需要时间的。在一个Tick的时间内,如果信号因为网络延迟而没有传过来,或丢失了一个Tick的数据,也会导致MarketPosition出现错误,或不能及时反应持仓状况。

不知道,TB内部是怎么处理MarketPosition之类的信息的呢?是每个Tick都更新,还是下一个Bar出来的时候更新?
由于目前主要是收盘后测试交易系统,因此,不会遇到Tick的打扰,但实盘交易,是要经受Tick的冲击的,所以,想弄明白这些细节。请版主解释一下,最好更给些建议。我平时手动交易时,是不需要等待下一条K线的,触发止损价就平仓,突破开仓价就开仓。

[ 本帖最后由 leixb 于 2009-3-29 13:51 编辑 ]

nopain 发表于 2009-3-29 18:21:53

MarketPosition是根据每个Tick刷新并改变,是实时改变的,执行Buy,Sell等指令的下一行就已经变化。

但如果因为条件不确定,进而会导致MarketPosition的值变化,这样就会重复发单,或不能成功平仓。

leixb 发表于 2009-3-30 17:33:36

回复 #8 nopain 的帖子

谢谢管理员解释。只要MarketPosition是根据每个Tick刷新并改变,是实时改变的,就可以作为判断持仓状况的依据了。

rookies 发表于 2012-2-25 23:18:54

这个知识很重要,标记一下,原来变量是每一tick都计算,但只要BAR结束时记录的
页: [1] 2
查看完整版本: 序列变量是,每个Tick变一次,还是每个Bar变一次呢?