以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于超全局变量参与计算存在的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=169078)

--  作者:infocell
--  发布时间:2019/3/29 22:17:17
--  关于超全局变量参与计算存在的问题

为什么如下代码的超全局变量,输出一次就再也输出不了了?

 

难道超全局变量作为值放进去运算一下都不行吗?

 

 

GLOBALVARIABLE:STR_BBA=\'1\';//本合约对锁价格
GLOBALVARIABLE:STR_BBB=\'1\';//本合约对锁价格
GLOBALVARIABLE:STR_BBC=\'1\';//本合约对锁价格
GLOBALVARIABLE:Init_G=0;//本合约对锁价格
VARIABLE:Is_init=0;//当前时间

    
   


IF Is_init=0 AND ISLASTBAR THEN BEGIN

  Is_init:=1;
    ttp:=\'A\'&STR_BBA;

    STR_BBA:=ttp&\'1234567890123456789012345678901\';//本合约对锁价格
 STR_BBB:=ttp&\'12345678901234567890123456789012345678901234567890123456789012341234567890123456789012345678901234567890123456789012345678901234123456789012345678901234567890\';//本合约对锁价格
 STR_BBC:=ttp&\'12345678901234567890123456789012345678901234567890\';//本合约对锁价格
 
    
// STR_BBA:=STR_BBA&\'A1234567890123456789012345678901\';//本合约对锁价格
// STR_BBB:=STR_BBA&\'12345678901234567890123456789012345678901234567890123456789012341234567890123456789012345678901234567890123456789012345678901234123456789012345678901234567890\';//本合约对锁价格
// STR_BBC:=STR_BBA&\'12345678901234567890123456789012345678901234567890\';//本合约对锁价格

 
END

IF Is_init=1 AND Init_G<BARPOS THEN BEGIN
 Init_G:=BARPOS;
 
 MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',A:\'&STR_BBA);
   MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',B:\'&STR_BBB);
   MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',C:\'&STR_BBC);

END

 

输出如下:

2019/03/29 22:14:11  序列:2238,A:A11234567890123456789012345678901
2019/03/29 22:14:11  序列:2238,B:A112345678901234567890123456789012345678901234567890123456789012341234567890123456789012345678901234567890123456789012345678901234123456789012345678901234567890
2019/03/29 22:14:11  序列:2238,C:A112345678901234567890123456789012345678901234567890

 


--  作者:FireScript
--  发布时间:2019/4/1 9:25:58
--  
 Is_init=1 AND Init_G<BARPOS

这个条件有问题。你可以单独输出下。Init_G定义的类型决定了它始终会保持和BARPOS一致。因此每次都只在第一次初始化的时候才会输出一次。

--  作者:infocell
--  发布时间:2019/4/1 21:55:00
--  

为什么对超全局变量一赋值,就输出错误。

GLOBALVARIABLE:STR_BBA=\'1111\';//本合约对锁价格
GLOBALVARIABLE:STR_BBB=\'1111\';//本合约对锁价格
GLOBALVARIABLE:STR_BBC=\'1111\';//本合约对锁价格
GLOBALVARIABLE:Init_G=0;//本合约对锁价格
VARIABLE:Is_init=0;//当前时间

VARIABLE:vs_BBA=\'\';//本合约对锁价格
VARIABLE:vs_BBB=\'\';//本合约对锁价格
VARIABLE:vs_BBC=\'\';//本合约对锁价格
   


IF Is_init=0  THEN BEGIN

  Is_init:=1;
    ttp:=\'A\';//&STR_BBA;
   
 IF valid(STRLEN(STR_BBA))=0  THEN MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',error:len is 0\'&numtostr(STRLEN(STR_BBA),0));
 
    vs_BBA:=ttp&\'1234567890123456789012345678901\';//本合约对锁价格
 vs_BBB:=ttp&\'12345678901234567890123456789012345678901234567890123456789012341234567890123456789012345678901234567890123456789012345678901234123456789012345678901234567890\';//本合约对锁价格
 vs_BBC:=ttp&\'12345678901234567890123456789012345678901234567890\';//本合约对锁价格
 
   
// STR_BBA:=STR_BBA&\'A1234567890123456789012345678901\';//本合约对锁价格
// STR_BBB:=STR_BBA&\'12345678901234567890123456789012345678901234567890123456789012341234567890123456789012345678901234567890123456789012345678901234123456789012345678901234567890\';//本合约对锁价格
// STR_BBC:=STR_BBA&\'12345678901234567890123456789012345678901234567890\';//本合约对锁价格

 
END

IF Is_init=1  THEN BEGIN// AND Init_G<BARPOS
 Init_G:=BARPOS;
 
 MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',A:\'&STR_BBA);
   MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',B:\'&STR_BBB);
   MSGOUT(1,\'序列:\'&NUMTOSTR(BARPOS,0)&\',C:\'&STR_BBC);

END


IF BARPOS>10 AND ISLASTBAR  THEN BEGIN// AND Init_G<BARPOS
 //Init_G:=BARPOS;
 
 STR_BBA:=vs_BBA&\'123A\';//本合约对锁价格
 STR_BBB:=vs_BBB&\'123B\';//本合约对锁价格
 STR_BBC:=vs_BBC&\'123C\';//本合约对锁价格

END

 

输出:

 

2019/04/01 21:52:36  序列:815,A:1111
2019/04/01 21:52:37  序列:815,B:1111
2019/04/01 21:52:37  序列:815,C:1111
2019/04/01 21:52:38  序列:815,A:1111
2019/04/01 21:52:38  序列:815,B:1111
2019/04/01 21:52:38  序列:815,C:1111
2019/04/01 21:52:43  序列:816,A:1111
2019/04/01 21:52:44  序列:816,B:1111
2019/04/01 21:52:44  序列:816,C:1111
2019/04/01 21:52:45  序列:816,error:len is 0-1
2019/04/01 21:52:51  序列:818,error:len is 0-1
2019/04/01 21:52:51  序列:818,C:序列:807,C:
2019/04/01 21:53:06  序列:820,error:len is 0-1
2019/04/01 21:53:12  序列:822,error:len is 0-1
2019/04/01 21:53:13  序列:822,C:序列:811,C:
2019/04/01 21:53:29  序列:825,error:len is 0-1
2019/04/01 21:53:34  序列:826,error:len is 0-1
2019/04/01 21:53:35  序列:826,C:序列:822,C:
2019/04/01 21:53:49  序列:829,error:len is 0-1
2019/04/01 21:53:56  序列:830,error:len is 0-1
2019/04/01 21:53:57  序列:830,C:序列:826,C:
2019/04/01 21:54:12  序列:833,error:len is 0-1
2019/04/01 21:54:17  序列:833,error:len is 0-1
2019/04/01 21:54:27  序列:834,error:len is 0-1
2019/04/01 21:54:28  序列:834,C:序列:830,C:

 


--  作者:FireScript
--  发布时间:2019/4/2 9:18:54
--  
这个赋值有问题。
STR_BBC:=vs_BBC&\'123C\';//本合约对锁价格
vs_BBC本身是个VARIABLE全局变量。 如果是一个普通变量或者固定值是可以的。

你上面的输出那个我只在没有行情时候加载指标出现了,盘中实时刷新的时候倒是没看见有。建议不要在图表上使用GLOBALVARIABLE全局变量。



--  作者:infocell
--  发布时间:2019/4/6 7:43:48
--  
这个赋值有问题。
STR_BBC:=vs_BBC&\'123C\';//本合约对锁价格
vs_BBC本身是个VARIABLE全局变量。 如果是一个普通变量或者固定值是可以的。
 
很不理解为什么不行????????
 
每次初始化,都在这里进行了赋值,超全局变量为什么就一个简单的赋值会出错,号称可以在整个运行期间保存,结果走一根K线就异常。
会不会是金字塔自身有bug呢?
 
vs_BBA:=ttp&\'1234567890123456789012345678901\';//本合约对锁价格

--  作者:FireScript
--  发布时间:2019/4/8 9:50:56
--  

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看
看下这个勾选勾了没有。你上面这个代码我原封不动的测试,除非把这个勾选去掉了,否则一直都是正常输出的。


--  作者:infocell
--  发布时间:2019/4/13 21:11:01
--  

我查了,所有测试在图表下测试的时候,都是选逐K线计算,且仅刷最后一根K线是勾选的。

 

你的输出正常,可否把输出贴一下?


--  作者:infocell
--  发布时间:2019/4/13 21:16:27
--  

其实我是希望把一个变量运算结果在最后一根k线保存,在以后每次初始化的时候,这个变量能保护最后运算的结果,这个应当就是超全局变量的用途,但现在看一两个循环后,这个超全局变量就凭空消失了,非常奇怪。

 

公式在图表下运行,都是选逐K线计算,且仅刷最后一根K线是勾选的。