以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  如何避免过多的引用  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=90231)

--  作者:xiebooo
--  发布时间:2016/1/19 12:18:24
--  如何避免过多的引用
我需要在1分钟k线下引用15日日均振幅,于是我需要引用日线上昨日的收盘价,最高价,最低价,并用它们进行运算。

我现在的做法是:
1.编写highy,lowy,closey三个指标,分别是昨日的高,低,收;
2.编写一个计算振幅的指标,用stkindi函数引用日线的高,低,收,计算出一日的振幅,然后MA(振幅,15);
3.再编写一个计算日线振幅的指标,用stkindi函数引用日线下的第2步编写的指标;如果没有这一步,第2步的MA会按照15个1分钟线计算平均值,而不是15天的平均值

然后应用的时候就会弹出来说,我引用公式过多,超过了50个的限制;

请问有没有什么办法可以不要引用那么多层就能在1分钟线上引用并计算日线资料吗?

附:
第1步的指标
closey
cc:ref(close,n);
highy
hh: ref(high,n);
lowy
ll: ref(low,n);

第2步的指标
truedayrange

hh1:= stkindi(\'\',\'highy(1)\',0,6);
ll1:= stkindi(\'\',\'lowy(1)\',0,6);
cc2:= stkindi(\'\',\'closey(2)\',0,6);
cc1:= stkindi(\'\',\'closey(1)\',0,6);
TR1: MAX(MAX((hh1-ll1),ABS(cc2-hh1)),ABS(cc2-ll1));
MATR1: ma(tr1,m);

第3步的指标
ATR
TR1: stkindi(\'\',\'truedayrange.tr1\',0,6);
ATR1: stkindi(\'\', \'truedayrange.matr1\',0,6);




--  作者:十世
--  发布时间:2016/1/19 13:13:20
--  

 

 

于是我需要引用日线上昨日的收盘价,最高价,最低价,并用它们进行运算。

CALLSTOCK(STKLABEL,VTOPEN,6,-1) 表示引用昨日开盘价  其他的类似 直接用这个

 

全部写在一个指标里面

 


--  作者:xiebooo
--  发布时间:2016/1/19 13:30:28
--  
1. callstock必须注明某个品种吗?我需要在不同的品种数据上使用这个公式,在stklabel的位置放了\'\',就不能计算了。
2. 还是不能解决的就是,计算出振幅之后,MA(振幅,15)的表达式如果用在1分钟k线上,就是计算15根1分钟k线数据的均值,而不是15天的均值。

--  作者:十世
--  发布时间:2016/1/19 13:41:57
--  

 请用户先根据2楼的方式 去操作

实际操作了过后发现了有问题再讨论

 

3楼的两个问题 2楼给的例子都不存在


--  作者:xiebooo
--  发布时间:2016/1/19 13:59:52
--  
3楼的回复就是按照2楼的方式操作之后形成的。附代码:
旧代码:
closey
cc:ref(close,n);
highy
hh: ref(high,n);
lowy
ll: ref(low,n);

truedayrange
hh1:= stkindi(\'\',\'highy(1)\',0,6);
ll1:= stkindi(\'\',\'lowy(1)\',0,6);
cc2:= stkindi(\'\',\'closey(2)\',0,6);
cc1:= stkindi(\'\',\'closey(1)\',0,6);
TR1: MAX(MAX((hh1-ll1),ABS(cc2-hh1)),ABS(cc2-ll1));
MATR1: ma(tr1,m);

新代码:
hh1:= callstock(\'\',vthigh,6,-1);
ll1:= callstock(\'\',vtlow,6,-1);
cc2:= callstock(\'\',vtclose,6,-2);
cc1:= callstock(\'\',vtclose,6,-1);
TR1: MAX(MAX((hh1-ll1),ABS(cc2-hh1)),ABS(cc2-ll1));
MATR1: ma(tr1,m);

新代码没有返回任何计算结果。

且我觉得版主没有明白3楼第二个问题的意思。不管新旧代码,tr1计算的是日线上昨日振幅;那么在1分钟图运行逐k线模式的话,今天开盘以来的每一个1分钟线都会计算昨日振幅,于是ma(tr1,15)就是求过去15根1分钟线返回的昨日振幅的平均值,15个昨日振幅取平均值,就还是等于昨日振幅;我需要的是能在1分钟图上计算出过去15天的振幅均值,这个无法用ma(tr1,15)求得。除了写一个新的指标用stkindi引用现有指标在日线上的计算结果之外,我不知道如何在本指标内直接编写完成。


--  作者:十世
--  发布时间:2016/1/19 14:07:02
--  

CALLSTOCK(STKLABEL,VTOPEN,6,-1);

 

请看标注颜色处的代码  用户写的并不是2楼给的写法


--  作者:xiebooo
--  发布时间:2016/1/19 14:23:41
--  
恩,这个解决了。但是关于无法跨周期使用MA函数的问题还是不知如何解决:

hh1:= callstock(stklabel,vthigh,6,-1);
ll1:= callstock(stklabel,vtlow,6,-1);
cc2:= callstock(stklabel,vtclose,6,-2);
cc1:= callstock(stklabel,vtclose,6,-1);
TR1: MAX(MAX((hh1-ll1),ABS(cc2-hh1)),ABS(cc2-ll1));
MATR1: ma(tr1,m);

tr1计算的是日线上昨日振幅;那么在1分钟图运行逐k线模式的话,今天开盘以来的每一个1分钟线都会计算昨日振幅,于是ma(tr1,15)就是求过去15根1分钟线返回的昨日振幅的平均值,15个昨日振幅取平均值,就还是等于昨日振幅;我需要的是能在1分钟图上计算出过去15天的振幅均值,这个无法用ma(tr1,15)求得。除了写一个新的指标用stkindi引用现有指标在日线上的计算结果之外,我不知道如何在本指标内直接编写完成。

--  作者:十世
--  发布时间:2016/1/19 14:34:00
--  
抱歉 前面没有讲清楚  意思是 让你把 取昨日数据和计算振幅 这些写到一个指标中 然后在另一个指标里stkindi引用振幅的值