以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  监控品种数量,与 执行次数  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=79321)

--  作者:塔尖
--  发布时间:2015/6/3 9:04:52
--  监控品种数量,与 执行次数

以下测试代码,后台执行,序列模式,固定间隔

 


GLOBALVARIABLE: n=1;

IF (30 >=12+n)  THEN BEGIN

n:=n+10;

MSGOUT(1 ,NUMTOSTR((n+12) , 1) );SLEEP(2000);

MSGOUT(1 ,NUMTOSTR(n , 1) );  SLEEP(2000);

end

但是,监控几个品种(即使休市品种)就执行几遍,问题在哪里?

怎么才能执行的次数与监控品种数量无关? 谢谢。

 

以下是监控 4 个品种是的执行情况:

 

2015/06/03 08:57:02  23.0
2015/06/03 08:57:04  11.0
2015/06/03 08:57:06  23.0
2015/06/03 08:57:08  11.0
2015/06/03 08:57:10  23.0
2015/06/03 08:57:12  11.0
2015/06/03 08:57:14  23.0
2015/06/03 08:57:16  11.0
2015/06/03 08:57:18  33.0
2015/06/03 08:57:20  21.0
2015/06/03 08:57:22  33.0
2015/06/03 08:57:24  21.0
2015/06/03 08:57:26  33.0
2015/06/03 08:57:28  21.0
2015/06/03 08:57:30  33.0
2015/06/03 08:57:32  21.0


--  作者:wenarm
--  发布时间:2015/6/3 9:15:48
--  

你的条件判断语句的作用是什么?

第一次:n=1,条件符合执行一次。

第二次:n=11,条件语句30>=23,条件符合,执行内部语句,n=21;

第三次判断就不符合你的条件语句了。


--  作者:塔尖
--  发布时间:2015/6/3 9:23:30
--  

你说的对,应该执行 2 次。

但是,为什么每一次都执行了4遍(与监控的数量相同)呢?

 

我的本意是执行一遍即可。


--  作者:wenarm
--  发布时间:2015/6/3 9:47:16
--  

1.每个品种都会执行一次,就是4次,条件语句符合2次。打印输出的语句就是4(品种)*2(打印语句)*2(条件符合次数)。

2.你如果只想打印一边的话,可以限制你的条件。


--  作者:wenarm
--  发布时间:2015/6/3 9:55:00
--  
没有行情的,是不会打印输出的。
[此贴子已经被作者于2015/6/3 9:55:32编辑过]

--  作者:塔尖
--  发布时间:2015/6/3 10:21:17
--  

感谢 wenarm 的耐心答复 !

 

但是我觉得 监控品种的数量与执行的次数应该没有关系,

否则监控一个版块、市场,要执行多少遍了,呵呵。

 

期待其他权威答复,谢谢!

 

 


--  作者:yukizzc
--  发布时间:2015/6/3 10:24:58
--  
代码当然是在你所有监控的品种上进行计算的,就好比你后台交易监控100个品种。那当然我是去交易这100个品种,如果就执行一次那岂不是大大问题了。
--  作者:wenarm
--  发布时间:2015/6/3 10:38:58
--  

1.程序判断条件执行的次数只和你的判断条件有关系。

2.你监控的每个品种,都会进行监控然后打印输出。

1,2两个组合一起就是你一共打印的次数(类似双重循环的结构)

例如:你上面的打印输出16句话。是判断程序执行2次的结果。1次打印8条语句。

        在这8条语句中,每2条一组,代表一个品种共计4个品种。

 


--  作者:塔尖
--  发布时间:2015/6/3 11:15:51
--  

感谢楼上 二位 的回答!

 

以上的测试代码,主要语句 msgout,是通用的,

输出的次数与监控的品种数量相同,明白的。

 

现在加入一条买入语句:

 

GLOBALVARIABLE: n=1;

IF (30 >=12+n)  THEN BEGIN

n:=n+10;

 

TBUY(1,1,LMT,0.01,0,\'账户\',\'品种\'); SLEEP(2000);

MSGOUT(1 ,NUMTOSTR((n+12) , 1) ); SLEEP(2000);


end

 

输出结果如下:

 

监控4个品种时(有一个欧洲品种,休市中,不应该起作用啊),msgout输出 8 遍 (4*2),

      但是买入的执行了 5 遍,(4 + 1 ?)。

 

监控3个品种时(有一个欧洲品种,休市中),msgout输出 6 遍 (3*2),

但是买入的执行了 4 遍,(3 + 1 ?)。

 

问题是:第二轮,为什么 买入仅 执行了 1遍 呢?

 


 


--  作者:塔尖
--  发布时间:2015/6/3 11:26:40
--  

主要是我不想要重复的执行交易。

 

比如:我的程序里,有恒指,金,银,dax,的判断条件。

因为他们的 交易时间各不相同。有的交易时段交叉。

 

那么监控这4个品种。交叉时段,比如恒指符合条件,买入4次。

金 符合条件,也重复买入了?

 

如何做到,只买入 1 次呢?

(我现在只能监控一个 全天候交易品种 的笨方法)

[此贴子已经被作者于2015/6/3 11:28:11编辑过]