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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 严重的问题,关于序列变量引用上周期值的错误

   

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


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

主题:严重的问题,关于序列变量引用上周期值的错误

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


加好友 发短信 资深程序员
等级:论坛游民 帖子:154 积分:327 威望:0 精华:0 注册:2011/10/4 23:41:24
严重的问题,关于序列变量引用上周期值的错误  发帖心情 Post By:2011/12/31 11:56:30    Post IP:221.222.127.191[只看该作者]

初始目的是为了写一条均线,使其在价格大幅跳空时能立刻阶梯式运动到一定位置,

用指数移动平均线来实现这条均线,因为简单算数均线即使中间改变了均线值也不能使其正确移动,

而指数均线是通过均线前一周期值来计算,可以实现。

 

于是第一步,我先写一条指数均线:(算法参考EMA)

N:=20;             //周期长度
DMA1:=close;   //如果不写这句,下句会出现 "未定义的变量 DMA1"的错误
DMA1:=if(barpos=1,C,(2*C+(N-1)*ref(DMA1,1))/(N+1));
指数均线:DMA1;

 

但是这条语句执行出来的结果是错误的,画出的线根本不是一条均线,倒像是一条连接close的线。

从序列变量运算的机制来看,这条语句没有道理执行不正确,即便是在赋值时,引用了本变量的前值,

也应该计算出正确的结果,我觉得这可能是金字塔计算机制的一个严重的问题导致,请教一下这是为什么?

 


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


加好友 发短信 资深程序员
等级:论坛游民 帖子:154 积分:327 威望:0 精华:0 注册:2011/10/4 23:41:24
继续研究  发帖心情 Post By:2011/12/31 13:02:31    Post IP:221.222.127.191[只看该作者]

后来有人告诉我是因为序列变量赋值时不能调用自己的前周期值,因此我改了一下,

用一个中间序列变量保存DMA1的前周期值,如下:

N:=20;         //周期长度
DMA1:=Close;   //如果不写这句,下句会出现 "未定义的变量 DMA1"的错误

if barpos=1 then DMA1:=C;
DMA1pre:=ref(DMA1,1);
if barpos<>1 then DMA1:=(2*C+(N-1)*DMA1pre)/(N+1);

指数均线:DMA1;

 

但是以上的代码还是没法计算出正确结果,还是跟以前的代码一样,得到的是一个近似于close的线,

请高手指教。


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


加好友 发短信 资深程序员
等级:论坛游民 帖子:154 积分:327 威望:0 精华:0 注册:2011/10/4 23:41:24
  发帖心情 Post By:2011/12/31 13:05:52    Post IP:221.222.127.191[只看该作者]

另外提一句,我这里须用逐k线模式,另外,我对于vbs的代码不是很熟悉,不希望这么简单的一个功能还要用vbs来实现,

貌似我无论如何都无法用pel来自己写出一条指数均线?(我必须自己用代码实现,而不能使用EMA,因为我要在上面做处理)

[此贴子已经被作者于2011-12-31 13:06:24编辑过]

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


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/12/31 13:23:05    Post IP:123.115.10.88[只看该作者]

你干脆把你要想实现的东西,再仔细描述清楚一下

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


加好友 发短信 原leevolvo
等级:版主 帖子:2160 积分:10563 威望:0 精华:11 注册:2010/11/3 11:21:19
  发帖心情 Post By:2011/12/31 15:27:57    Post IP:61.154.9.180[只看该作者]

N:=20;             //周期长度
DMA1:=close;   //如果不写这句,下句会出现 "未定义的变量 DMA1"的错误
DMA1:=if(barpos=1,C,(2*C+(N-1)*ref(DMA1,1))/(N+1));

你这是好像是博易思维,效率较低,技术也落伍。但每个软件都有自己个性的运行机制 

充分理解了运行机制,才能运用自如

你的方法不可行的原因是 :ref(dma1,1) 这样获取的是昨天的收盘价而已

 

用金字塔的精髓技术写,注意采用的是逐K线模式

variable:dma1=c;

dma1:=(2*c+(n-1)*dma1)/(N+1);

 

[此贴子已经被作者于2011-12-31 15:35:15编辑过]

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


加好友 发短信 资深程序员
等级:论坛游民 帖子:154 积分:327 威望:0 精华:0 注册:2011/10/4 23:41:24
  发帖心情 Post By:2012/1/1 13:29:50    Post IP:114.113.80.220[只看该作者]

leevolvo,按照你的来写没有输出。。。。。。

另外,在逐k线下,DMA1从第二根k线开始就有了计算出的值,那在第三根k线取取出的就是DMA1的前值了,怎么会是昨收呢?

 

admin,我想实现的就是,比如:大幅跳空时,均线直接移动到跳空缺口的1/2处

 


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


加好友 发短信 资深程序员
等级:论坛游民 帖子:154 积分:327 威望:0 精华:0 注册:2011/10/4 23:41:24
  发帖心情 Post By:2012/1/1 13:34:55    Post IP:114.113.80.220[只看该作者]

leevolvo,请教一下,variable指的是全局变量,就是说在只在第一根k线初始化,是吗?即便是序列变量,也可以用variable来申明是吗?

而且你怀疑的是因为初始化语句,DMA1:=close; 导致ref(dma1,1) 取出来的是close,但是ref(dma1,1) 应该是取的DMA1的前值,不应该

被初始化DMA1:=close;影响啊

而用了variable的事实是没有得到任何输出了,我怀疑恐怕不能用variable来申明序列变量。您把这段简单的代码执行以下就知道了

[此贴子已经被作者于2012-1-1 13:35:48编辑过]

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


加好友 发短信 资深程序员
等级:论坛游民 帖子:154 积分:327 威望:0 精华:0 注册:2011/10/4 23:41:24
  发帖心情 Post By:2012/1/1 13:36:48    Post IP:114.113.80.220[只看该作者]

实际上,我也希望知道金字塔真正的执行机制,为什么那么简单的一段代码,理论上是不该出错的代码,都会有问题


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


加好友 发短信 原leevolvo
等级:版主 帖子:2160 积分:10563 威望:0 精华:11 注册:2010/11/3 11:21:19
  发帖心情 Post By:2012/1/1 19:51:06    Post IP:110.91.99.89[只看该作者]

有空多学学帮助文档

我只是实现。你要输出,就自己加个输出语句啊

 

runmode:0;

variable:dma1=c;

dma1:=(2*c+(n-1)*dma1)/(N+1);

junxian:dma1;


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


加好友 发短信 原leevolvo
等级:版主 帖子:2160 积分:10563 威望:0 精华:11 注册:2010/11/3 11:21:19
  发帖心情 Post By:2012/1/1 20:00:01    Post IP:110.91.99.89[只看该作者]

以下是引用antonyxu99在2012-1-1 13:29:50的发言:

leevolvo,按照你的来写没有输出。。。。。。

另外,在逐k线下,DMA1从第二根k线开始就有了计算出的值,那在第三根k线取取出的就是DMA1的前值了,怎么会是昨收呢?

 

 

当然是昨收了。不信你试试

注意一下,不同的软件有不同的用法。

我看了多少遍的教程,从来没有见过教程里有你这种用法。

如果用其他软件的用法来套在金字塔上,自然不可行了

就像你用vb的语法去写C++,而且还想运行正常,这样不是很可笑吗

 


 回到顶部