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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 如何避免过多的引用

   

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


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

主题:如何避免过多的引用

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


加好友 发短信
等级:论坛游侠 帖子:165 积分:0 威望:0 精华:0 注册:2015/11/17 17:32:45
如何避免过多的引用  发帖心情 Post By: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);




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


加好友 发短信
等级:论坛游侠 帖子:2146 积分:0 威望:0 精华:0 注册:2015/4/5 20:47:17
  发帖心情 Post By:2016/1/19 13:13:20 [只看该作者]

 

 

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

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

 

全部写在一个指标里面

 


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


加好友 发短信
等级:论坛游侠 帖子:165 积分:0 威望:0 精华:0 注册:2015/11/17 17:32:45
  发帖心情 Post By:2016/1/19 13:30:28 [只看该作者]

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

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


加好友 发短信
等级:论坛游侠 帖子:2146 积分:0 威望:0 精华:0 注册:2015/4/5 20:47:17
  发帖心情 Post By:2016/1/19 13:41:57 [只看该作者]

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

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

 

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


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


加好友 发短信
等级:论坛游侠 帖子:165 积分:0 威望:0 精华:0 注册:2015/11/17 17:32:45
  发帖心情 Post By: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引用现有指标在日线上的计算结果之外,我不知道如何在本指标内直接编写完成。


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


加好友 发短信
等级:论坛游侠 帖子:2146 积分:0 威望:0 精华:0 注册:2015/4/5 20:47:17
  发帖心情 Post By:2016/1/19 14:07:02 [只看该作者]

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

 

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


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


加好友 发短信
等级:论坛游侠 帖子:165 积分:0 威望:0 精华:0 注册:2015/11/17 17:32:45
  发帖心情 Post By: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引用现有指标在日线上的计算结果之外,我不知道如何在本指标内直接编写完成。

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


加好友 发短信
等级:论坛游侠 帖子:2146 积分:0 威望:0 精华:0 注册:2015/4/5 20:47:17
  发帖心情 Post By:2016/1/19 14:34:00 [只看该作者]

抱歉 前面没有讲清楚  意思是 让你把 取昨日数据和计算振幅 这些写到一个指标中 然后在另一个指标里stkindi引用振幅的值

 回到顶部