最新公告
  • 欢迎您光临九毛八公式指标网www.9m8.cn,本站全新改版试运行,期间内容全部免费,欢迎下载!欢迎加入本站VIP
  • 图表型指标的编写技巧

    正文概述    2024-04-14 17:37:58  

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


    图表型指标的编写技巧

    图中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, '<*c=ffffff*>'+'季报周期基金持仓-社保持仓-保险持仓-券商持仓-QFII持仓-私募持仓全部机构'),LAYER0;

    DRAWTEXTABS(X00,Y00+Y01*1, '<*c=dddddd*>'+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, '<*c=dddddd*>'+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, '<*c=dddddd*>'+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, '<*c=dddddd*>'+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时去掉小数,利于画面的整洁,更便于识别机构持仓的变化趋势}

    {6:对数据变化比较大的,还可以适量地加一些色彩判断句,便于查阅时能快速抓住重点,例如:ifs(私募01-私募02>=2,'<*c=0000ff*>','<*c=00ff00*>'),由于本指标只是个范例,我就没加这方面的了,朋友们可以根据自己的需要添加}

    {7:从第4部分我们可以看出,除了1234不一样,其它都一样的,我们在编写的时候就可以先写一段,然后在记事本里替换,这可以快速把4个季度的全写出来。所以规范化的编写指标,除了可以提高画面的美感和可识别性,更可以大大提高我们的效率}

    注:关于大智慧云函数机构持仓数据的准确性目前不是很高,仅能做个参考!另外云函数值还可以用指标排序,只要能排序就可用于%&&&&&%,例如公募机构(基金/社保/保险/券商/QFII)持仓很少但私募持仓大幅增加的票利用云函数通过排序就很容易找出来。

    九毛八公式指标,一个优质的公式指标平台!
    九毛八公式指标 » 图表型指标的编写技巧 加入收藏