以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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引用振幅的值 |