设为首页收藏本站

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

while循环时,还能接收行情吗? [复制链接]

Rank: 3Rank: 3

精华
0
UID
33799
积分
161
帖子
22
主题
9
阅读权限
40
注册时间
2011-4-17
最后登录
2019-6-8
跳转到指定楼层
1#
发表于 2012-1-10 22:21:05 |只看该作者 |倒序浏览
平仓反手的交易,在平仓发出委托至成交之间,需要一个延时等待成交的循环语句,以保证有足够的资金开新仓,问题是,在循环期间,是否还能接收新的行情信息。我的理解是:在循环期间,相当于处理一个tick的程序还没有运行完,按TB的运行机制,似乎不会处理新的tick信息。
Params
Vars
        Numeric        startime;
Begin
    If (Close < Open)
    {
        sell(1,Close);
    }
    if(买条件)
    {
       startime = CurrentTime;
        while(A_buyposition != 0)
        {
              if(Low == Q_LowerLimit)
                   Continue;//跌停板,难成交,继续等待       问题:如果跌停板已打开,是否能收到新的行情信息呢?收不到并且发出的平仓委托本身有问题,这里就变成死循环了。
              if(CurrentTime - startime > 0.000005)
                   break;     //不是跌停板,而且超过5秒,还没成交,不等了。
         }
        Buy(1,close);
    }
End
TB

Rank: 1

精华
0
UID
91934
积分
30
帖子
9
主题
0
阅读权限
10
注册时间
2012-1-9
最后登录
2012-5-25
2#
发表于 2012-1-11 21:49:52 |只看该作者
我觉得也不会,而且tb应该是单线程执行的,没测试过,不过你可以用系统调试一下看看,里面加一个FileAppend然后监控一下是那个线程在做这个fileappend(通过系统监控),什么时候在输出什么log就可以知道了啊。

使用道具 举报

初级大户

酱油

Rank: 5Rank: 5

精华
0
UID
37561
积分
1108
帖子
395
主题
9
阅读权限
60
注册时间
2011-5-4
最后登录
2014-11-3
3#
发表于 2012-1-12 08:20:37 |只看该作者
startime = CurrentTime 这一句永远都在 if(CurrentTime - startime > 0.000005)这个之前执行,逻辑明显有问题。。。
期货IT

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
33799
积分
161
帖子
22
主题
9
阅读权限
40
注册时间
2011-4-17
最后登录
2019-6-8
4#
发表于 2012-1-12 19:09:34 |只看该作者
  回2楼:我没开模拟,听说模拟服务器不好,直接开的实盘,测试起来不是很方便。

  回3楼:在执行while循环时,如果没有中断,应该不会去执行while之前的语句的,也就是说,如果while条件一直存在(死循环),那么,CurrentTime(电脑时间)会一直在走,而startime却停留在初始赋值的数值。
TB

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
33799
积分
161
帖子
22
主题
9
阅读权限
40
注册时间
2011-4-17
最后登录
2019-6-8
5#
发表于 2012-1-12 19:19:57 |只看该作者
本帖最后由 niubaisui 于 2012-1-12 19:23 编辑

我现在最担心的是,在执行while循环时,帐户持仓发生了变化(A_buyposition 由大于0变成了1),却没能收到,就真成了死循环了。
另外,我需要这样子延时,而不是采用tick延时,是因为每个tick都会把程序执行一遍,导致其它变量改变不好写。
TB

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
33799
积分
161
帖子
22
主题
9
阅读权限
40
注册时间
2011-4-17
最后登录
2019-6-8
6#
发表于 2012-1-12 19:32:57 |只看该作者
可能改成以下方式会好些,存在的问题仍然是:帐户仓位改变后,能否及时收到,以及这样写,是否会造成过度查询持仓。如果有直接暂停1秒之类的语句就好了。

Params
Vars
        Numeric        startime;
Begin
    If (Close < Open)
    {
        sell(1,Close);
    }
    if(买条件)
    {
       startime = CurrentTime;
        while(CurrentTime - startime < 0.000005)
        {
              if(A_buyposition = 0)
                   break;     //仓位为0,已平仓,中断循环。
              if(Low == Q_LowerLimit && A_buyposition != 0)
              {
                  startime = CurrentTime;
                   Continue;//跌停板,难成交,继续等待
          }
         }
        Buy(1,close);
    }
End
TB

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
33799
积分
161
帖子
22
主题
9
阅读权限
40
注册时间
2011-4-17
最后登录
2019-6-8
7#
发表于 2012-1-12 21:43:57 |只看该作者
换思路,改写程序,不用这个等待程序了。
TB

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
82453
积分
186
帖子
30
主题
6
阅读权限
40
注册时间
2011-11-26
最后登录
2013-3-6
8#
发表于 2012-2-9 11:20:20 |只看该作者
我用这个等待,也不能如愿,有好的思路吗?
supercan75

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
112747
积分
144
帖子
77
主题
11
阅读权限
40
注册时间
2012-9-30
最后登录
2012-10-16
9#
发表于 2012-10-3 01:20:13 |只看该作者

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
213396
积分
187
帖子
140
主题
26
阅读权限
40
注册时间
2015-7-10
最后登录
2023-4-14
10#
发表于 2016-11-25 14:29:25 |只看该作者

使用道具 举报

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

bottom

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

GMT+8, 2024-5-6 02:48

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部