以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 逐K模式的PEL问题 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=164320) |
-- 作者:hborning -- 发布时间:2018/7/8 16:54:28 -- 逐K模式的PEL问题 老师,我用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); //参数申明 //为了加快运算速度,只有最后一个周期时才循环计算 倒数第四行MA1[J]:S/N; 为什么不用定义MA1[J]这个数组就能用的?
|
-- 作者:hborning -- 发布时间:2018/7/8 17:17:38 -- 我刚刚把 VAR3[J]= (VAR1[J]+VAR2[J])/2;改为 VAR3[J]:= (VAR1[J]+VAR2[J])/2; 发现输出OUT就变成0了,是什么原因呢?调用(VAR1[J]+VAR2[J])/2怎么会返回结果0?
|
-- 作者:wenarm -- 发布时间:2018/7/8 21:03:00 -- 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 -- 发布时间:2018/7/8 22:39:17 -- 老师,我是想写一个算法(或许应该使用逐K模式吧,因为后面要加上交易信号语句的),类似缠论里面分笔程序 输入:一连串最高价(就是前面的VAR1)、一连串最低价(就是前面的VAR2) 中间需要等长的数组(好几个数组),可供我进行各种操作的(并不是和HIGH、LOW一一对应的,所以需要进行很多使用下标的操作) 最后,要把计算的数组结果,能够在图上画出来(类似缠论的笔) 之前我是用<% %>内嵌方式写的,但无法调试。所以这次想用PEL里面的语句来实现调试。 老师能否就用上面的例子,告知下如何在逐K模式,读入最高价最低价序列,然后将其能保存到中间数组中,进行各种运算?
|
-- 作者:hborning -- 发布时间:2018/7/8 22:50:00 -- 就以这个为例,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 -- 发布时间:2018/7/8 23:42:15 -- pel下直接ref((h+L)/2,2)就已经是你要的结果。不知道你为什么非得自己弄套算法去实现。对于处理过程,抱歉我们能力有限,无法给于你帮助。你有兴趣可以自己学习尝试、 [此贴子已经被作者于2018/7/9 0:00:57编辑过]
|