RUNMODE:0; //工作于逐K线模式
VARIABLE: i1=0;//定义参数值
i1:=i1+1;
MSGOUT(1,'i1 is : ' + NUMTOSTR(i1,5));
EXTGBSTRINGSET('参数', NUMTOSTR(i1,5) );
savefile();//将i1写入文件
-----------------------
运行后窗口打印出i1的值为:1,2,3。。。。。681
但写入的文件确是681,681,。。。681
为什么文件里不是写入1,2,3。。。。。681呢?
EXTGBSTRINGSET 设置的全局变量只能记住最新值,也就是il的最大值。和VARIABLE不一样。
可以参考下这里对全局变量的说明:http://www.weistock.com/WeisoftHelp/index.html?zbgs003.htm
但我这是逐K线模式下运行,处理第一根K线时,最新值是1,savefile()写一次文件那就是应该写入了1. 处理第二根k线时, 最新值是2,savefile()写一次文件那就是应该写入了2.
。。。。
因为写的时候,都是写入了当时的最大值。
逻辑难道不是这样吗?
i1是用EXTGBSTRING存放的。
savefile()就是用Document.GetExtString取出来的,如下:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(xxx, 8)
s=Document.GetExtString("i1")
objFile.WriteLine s
保存在文件。
就这简单的代码。
不行的。超全局变量保存的只能是最新值。或者你也可以这样理解超全局变量的计算只在最新K上奏效或者说它只算最新 K上的情况。 机制上它和其他变量不太一样。
比如这个代码的运行,你会发现即使是从历史K上运行到最新K,i1的输出也始终是最新K上对应的值。
VARIABLE: i1=0;
i1:=i1+1;
MSGOUT(1,'i0 is : ' + NUMTOSTR(i1,5));
EXTGBSTRINGSET('i1', NUMTOSTR(i1,5) );
MSGOUT(1,'i1 is : ' +EXTGBSTRING( 'i1'));
1.全局变量无法通过代码删除,只能手动删除
2.和VBA的交互只能全局变量传参。按照K先一个K传一个参数的是不行的。