以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  下列代码第二段执行不了。  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=77768)

--  作者:txin66
--  发布时间:2015/4/19 13:03:48
--  下列代码第二段执行不了。
em1:=stkindi(stklabel,\'macd.ema12\',0,6,-1);
em2:=stkindi(stklabel,\'macd.ema26\',0,6,-1);
ema12x:=em1*11/13+(close+xday)*2/13;
ema26x:=25/27* em2 +(close+xday)*2/27;
diff:=ema12x-ema26x;
dea1:=stkindi(stklabel,\'macd.dea\',0,6,-1);
dea:=dea1*4/5+diff/5;

M_day_0_加Xday:=2*(diff-dea);

/////当前周期价格假设为CLOSE-Xday时,M_day的MACD值
em1:=stkindi(stklabel,\'macd.ema12\',0,6,-1);                      ///从这句开始,没有有效数值。        
em2:=stkindi(stklabel,\'macd.ema26\',0,6,-1);
ema12x:=em1*11/13+(close-xday)*2/13;
ema26x:=25/27* em2 +(close-xday)*2/27;
diff:=ema12x-ema26x;
dea1:=stkindi(stklabel,\'macd.dea\',0,6,-1);
dea:=dea1*4/5+diff/5;

M_day_0_减Xday:=2*(diff-dea);

上面的句子,在橡胶1509合约的15分钟周期里执行。第一段正常,但第二段后面的em1等所有都没有获得数值。
但在1分钟合约里,同样类似的语句组,是正常的。调用的是30分钟的数据。
MACD函数已经进行了修改:
DIFF : EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  : EMA(DIFF,M);
MACD1 : 2*(DIFF-DEA), COLORSTICK;
 
ema12: ema(c,S),linethick0;
ema26: ema(c,P),linethick0;
   
   
   

不知道原因?

--  作者:jinzhe
--  发布时间:2015/4/20 9:11:46
--  
xday是多少?
--  作者:txin66
--  发布时间:2015/4/20 15:54:08
--  是个参数值
可以自己设置的数值。比如50,或者0,100等都可以。
出现的问题和这个数值多少没有关系。

--  作者:jinzhe
--  发布时间:2015/4/20 16:03:21
--  
为了防止我们之间有些理解上的误差,最好是把我所有想要知道的全部回复一下, 而不是按照自己的理解来让人排查问题
--  作者:txin66
--  发布时间:2015/4/20 16:03:42
--  下面的执行没有问题。为什么?
下面的执行没有问题。只不过下面应用的是当前周期收据。而出现不能正确调用的,是调用的是上一个周期的数值。

怎么回事?

/////////////////////////////////////////////////////////////
////////计算 M_day_1 C+X

em1:=stkindi(stklabel,\'macd.ema12\',0,6,0);
em2:=stkindi(stklabel,\'macd.ema26\',0,6,0);
ema_X_12:=em1*11/13  +(C+X)*2/13;
ema_X_26:=em2*25/27  +(C+X)*2/27;

diff_X:=ema_X_12-ema_X_26;
dea1:=stkindi(stklabel,\'macd.dea\',0,6,0);
dea_X:=dea1*4/5+diff_X/5;
macd_X:=2*(diff_X-dea_X);

M_day_X:=MACD_X;



////计算 M_day_-1 C-X

em1:=stkindi(stklabel,\'macd.ema12\',0,6,0);
em2:=stkindi(stklabel,\'macd.ema26\',0,6,0);
ema_X_12:=em1*11/13  +(C-X)*2/13;
ema_X_26:=em2*25/27  +(C-X)*2/27;

diff_X:=ema_X_12-ema_X_26;
dea1:=stkindi(stklabel,\'macd.dea\',0,6,0);
dea_X:=dea1*4/5+diff_X/5;
macd_X:=2*(diff_X-dea_X);

M_day__X:=MACD_X;


--  作者:txin66
--  发布时间:2015/4/20 16:10:49
--  就是小周期里计算大周期的MACD值
参考阿火的 这个文章  http://www.weistock.com/bbs/dispbbs.asp?boardid=10&id=9439&authorid=0&page=0&star=3 
 在小周期里计算真实的大周期的MACD数值。
只不过我对当时价格,做了2个假设来计算。就是假设当前价格 比CLOSE大一个数值XDAY,就是假设价格为CLOSE+XDAY,和小一个数值(CLOSE-XDAY),分别计算大周期里的MACD数值。
奇怪的是在1分钟里,计算30分钟的没有问题。
但在15分里计算日线和周线数值时候,第二次调用的时候,就调用不到正确的数值。
调用日线数值,如果是调用当日的也没有问题,而是调用前一日的数值,就调用不到。

--  作者:jinzhe
--  发布时间:2015/4/20 16:23:33
--  
在我设定XDAY为20的情况下你上面的代码在日线都是没问题,EM1之后包括EM1都是有数值的,所以这个XDAY很关键。你一定要告诉我XDAY是多少,尽管你认为很无关紧要
--  作者:txin66
--  发布时间:2015/4/20 23:10:48
--  XDAY我是放在参数表里,可以任意设定的。
XDAY我是放在参数表里,设想是可以任意设定的。没有固定数值大小。