以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- 关于VarData 属性 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=66481) |
-- 作者:naij2000 -- 发布时间:2014/6/23 11:13:57 -- 关于VarData 属性 问一个弱弱的问题; 我能用VarData 属性,处理一个序列吗? 例如:公式中 vvv:c,linethick0; now:=BARPOS; aaa:=chuli(l,h,now); 插入一个过程,有如下代码 chuli(Formula,ll,hh,cyc) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 chuli=0 set history=Formula.ParentGrid.GetHistoryData() if ll>hh-100 then vvv(cyc-2):=4014 end if 期望看到结果是,vvv在h-100>l的时候,2周期前的VVV变成4014; 实际看到的效果是,没反应,vvv一直为C |
-- 作者:王锋 -- 发布时间:2014/6/23 19:07:57 -- 不清楚你是否是金字塔的新手,因为你的代码逻辑是紊乱的,其中
1, vvv:c,linethick0; 你将变量赋值到vvv,但是你的PEL代码中并没有中间有重复赋值的地方,当然一直是c了. 2, vba的函数返回值 应该是 函数名=返回值 这样才对,建议你先书店买本VBA的基础开发书籍看看 |
-- 作者:naij2000 -- 发布时间:2014/6/23 19:39:50 -- 是新手,谢谢王总回复; 着急了,意思没表达清楚,我是写了一个过程,关键不在函数返回值,而是希望通过这个过程,去修改一个序列ccc; 我先赋值给CCC,然后通过一个chuli函数,去把ccc序列赋值给VVV,然后把VVV按照条件处理后,重新赋值给CCC,期望看到CCC有变化; 这样可以吗? 例如:公式中 ccc:c,linethick0; now:=BARPOS; aaa:=chuli(l,h,now); 插入一个过程,有如下代码 chuli(Formula,ll,hh,cyc) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 chuli=0 vvv = formula.VARDATA("ccc") set history=Formula.ParentGrid.GetHistoryData() if ll>hh-100 then vvv(cyc-2):=4014 end if formula.VARDATA("ccc") = vvv 期望看到结果是,ccc在h-100>l的时候,2周期前的ccc变成4014; 实际看到的效果是,没反应,vvv一直为C |
-- 作者:王锋 -- 发布时间:2014/6/23 20:49:30 -- VARDATA 是只能在序列模式上使用的, 你的VBA自定义函数也不是工作在序列模式,因为序列模式不是你这么搞的, 金字塔的序列模式是传递给你数组让你去处理的. 建议你参考 金字塔自带的2个MA均线的自定义函数的处理方法
\'计算逐周期模式下指定周期长度的收盘价均价
\'计算序列模式下指定周期长度的收盘价均价 \'防止公式逐周期模式时调用 \'CLOSE数组数据长度一定会与Formula.DataSize-1相等 \'定义一个计算返回的数组 For i = Cyc-1 To Formula.DataSize-1 \'返回一个计算完毕的均线数组 [此贴子已经被作者于2014/6/23 20:49:45编辑过]
|
-- 作者:naij2000 -- 发布时间:2014/6/23 20:59:05 -- 谢谢! VARDATA 是只能在序列模式上使用的 ![]() |
-- 作者:瑟郎 -- 发布时间:2014/6/23 21:29:32 -- 回头给你做个例子 |
-- 作者:naij2000 -- 发布时间:2014/6/23 22:57:47 -- 好啊,先行谢过 ![]() |
-- 作者:瑟郎 -- 发布时间:2014/6/24 23:59:57 -- runmode:0; //必须工作在逐K线模式 ccc:c,linethick0; now:=BARPOS; ccc:=chuli(l,h,now);
插入一个过程,有如下代码 chuli(Formula,ll,hh,cyc) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 chuli=0 set history=Formula.ParentGrid.GetHistoryData() if ll>hh-100 then chuli=4014 end if
由于你没具体需求,大致是这样的。等你有了具体需求再提了 |