欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]请教,有没有用变量改写递归或者循环的例子

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有5459人关注过本帖树形打印复制链接

主题:[求助]请教,有没有用变量改写递归或者循环的例子

帅哥哟,离线,有人找我吗?
wenarm
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 12:40:45    Post IP:101.88.241.192[显示全部帖子]

请直接告诉我们你要实现什么样的逻辑需求。

感觉你应该表达的是这个逻吧?

VARIABLE:a=100;
c1:=c;
v1:=v;
a:=a*if(v1<ref(v1,1),c1/ref(c1,1),1);
cc:a;

 

 

 

 

你上面代码的逻辑,相当于在每根k线上,都以初始值100,从第一根k计算到当前位置,然后从当前位置向未来方向计算到最新的k线位置。

 

金字塔中基本不需要在k线Y轴上进行计算,并且这计算也没有量化意义。量化代码的处理,基本上都是沿着X轴(时间轴)处理的。

 

[此贴子已经被作者于2020/3/8 13:02:55编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 15:41:13    Post IP:101.88.241.192[显示全部帖子]

请告诉我们,你这种写法是想实现什么样的逻辑、本身这种写法就是有逻辑问题。

 

 

首先:金字塔中的变量是序列变量。你可以理解为数组。所以的序列变量计算年后,其结果还是一个序列变量。

其次:不要把其他软件或者类c的语法带到pel语言中学习。因为你刚接触pel,你可以直接当做pel中没有数组的概念。

写法就是我前面给你的。不需要循环

[此贴子已经被作者于2020/3/8 16:00:36编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 16:02:53    Post IP:101.88.241.192[显示全部帖子]

图片点击可在新窗口打开查看这个只是你感觉在生气。

 

你现在进入了一个误区。只有知道你想实现什么,我们才能给出段代码,让你从for循环的误区中转变回来。而不是跟着你错误的代码逻辑进行修改。

 

首先:金字塔中的变量是序列变量。你可以理解为数组。所以的序列变量计算年后,其结果还是一个序列变量。

其次:不要把其他软件或者类c的语法带到pel语言中学习。因为你刚接触pel,你可以直接当做pel中没有数组的概念,同时,在时间坐标轴方向上,不需要循环语句的参与。

写法就是我前面给你的。不需要循环

[此贴子已经被作者于2020/3/8 16:06:19编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 17:01:59    Post IP:101.88.241.192[显示全部帖子]

以下是引用vakoth在2020/3/8 16:27:11的发言:
其实我一开始是在

len:= 10;
hh :=hhv(close,len);
ll :=llv(close,len);

tenk[0]:= 0;
for i=1 to datacount do begin
    cvi= (ref(close,i)-ll)/(hh-ll);
    tenk := tenk + sqrt(pow(REF(cvi,i)-ref(cvi,i+1),3)+(1/pow(len,3)));
    end


这个公式上写出现了问题,想请教,后来在论坛看了半天,也没看到类似的公式,才想到请教的,但是因为看了半天,一下子思路太分散了,没有立刻想不起来这个公式,所以临时用第一个例子来提问,现在按照你给的答案来改写这个公式,软件提示风险

没有你这种写法,自然找不到类似的代码范例。上面的代码错的更离谱了。

你的代码是基于什么需求?或者说,你的循环体要实现实现什么?你可以以10根k线为例子表述。

 

现在回到一楼的代码中,语法和逻辑错误我就先不指给你了。等你拗过来后,咱们在讨论语法错误和逻辑错误。c1:=c;

v1:=v;
a[1]:=100;
for i=2 to datacount do begin
a:=a[i-1]*if(v1<v1[i-1],c1/c1[i-1],1);
end;

 

直接改成了下面的代码。(没有循环,没有循序,没有循环)

VARIABLE:a=100;
c1:=c;
v1:=v;
a:=a*if(v1<ref(v1,1),c1/ref(c1,1),1);

[此贴子已经被作者于2020/3/8 17:10:24编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 17:37:14    Post IP:101.88.241.192[显示全部帖子]

图片点击可在新窗口打开查看扯远了吧。pel的语法中基本不需要循环和数组,pel就是为了降低用户的使用难度。如果你非要使用数组和循环,完全可以用c++,python去实现。

没必要和pel的特性背道而驰。并且你的这个算法本身就有问题。

 

建议你自己用一组数据,自己带入你的公式中,逐根算一下。写代码不是为了写而写,是为了实现功能而写。

你的代码是基于什么需求?或者说 你的循环体要实现什么样的效果?你可以以10根k线为例子表述。

 

请直接回答红色部分的问题。我们给你一个标准的写法。以此对照你自己的写法中产生问题。

[此贴子已经被作者于2020/3/8 18:17:55编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 19:55:26    Post IP:101.88.241.192[显示全部帖子]

不要贴你这种错误代码,循环体和你拆解的代码逻辑都不一样。直接用文字说明你要实现什么样的功能逻辑。

[此贴子已经被作者于2020/3/8 20:08:28编辑过]


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/3/8 20:48:57    Post IP:101.88.241.192[显示全部帖子]

是的,用文字表述。前面已将说了,你for循环体的逻辑和你自己拆解的代码逻辑。根本不一致。

您写的这段代码要实现什么功能您总清楚吧。



编程无捷径,技巧靠积累。
 回到顶部