以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  加权均线程序如何写?  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=164226)

--  作者:jinniu1058
--  发布时间:2018/7/1 18:58:23
--  加权均线程序如何写?

设计一个程序,收盘价加权20日均线;方法是:MA1 := sum (ref(c,20)*1+ref(c,19)*2+......+ref(c,1)*20) / 210;

编写程序如下,

VARIABLE : i1=20;   
VARIABLE : j1=1;   
DA:=REF(CLOSE,i1);
DB:=SUM(DA*j1,20);
 WHILE i1>0  DO BEGIN;
     WHILE j1<20  DO BEGIN;
         j1:=j1+1;
     END
     i1:=i1-1;
    MA11:= DB /210; 
  END //WHILE
MA1: MA11,COLORYELLOW,LINETHICK2;

 

程序完成后没有信号也没有显示,请问是什么情况,如何编写正确?


--  作者:wenarm
--  发布时间:2018/7/1 22:24:45
--  
ma20:ma(close,20);//这样就是20日均线。
你自己算的方式存在问题,sum本身就可以计算序列变量,sum(close,20)/20就是你要的。
你写的这种在pel层面上看多此一举没有任何意义。

--  作者:jinniu1058
--  发布时间:2018/7/2 10:54:39
--  
需要加上权重,比如之前的20天前收盘价占权重为1,19天前权重占2,昨日收盘权重占20,而且将来想改变权重比例。
--  作者:jinniu1058
--  发布时间:2018/7/2 10:58:25
--  

原来设计思路是:MA1 := (sum (ref(c,20)*1+ref(c,19)*2+......+ref(c,2)*19+ref(c,1)*20) )/ 210;

改成程序目的是为将来优化参数自动设置周期,否则人工写太麻烦。

[此贴子已经被作者于2018/7/2 10:59:08编辑过]

--  作者:FireScript
--  发布时间:2018/7/2 11:16:32
--  
 你看下wma这个函数,其实就是你这个。
[此贴子已经被作者于2018/7/2 11:16:44编辑过]

--  作者:jinniu1058
--  发布时间:2018/7/2 13:50:59
--  
谢谢版主,原来还有这么一个简单的函数WMA,这回直接运用就可以了,能否看到WMA的源代码?
--  作者:FireScript
--  发布时间:2018/7/2 13:51:35
--  
 源码没有,应该是底层直接实现的。但是函数说明有提到这个具体算法的。
--  作者:jinniu1058
--  发布时间:2018/7/2 16:16:48
--  

谢谢,这回写程序简单多了,不用再写循环程序反复改写了。