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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 逐K模式的PEL问题

   

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


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

主题:逐K模式的PEL问题

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


加好友 发短信
等级:论坛游侠 帖子:122 积分:0 威望:0 精华:0 注册:2017/4/27 19:25:29
逐K模式的PEL问题  发帖心情 Post By:2018/7/8 16:54:28    Post IP:119.129.116.219[只看该作者]

老师,我用PEL语言仿照官方给的例子,逐K模式下,VAR1和VAR2分别为最高价和最低价序列,我想得到一个最高价和最低价的平均值的序列,保存在VAR3里面,代码如下。我发现两个问题:

1、进入调试时候,发现VAR1、VAR2、VAR3都是单一数值,并不像我想象的是一个数组
2、我最后想调试,语句为OUT:VAR3[DATACOUNT-1],NODRAW;  但发现OUT输出的总是最后一个K线的收盘价(就是VAR3:=CLOSE;赋值的,根本没有改变)



VAR1:=HIGH; //金字塔下放在这里的变量为序列赋值
VAR2:=LOW;
VAR3:=CLOSE;

//为了加快运算速度,只有最后一个周期时才循环计算 
IF NOT(ISLASTBAR) THEN EXIT; 
FOR J=1 TO DATACOUNT DO BEGIN 
 VAR3[J]= (VAR1[J]+VAR2[J])/2;
END;
OUT:VAR3[DATACOUNT-1],NODRAW;





-----------------------------------

官网例子是

INPUT:N(5,2,500);      //参数申明 
VARIABLE:I=0,S=0;     //全局变量申明 
VAR1:=C; //金字塔下放在这里的变量为序列赋值

//为了加快运算速度,只有最后一个周期时才循环计算 
IF NOT(ISLASTBAR) THEN EXIT; 
FOR J=1 TO DATACOUNT DO BEGIN 
 S:=S+VAR1[J]; 
 IF J>=N THEN BEGIN 
  IF J>N THEN 
    S:=S-VAR1[J-N]; 
  MA1[J]:S/N;        //实现MA(C,N) 
  I:=0; 
 END; 
END; 


倒数第四行MA1[J]:S/N;  为什么不用定义MA1[J]这个数组就能用的?

 回到顶部
帅哥哟,离线,有人找我吗?
hborning
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:122 积分:0 威望:0 精华:0 注册:2017/4/27 19:25:29
  发帖心情 Post By:2018/7/8 17:17:38    Post IP:119.129.116.219[只看该作者]

我刚刚把
VAR3[J]= (VAR1[J]+VAR2[J])/2;
改为
VAR3[J]:= (VAR1[J]+VAR2[J])/2;

发现输出OUT就变成0了,是什么原因呢?调用(VAR1[J]+VAR2[J])/2怎么会返回结果0?

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/7/8 21:03:00    Post IP:114.92.115.143[只看该作者]

1.var的定义都是序列变量,在整个k线时间坐标轴上看,可以将其理解为是一个有序数组,但是在具体某根k时,就是当前这根k的值、
2.你写的代码中VAR3[J]= (VAR1[J]+VAR2[J])/2; 这个是比较,不是赋值,其值自然还是之前初始化时赋值的close.

倒数第四行MA1[J]:S/N;  为什么不用定义MA1[J]这个数组就能用的?
答:这里是使用方式,并不是定义一个数值,而是将一个隐式声明的序列变量当成数组使用的,并将其在循环中当成数组使用逐个元素赋值使用。


IF NOT(ISLASTBAR) THEN EXIT;
FOR J=1 TO DATACOUNT DO BEGIN
VAR3[J]:(VAR1[J]+VAR2[J])/2;//这个是在最后一根k上计算数据,并将值按k线对齐进行逐根赋值。在循环体值外的变量,当然只会输出一个最后一根k上的值。
END;


提供的范例主要介绍说明序列和逐k的两种模式算法和运行上的差别。用户在使用过程中完全不需要这样这处理自己的计算公式。如你上面计算最高价和最低价的加权平均值,直接就可以
var3:(high+low)/2;
这两种模式的差别,其难度较高,用户没有必要去深究。只要知道有其两种模式即可。



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


加好友 发短信
等级:论坛游侠 帖子:122 积分:0 威望:0 精华:0 注册:2017/4/27 19:25:29
  发帖心情 Post By:2018/7/8 22:39:17    Post IP:119.129.116.219[只看该作者]

老师,我是想写一个算法(或许应该使用逐K模式吧,因为后面要加上交易信号语句的),类似缠论里面分笔程序

输入:一连串最高价(就是前面的VAR1)、一连串最低价(就是前面的VAR2)

中间需要等长的数组(好几个数组),可供我进行各种操作的(并不是和HIGH、LOW一一对应的,所以需要进行很多使用下标的操作)

最后,要把计算的数组结果,能够在图上画出来(类似缠论的笔)

之前我是用<% %>内嵌方式写的,但无法调试。所以这次想用PEL里面的语句来实现调试。

老师能否就用上面的例子,告知下如何在逐K模式,读入最高价最低价序列,然后将其能保存到中间数组中,进行各种运算?

 回到顶部
帅哥哟,离线,有人找我吗?
hborning
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:122 积分:0 威望:0 精华:0 注册:2017/4/27 19:25:29
  发帖心情 Post By:2018/7/8 22:50:00    Post IP:119.129.116.219[只看该作者]

就以这个为例,KRESULT需要得到前面第2根K线的高点和低点的平均值,我可以用内嵌方法写,但无法进入调试

KHIGH:=HIGH;
KLOW:=LOW;
KRESULT:=CLOSE;
<%
k_high = ffl.vardata("KHIGH")
k_low = ffl.vardata("KLOW")
k_result = ffl.vardata("KRESULT")

for i = 2 to ubound(k_high)
k_result(i) = (k_high(i-2)+k_low(i-2))/2
next

ffl.vardata("KRESULT") = k_result
%>

这时候,最后KRESULT就是想得到的结果。
想问老师,如何使用pel数组方式来实现上述结果?虽然用ref也可以实现,但我是想知道怎么样产生中间的数组保存计算结果,以及如何使用数组下标

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/7/8 23:42:15    Post IP:114.92.115.143[只看该作者]

pel下直接ref((h+L)/2,2)就已经是你要的结果。不知道你为什么非得自己弄套算法去实现。对于处理过程,抱歉我们能力有限,无法给于你帮助。你有兴趣可以自己学习尝试、


[此贴子已经被作者于2018/7/9 0:00:57编辑过]


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