公式指标论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 137|回复: 0

[编写教程] 一己之见:图表型指标的编写技巧

[复制链接]
发表于 2023-9-8 20:09:24 | 显示全部楼层 |阅读模式

立即注册,结交更多股友,获取更多金钻指标,让你轻松遨游股市。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
近期发现理想论坛有一些朋友写指标时,对于一些超大型列表类的指标,会出现两个问题:第一是画面不美观排列混乱,第二是输出语句太多,但由于大智慧对输出语句数量有一定的限制,导致指标不能完成;我写了一个简单的指标做范例,希望能帮助初学者快速提高这方面的技巧。
注意:本示例指标数据函数用的是大智慧最新版的云函数,不带云函数的版本不要使用,否则会导致大智慧异常退出。
20129915594570960.png

图中28个数据,全部使用右对齐排列,显示这28个数据只用了四个输出语句。
请软件高手多留意咱这个帖子,如果实在没办法实现,请告之:建议软件高手开发股票池的自动朗读软件
以下是指标源码部分及指标中用到的一些技巧说明:
{1:设定报告期,后面很多内容都将直接调用这里的字符串数据,这里将报告期期单独列出来是为减少将来修改的工作量,这个非常重要,很多朋友写指标时就不会考虑到这一点}
BG01:='"报告期=20122Q"';
BG02:='"报告期=20121Q"';
BG03:='"报告期=20114Q"';
BG04:='"报告期=20113Q"';
{2:列表,这里设了三个坐标,写的时候会略显麻烦,但对于调试画面的美观度、整洁度有相当大的帮助,下面第四、五行加了两个灰框背景主要是为了提高画面的可阅读性}
X00:=10;{X轴起始} Y00:=10;{Y轴起始} Y01:=15;{行宽}
DRAWRECTABS(X00+50,Y00-6,X00+375,Y00+Y01*5,RGB(0,0,0)),COLOR999999,LAYER5;
DRAWRECTABS(X00-5,Y00-6,X00+430,Y00+Y01*1-2,RGB(,0,255)),COLORdddddd,LAYER6;
DRAWRECTABS(X00-5,Y00+Y01*2-1,X00+430,Y00+Y01*3-1,RGB(60,60,60)),COLOR333333,LAYER6;
DRAWRECTABS(X00-5,Y00+Y01*4-1,X00+430,Y00+Y01*5-1,RGB(60,60,60)),COLOR333333,LAYER6;
DRAWRECTABS(X00-5,Y00-6,X00+430,Y00+Y01*5,RGB(0,0,0)),COLORffffff,LAYER4;
{3、计算机构持仓比,这里用的大智慧最新7版的云函数,由于前面单独设了报告期,日后就不用修改了,提高了指标编辑效率}
基金01:=DFIXTREEDOT('基金持股比例',BG01,1)+DFIXTREEDOT('基金管理公司持股比例',BG01,1);
基金02:=DFIXTREEDOT('基金持股比例',BG02,1)+DFIXTREEDOT('基金管理公司持股比例',BG02,1);
基金03:=DFIXTREEDOT('基金持股比例',BG03,1)+DFIXTREEDOT('基金管理公司持股比例',BG03,1);
基金04:=DFIXTREEDOT('基金持股比例',BG04,1)+DFIXTREEDOT('基金管理公司持股比例',BG04,1);
社保01:=DFIXTREEDOT('社保基金持股比例',BG01,1)+DFIXTREEDOT('企业年金持股比例',BG01,1);
社保02:=DFIXTREEDOT('社保基金持股比例',BG02,1)+DFIXTREEDOT('企业年金持股比例',BG02,1);
社保03:=DFIXTREEDOT('社保基金持股比例',BG03,1)+DFIXTREEDOT('企业年金持股比例',BG03,1);
社保04:=DFIXTREEDOT('社保基金持股比例',BG04,1)+DFIXTREEDOT('企业年金持股比例',BG04,1);
保险01:=DFIXTREEDOT('保险机构持股比例',BG01,1)+DFIXTREEDOT('保险产品持股比例',BG01,1);
保险02:=DFIXTREEDOT('保险机构持股比例',BG02,1)+DFIXTREEDOT('保险产品持股比例',BG02,1);
保险03:=DFIXTREEDOT('保险机构持股比例',BG03,1)+DFIXTREEDOT('保险产品持股比例',BG03,1);
保险04:=DFIXTREEDOT('保险机构持股比例',BG04,1)+DFIXTREEDOT('保险产品持股比例',BG04,1);
券商01:=DFIXTREEDOT('券商持股比例',BG01,1)+DFIXTREEDOT('券商集合理贝才产品持股比例',BG01,1);
券商02:=DFIXTREEDOT('券商持股比例',BG02,1)+DFIXTREEDOT('券商集合理贝才产品持股比例',BG02,1);
券商03:=DFIXTREEDOT('券商持股比例',BG03,1)+DFIXTREEDOT('券商集合理贝才产品持股比例',BG03,1);
券商04:=DFIXTREEDOT('券商持股比例',BG04,1)+DFIXTREEDOT('券商集合理贝才产品持股比例',BG04,1);
QFII01:=DFIXTREEDOT('QFII持股比例',BG01,1);
QFII02:=DFIXTREEDOT('QFII持股比例',BG02,1);
QFII03:=DFIXTREEDOT('QFII持股比例',BG03,1);
QFII04:=DFIXTREEDOT('QFII持股比例',BG04,1);
私暮01:=DFIXTREEDOT('信托计划持股比例',BG01,1)+DFIXTREEDOT('阳光私暮持股比例',BG01,1)+DFIXTREEDOT('投资公司持股比例',BG01,1)+DFIXTREEDOT('资产管理计划持股比例',BG01,1);
私暮02:=DFIXTREEDOT('信托计划持股比例',BG02,1)+DFIXTREEDOT('阳光私暮持股比例',BG02,1)+DFIXTREEDOT('投资公司持股比例',BG02,1)+DFIXTREEDOT('资产管理计划持股比例',BG02,1);
私暮03:=DFIXTREEDOT('信托计划持股比例',BG03,1)+DFIXTREEDOT('阳光私暮持股比例',BG03,1)+DFIXTREEDOT('投资公司持股比例',BG03,1)+DFIXTREEDOT('资产管理计划持股比例',BG03,1);
私暮04:=DFIXTREEDOT('信托计划持股比例',BG04,1)+DFIXTREEDOT('阳光私暮持股比例',BG04,1)+DFIXTREEDOT('投资公司持股比例',BG04,1)+DFIXTREEDOT('资产管理计划持股比例',BG04,1);
机构01:=DFIXTREEDOT('机构持股比例合计',BG01,1);
机构02:=DFIXTREEDOT('机构持股比例合计',BG02,1);
机构03:=DFIXTREEDOT('机构持股比例合计',BG03,1);
机构04:=DFIXTREEDOT('机构持股比例合计',BG04,1);

{4:字符显示区,前面写一个空9可以节省后面过多的字符,通过对数据前面增加空格(STRRIGHT函数)就可以很轻松地对字符进行对齐,而且仅用一个输出语句就将整个季度的数据显示出来,有些朋友每一个数据用一个输出语句,这样是极期浪费的,这种方法一旦数据太多的时候,大智慧就会拒绝再加输出语句}
空9:=' ';
DRAWTEXTABS(X00,Y00+Y01*0-2, ''+'季报周期基金持仓-社保持仓-保险持仓-券商持仓-QFII持仓-私暮持仓全部机构'),LAYER0;
DRAWTEXTABS(X00,Y00+Y01*1, ''+STRMID(BG01,9,4)+'-'+STRMID(BG01,13,1)+'季'
+STRRIGHT(空9+ifs(基金01=0,'0',NUMTOSTRN(基金01,2)),9)
+STRRIGHT(空9+ifs(社保01=0,'0',NUMTOSTRN(社保01,2)),9)
+STRRIGHT(空9+ifs(保险01=0,'0',NUMTOSTRN(保险01,2)),9)
+STRRIGHT(空9+ifs(券商01=0,'0',NUMTOSTRN(券商01,2)),9)
+STRRIGHT(空9+ifs(QFII01=0,'0',NUMTOSTRN(QFII01,2)),9)
+STRRIGHT(空9+ifs(私暮01=0,'0',NUMTOSTRN(私暮01,2)),9)
+STRRIGHT(空9+ifs(机构01=0,'0',NUMTOSTRN(机构01,2)),9));
DRAWTEXTABS(X00,Y00+Y01*2, ''+STRMID(BG02,9,4)+'-'+STRMID(BG02,13,1)+'季'
+STRRIGHT(空9+ifs(基金02=0,'0',NUMTOSTRN(基金02,2)),9)
+STRRIGHT(空9+ifs(社保02=0,'0',NUMTOSTRN(社保02,2)),9)
+STRRIGHT(空9+ifs(保险02=0,'0',NUMTOSTRN(保险02,2)),9)
+STRRIGHT(空9+ifs(券商02=0,'0',NUMTOSTRN(券商02,2)),9)
+STRRIGHT(空9+ifs(QFII02=0,'0',NUMTOSTRN(QFII02,2)),9)
+STRRIGHT(空9+ifs(私暮02=0,'0',NUMTOSTRN(私暮02,2)),9)
+STRRIGHT(空9+ifs(机构02=0,'0',NUMTOSTRN(机构02,2)),9));
DRAWTEXTABS(X00,Y00+Y01*3, ''+STRMID(BG03,9,4)+'-'+STRMID(BG03,13,1)+'季'
+STRRIGHT(空9+ifs(基金03=0,'0',NUMTOSTRN(基金03,2)),9)
+STRRIGHT(空9+ifs(社保03=0,'0',NUMTOSTRN(社保03,2)),9)
+STRRIGHT(空9+ifs(保险03=0,'0',NUMTOSTRN(保险03,2)),9)
+STRRIGHT(空9+ifs(券商03=0,'0',NUMTOSTRN(券商03,2)),9)
+STRRIGHT(空9+ifs(QFII03=0,'0',NUMTOSTRN(QFII03,2)),9)
+STRRIGHT(空9+ifs(私暮03=0,'0',NUMTOSTRN(私暮03,2)),9)
+STRRIGHT(空9+ifs(机构03=0,'0',NUMTOSTRN(机构03,2)),9));
DRAWTEXTABS(X00,Y00+Y01*4, ''+STRMID(BG04,9,4)+'-'+STRMID(BG04,13,1)+'季'
+STRRIGHT(空9+ifs(基金04=0,'0',NUMTOSTRN(基金04,2)),9)
+STRRIGHT(空9+ifs(社保04=0,'0',NUMTOSTRN(社保04,2)),9)
+STRRIGHT(空9+ifs(保险04=0,'0',NUMTOSTRN(保险04,2)),9)
+STRRIGHT(空9+ifs(券商04=0,'0',NUMTOSTRN(券商04,2)),9)
+STRRIGHT(空9+ifs(QFII04=0,'0',NUMTOSTRN(QFII04,2)),9)
+STRRIGHT(空9+ifs(私暮04=0,'0',NUMTOSTRN(私暮04,2)),9)
+STRRIGHT(空9+ifs(机构04=0,'0',NUMTOSTRN(机构04,2)),9));
{5:数据由于全部取两个小数,会导致数据为0时显示“0.00”,因此第四部分加了一个判断句[ifs(机构03=0,'0',],将数据为0时去掉小数,利于画面的整洁,更便于识别机构持仓的变化趋势}

<span style="color: #ff0000"><strong>{6:对数据变化比较大的,还可以适量地加一些色彩判断句,便于查阅时能快速抓住重点,例如:ifs(私暮01-私暮02>=2,'','')
我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 股币 , 目前已有0人回答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表