设为首页收藏本站

 找回密码
 注册
查看: 3594|回复: 3
打印 上一主题 下一主题

请教TB自动交易的扫描顺序 [复制链接]

Rank: 5Rank: 5

精华
0
UID
53
积分
765
帖子
121
主题
31
阅读权限
60
注册时间
2007-7-26
最后登录
2011-5-11
跳转到指定楼层
1#
发表于 2009-4-9 16:10:22 |只看该作者 |倒序浏览
TB自动交易时,先按图表上BAR的顺序走一遍,然后在当前BAR上每个TICK都扫描一遍
也就是BAR0->BAR1->...->BAR1->BAR2->BAR2->...
在当前BAR的时间周期里,比如60分钟里BAR0只走一遍,对吗?

我在程序调试中发现,在当前BAR的时间周期里,有时会重新从头扫描,也就是BAR0不止走一遍
请问这是什么原因?

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2009-4-9 17:40:14 |只看该作者
1、最原始的处理方式应该是:每个Tick来了,从Bar0-BarN全部算一遍。
2、但这样效率太低,所以我们做了优化,一般情况下从头算过一次之后,以后更新Tick,只算最后的1个或2个Bar。
3、有的时候也会从头算起,比如,您修改了参数,网络短线重连等。。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
53
积分
765
帖子
121
主题
31
阅读权限
60
注册时间
2007-7-26
最后登录
2011-5-11
3#
发表于 2009-4-9 18:09:59 |只看该作者
我需要用全局变量来记录A_SendOrder已经执行的次数,在BAR=0时对全局变量进行初始化.我原来以为BAR0只走一次的.
现在有什么办法

If (BarStatus == 0)
{
    SetGlobalVar(1,0);
}
// 开仓
If (GetGlobalVar(1) == 0 && High[1] < High[2] && Low[1] > Low[2])
{
  If (Close >= High[1])
  {
    SetGlobalVar(1,1);
    A_SendOrder(Enum_Buy,Enum_Entry,1,Close);  
  }Else If (Close <= Low[1])
  {
    SetGlobalVar(1,-1);
    A_SendOrder(Enum_Sell,Enum_Entry,1,Close);   
  }
}

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2009-4-10 08:49:03 |只看该作者
当全局变量!=InvalidNumeric才做初始化。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-2 09:07

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部