以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  能不能定义常量数组  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=51317)

--  作者:klc
--  发布时间:2013/4/22 17:58:50
--  能不能定义常量数组

我需要定义一个几百个元素的数组,数组的每个元素给了初始化值后,以后不会再改变,在测试中,发现运行非常缓慢,因为每次根K线都要去计算N次。

我能不能定义常量数组?

 

或者我这样写是不是合理(逐K线公式):

VARIABLE:Amountper[240]=0.0;
if PERIOD=0 and BARPOS=1 THEN
begin
Amountper[1]:=1.538;
Amountper[2]:=0.68;
Amountper[3]:=0.663;
Amountper[4]:=0.635;
Amountper[5]:=0.65;

......

Amountper[240]:=0.99;

end;

我用barpos=1来限定,公式执行时,只在开始做一次。


--  作者:klc
--  发布时间:2013/4/22 18:04:58
--  
其实我就是要类似mt4里面的int init()函数,可以在里面做一些一次性的东西,初始化变量等操作,只做一次,不用每次刷新都做。
--  作者:wn10000neng
--  发布时间:2013/4/22 20:18:20
--  
应该可以
--  作者:王锋
--  发布时间:2013/4/22 21:35:52
--  
使用超全局变量做标志,第一次运行初始化,以后遇到标识就直接跳过
--  作者:klc
--  发布时间:2013/4/23 9:09:51
--  
谢谢王峰,我明白你的意思,只是我定义的不是普通的变量,而是数组,数组初始化是不是只能初始化为所有元素都一样的?因为我需要为每个元素初始化的值是不同的,该怎么写呢?另外我说的方法(BARPOS=1)在逐K计算公式中能不能用呢?
--  作者:王锋
--  发布时间:2013/4/23 21:25:09
--  

可以用的。

只是这样搞效率上有问题,因为每次刷新K线时,BARPOS=1都要执行一遍了,看你的要求了


--  作者:klc
--  发布时间:2013/4/23 21:29:07
--  

是的,如果是单值的变量的话,就用你说的超全局,如果是数组(特别我定义的数据是用在1分钟图中,每天240根K线,定义了个含有240元素的数组,正好用OPENMINUTES(time)来访问比较方便)就没办法了。

barpos等于1执行一次,也好过每bar都去执行


--  作者:klc
--  发布时间:2013/4/23 21:33:16
--  

另外,王峰:GLOBALVARIABLE似乎在仅刷新最后一根K线时有问题(在最后一根K线上每tick都被初始化),应该是bug,例如下面这个代码:

GLOBALVARIABLE:myvalue=0;

myvalue:=myvalue+1;

my:myvalue;

在逐K线下,不勾选“仅刷新最后一根”,最后一根K线的myvalue是正常值,就等于他是第几根K线

但勾选了“仅刷新最后一根”后,历史K线正常,但最后一根的myvalue就是0了


--  作者:王锋
--  发布时间:2013/4/23 22:34:50
--  

代码测试过了。

你所提到的问题,不是BUG,因为仅刷最后K线不能100%完成所有的事情,这个在你勾选这个功能选项后你应该看到提示。

 


--  作者:klc
--  发布时间:2013/4/24 19:37:42
--  
好的,我在摸索怎么编出高效率的程序