以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 严重的问题,关于序列变量引用上周期值的错误 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=9554) |
-- 作者:antonyxu99 -- 发布时间:2011/12/31 11:56:30 -- 严重的问题,关于序列变量引用上周期值的错误 初始目的是为了写一条均线,使其在价格大幅跳空时能立刻阶梯式运动到一定位置, 用指数移动平均线来实现这条均线,因为简单算数均线即使中间改变了均线值也不能使其正确移动, 而指数均线是通过均线前一周期值来计算,可以实现。
于是第一步,我先写一条指数均线:(算法参考EMA) N:=20; //周期长度
但是这条语句执行出来的结果是错误的,画出的线根本不是一条均线,倒像是一条连接close的线。 从序列变量运算的机制来看,这条语句没有道理执行不正确,即便是在赋值时,引用了本变量的前值, 也应该计算出正确的结果,我觉得这可能是金字塔计算机制的一个严重的问题导致,请教一下这是为什么?
|
-- 作者:antonyxu99 -- 发布时间:2011/12/31 13:02:31 -- 继续研究 后来有人告诉我是因为序列变量赋值时不能调用自己的前周期值,因此我改了一下, 用一个中间序列变量保存DMA1的前周期值,如下: N:=20; //周期长度 if barpos=1 then DMA1:=C; 指数均线:DMA1;
但是以上的代码还是没法计算出正确结果,还是跟以前的代码一样,得到的是一个近似于close的线, 请高手指教。 |
-- 作者:antonyxu99 -- 发布时间:2011/12/31 13:05:52 -- 另外提一句,我这里须用逐k线模式,另外,我对于vbs的代码不是很熟悉,不希望这么简单的一个功能还要用vbs来实现, 貌似我无论如何都无法用pel来自己写出一条指数均线?(我必须自己用代码实现,而不能使用EMA,因为我要在上面做处理) [此贴子已经被作者于2011-12-31 13:06:24编辑过]
|
-- 作者:admin -- 发布时间:2011/12/31 13:23:05 -- 你干脆把你要想实现的东西,再仔细描述清楚一下 |
-- 作者:阿火 -- 发布时间:2011/12/31 15:27:57 -- N:=20; //周期长度 你这是好像是博易思维,效率较低,技术也落伍。但每个软件都有自己个性的运行机制 充分理解了运行机制,才能运用自如 你的方法不可行的原因是 :ref(dma1,1) 这样获取的是昨天的收盘价而已
用金字塔的精髓技术写,注意采用的是逐K线模式: variable:dma1=c; dma1:=(2*c+(n-1)*dma1)/(N+1);
[此贴子已经被作者于2011-12-31 15:35:15编辑过]
|
-- 作者:antonyxu99 -- 发布时间:2012/1/1 13:29:50 -- leevolvo,按照你的来写没有输出。。。。。。 另外,在逐k线下,DMA1从第二根k线开始就有了计算出的值,那在第三根k线取取出的就是DMA1的前值了,怎么会是昨收呢?
admin,我想实现的就是,比如:大幅跳空时,均线直接移动到跳空缺口的1/2处
|
-- 作者:antonyxu99 -- 发布时间:2012/1/1 13:34:55 -- 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 -- 发布时间:2012/1/1 13:36:48 -- 实际上,我也希望知道金字塔真正的执行机制,为什么那么简单的一段代码,理论上是不该出错的代码,都会有问题 |
-- 作者:阿火 -- 发布时间:2012/1/1 19:51:06 -- 汗 有空多学学帮助文档 我只是实现。你要输出,就自己加个输出语句啊
runmode:0; variable:dma1=c; dma1:=(2*c+(n-1)*dma1)/(N+1); junxian:dma1; |
-- 作者:阿火 -- 发布时间:2012/1/1 20:00:01 -- 以下是引用antonyxu99在2012-1-1 13:29:50的发言:
leevolvo,按照你的来写没有输出。。。。。。 另外,在逐k线下,DMA1从第二根k线开始就有了计算出的值,那在第三根k线取取出的就是DMA1的前值了,怎么会是昨收呢?
当然是昨收了。不信你试试 注意一下,不同的软件有不同的用法。 我看了多少遍的教程,从来没有见过教程里有你这种用法。 如果用其他软件的用法来套在金字塔上,自然不可行了 就像你用vb的语法去写C++,而且还想运行正常,这样不是很可笑吗
|