以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [原创]变量中ref(变量,1)异常问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=174975)

--  作者:vakoth
--  发布时间:2020/3/15 14:03:23
--  [原创]变量中ref(变量,1)异常问题
公式如下:
variable:fgd:=0;
fgd:=c*0.5+0.5*a*src[BARPOS-1]*fgd+0.5*a*src[BARPOS-2]*ref(fgd,1);
此公式无输出结果

variable:fgd:=0;
fgd:=c*0.5+0.5*a*src[BARPOS-2]*ref(fgd,1);
有输出结果


variable:fgd:=0;
fgd:=c*0.5+0.5*a*src[BARPOS-1]*fgd+0.5*a*src[BARPOS-2]*fgd[BARPOS-2];



公式编译都没问题
是我的写法有问题还是变量前值跟ref(变量,1)冲突??




--  作者:wenarm
--  发布时间:2020/3/15 14:14:31
--  

你的学习思路就没对过。还是那句话除非特殊需求,否者不需要数组表达。

你要实现什么的需求,我们给你一个范例。

[此贴子已经被作者于2020/3/15 14:14:41编辑过]

--  作者:vakoth
--  发布时间:2020/3/15 14:51:56
--  
版主,你好,你前面有片树叶,挡住了看到前面的大山

你如果不看数组,只看
variable:fgd:=0;
fgd:=c*0.5+0.5*a*src[BARPOS-1]*fgd+0.5*a*src[BARPOS-2]*ref(fgd,1);
此公式无输出结果

如你所说,我不懂数组,那么我就改成c
fgd:=c*0.5+0.5*a*ref(c,1)*fgd+0.5*a*ref(c,2)*ref(fgd,1);

请你看看这句话是不是没输出

错肯定会有的,软件算出来的最终结果会判断我的数据是否正确,在以后的测试中肯定也会发现我的不对,可是这些不对,会逐渐的被排查的,
目前的问题是,这个问题公式,让我折腾了半天,我一开始也是不愿意用数组的,但是确实在你所说的我不会乱用数组之下发现了问题所在


--  作者:vakoth
--  发布时间:2020/3/15 14:53:09
--  
数组在循环语句中代替IF的效果还是让人满意的
--  作者:wenarm
--  发布时间:2020/3/15 14:54:32
--  
那你慢慢折腾吧,能力有限帮不了您
[此贴子已经被作者于2020/3/15 14:58:42编辑过]

--  作者:vakoth
--  发布时间:2020/3/15 14:59:35
--  
无所谓,这个问题我本来就解决了,只是我觉得软件是否存在这个BUG,我的能力还不足以判断是否为bug;
所以这个问题我也不是用求助,我只是告诉你们,有可能存在这个问题,至于你们排查不排查,那是我只能说是好心当驴肝肺了,毕竟这段时间学习你们帮了我好多

--  作者:vakoth
--  发布时间:2020/3/15 15:11:08
--  
你看不起我,你能对我的问题不予理睬吗;
你就不会出错吗,相信我也能找出你的错误之处!

无论我是否错漏百出,别的版主他们只会指出我们错在哪里了,实在错的没法看了,自然是没人愿意回答的
请你能不能像他们一样啊
你说了这些话在前面,后面别的版主看到了本来可以回答,但是回答了问题就是伤了你的面子

你如果觉得不需要用数组,可以直接丢出一个例子,对我说,滚,你把这个例子彻底学习理解了再来问,那我肯定非常感激你

--  作者:yukizzc
--  发布时间:2020/3/15 15:23:28
--  
variable:fgd=0;
a:fgd;
ref_fgd:ref(fgd,1);
fgd:=ref(fgd,1);
after_fgd:fgd
--  作者:yukizzc
--  发布时间:2020/3/15 15:28:34
--  

第一根k的时候

a=0,ref和after都是没有值的

 

第二根k的时候

因为前面的after是没有值,所以这时候a是空值,ref取前一根a的时候值,after取得也是相当于上一根k的fgd也就是a的值,所以都是0

 

第三根k的时候

a就是前面的after后的值就是0,ref是上一根k的a的时候的值,after也是上一根k的a的时候的值,所以是空。

 

然后你会发现一直在走这个循环了


--  作者:yukizzc
--  发布时间:2020/3/15 15:33:10
--  

variable:fgd=0;
ref_fgd:=ref(fgd,1);
if barpos>2 then
begin
a:fgd;

fgd:=ref_fgd;
after_fgd:fgd;
end

 

 

你这样写就能有值了,前几个不计算。本身pel不是一门专门的计算机编程语言,不建议过于追求太细。我们建议根据需求去就可以了,没必要去考虑太多仅仅操作。

举个例子,到底目的地直接走就行了,但是如果你希望把好多的可能路线都去考虑一番,这个本身其实没有那么大价值,就好比现在程序员大部分都是调包完成工作,没有那么多真的去研究算法自己写轮子。