以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  变量编写请教  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=43942)

--  作者:gcc_Cheng
--  发布时间:2012/12/31 15:56:35
--  变量编写请教
请问怎么让变量在当根k线有效,知道直接定义变量可以,但是这只是在走完k线模式才有效,
在1秒固定轮训却失效,在1秒固定轮训中,每刷新一次数据该变量立即会被重新初始化,以下是
该变量的日志:
2012-12-31 10:02:58.425    CTR的值为:1
2012-12-31 10:02:59.425    上一根K线的持仓状态是:1
2012-12-31 10:02:59.425    CTR的值为:1
2012-12-31 10:03:00.441    条件2成立,此时CTR的值为:1
2012-12-31 10:03:00.441    此时条件2成立,条件2的值为:1
2012-12-31 10:03:00.441    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:00.441    上一根K线的持仓状态是:1
2012-12-31 10:03:00.441    CTR的值为:0
2012-12-31 10:03:01.425    条件2成立,此时CTR的值为:1
2012-12-31 10:03:01.425    此时条件2成立,条件2的值为:1
2012-12-31 10:03:01.425    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:01.425    上一根K线的持仓状态是:1
2012-12-31 10:03:01.425    CTR的值为:0
2012-12-31 10:03:02.425    条件2成立,此时CTR的值为:1
2012-12-31 10:03:02.425    此时条件2成立,条件2的值为:1
2012-12-31 10:03:02.425    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:02.425    上一根K线的持仓状态是:1
2012-12-31 10:03:02.425    CTR的值为:0
2012-12-31 10:03:03.425    条件2成立,此时CTR的值为:1
2012-12-31 10:03:03.425    此时条件2成立,条件2的值为:1
2012-12-31 10:03:03.425    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:03.425    上一根K线的持仓状态是:1
2012-12-31 10:03:03.425    CTR的值为:0
2012-12-31 10:03:04.425    条件2成立,此时CTR的值为:1
2012-12-31 10:03:04.425    此时条件2成立,条件2的值为:1
2012-12-31 10:03:04.425    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:04.425    上一根K线的持仓状态是:1
2012-12-31 10:03:04.425    CTR的值为:0
2012-12-31 10:03:05.425    条件2成立,此时CTR的值为:1
2012-12-31 10:03:05.425    此时条件2成立,条件2的值为:1
2012-12-31 10:03:05.425    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:05.425    上一根K线的持仓状态是:1
2012-12-31 10:03:05.425    CTR的值为:0


输出该语句的代码是:
if cond2 and TJ>=0 and CTR=1 then begin
  if tholding2>0 then tsell(1,0,mkt),orderqueue;
if tholding2=0 then tbuyshort(1,1,mkt),orderqueue;
debugout(\'条件2成立,此时CTR的值为:%.0f\',CTR);
debugfile(\'E:\\DEBUG\\test.txt\',\'条件2成立,此时CTR的值为:%.0f\',CTR);
ZT:=-1;
CTR:=0;
debugout(\'此时条件2成立,条件2的值为:%.0f\',cond2);
debugfile(\'E:\\DEBUG\\test.txt\',\'此时条件2成立,条件2的值为:%.0f\',cond2);
debugout(\'此时CTR的值被改变,改变后的值为:%.0f\',CTR);
debugfile(\'E:\\DEBUG\\test.txt\',\'此时CTR的值被改变,改变后的值为:%.0f\',CTR);
end
ps:cond2是用ref作为判断语句的,不会出现信号闪烁问题。

正常来说变量CTR在第1秒会被输出,之后在当根k线不再输出,但是在1秒固定轮训模式直接定义的变量在当根k线有效却基本失效,
请问老师有什么办法呢?谢谢。

--  作者:jinzhe
--  发布时间:2012/12/31 16:01:36
--  
请说明是哪一段有问题
--  作者:gcc_Cheng
--  发布时间:2012/12/31 16:08:43
--  
输出日志中从10:03这根k线有问题(3分钟周期),之后也是类似问题,正常的话应该是第一秒才输出:
2012-12-31 10:03:01.425    条件2成立,此时CTR的值为:1
2012-12-31 10:03:01.425    此时条件2成立,条件2的值为:1
2012-12-31 10:03:01.425    此时CTR的值被改变,改变后的值为:0
2012-12-31 10:03:01.425    上一根K线的持仓状态是:1
2012-12-31 10:03:01.425    CTR的值为:0

之后输出CTR的值为0,但实际不是这样。

所以怀疑“直接定义的变量在当根k线有效”在固定轮训模式中是失效的。
请老师检查下。

--  作者:gcc_Cheng
--  发布时间:2012/12/31 16:16:53
--  
也就是说CTR在第1秒被改变值后不会再执行刚才的语句,只有等到下根k线CTR被重新初始化后才会再继续判断。
但实际却不是这样,CTR在第1秒被改变值后,接下来的当根k线时间仍继续执行刚才贴出来的代码语句,也就是说CTR的定义与所说的不符合。

PS:代码中的CTR的定义是 CTR:=1;

--  作者:jinzhe
--  发布时间:2012/12/31 16:18:08
--  
CTR是全局变量吗?
--  作者:gcc_Cheng
--  发布时间:2012/12/31 16:22:52
--  
不是,就直接定义的变量。
CTR:=1;

在代码的开头定义。

--  作者:gcc_Cheng
--  发布时间:2012/12/31 16:38:10
--  
有回答吗?
--  作者:大侠鸟
--  发布时间:2012/12/31 17:56:53
--  

不是很明白你的描述,不过从前面的描述来看,你似乎是需要一个变量不会随着初始化而每次都被重新刷新,你可以试试金字塔的超全局变量


--  作者:gcc_Cheng
--  发布时间:2013/1/2 21:36:05
--  
不是,我是需要一个变量每刷新一根K线都会被重新加载,也就是说在当根k线过程中,如果该变量被改变,当根k线该变量则不重新加载,而等到下根k线才重新加载,金字塔定义的直接变量本来是可以实现的,但在1秒固定轮训模式却不行。