请教,关于通达信自建公式的参数传入,如何让数组转变为数值
2015-10-21 14:27:00   来源:股票壹网   评论:0 点击:

请教,关于通达信自建公式的参数传入,如何让数组转变为数值 TT YY:CONST(HHVBARS(H,60)); GS1 T:="TT YY"; CONST(REF(C,T));--@曲线游戏 非常感谢您的回复,我很快就看明白您的方法了,这个方法是,建立一
  请教,关于通达信自建公式的参数传入,如何让数组转变为数值
TT
YY:CONST(HHVBARS(H,60));

GS1
T:="TT.YY";
CONST(REF(C,T));--@曲线游戏  
    非常感谢您的回复,我很快就看明白您的方法了,这个方法是,建立一个公式返回一个T的数组,然后在GS1中利用该数组T,直接调用函数REF,这里并没有发生数值参数传递的过程,也就是说,您回避了我的问题。

    问题的重点是如何取得数组中某个具体的数值并将其传递给公式参数 —— GS1可能需要许多行计算,才能得到一个结果,因此需要将其当做一个类似子函数的方式去进行调用,就好比,既然已经现成有了ma、macd的指标,为何还需要重写它呢?而且,我还可能按照不同的要求,进行多次调用,比如TT公式可能写成以下形式:
        T1:=求条件1时的T;
        X1:=GS1(T1);
        T2:=求条件2时的T;
        X2:=GS2(T2);
        ……
用您的方法的话,如果GS2有很多行,我就不得不复制很多遍;同时,假如GS2在实际中是指某一个现成的,如macd、kdj、或其它指标的话,我也同样无法调用,而不得不把macd、kdj指标本身的公式代码,复制出来,并且还不得不复制了一遍又一遍!--@曲线游戏
    非常感谢您的回复,我很快就看明白您的方法了,这个方法是,建立一个公式返回一个T的数组,然后在GS1中利用该数组T,直接调用函数REF,这里并没有发生数值参数传递的过程,也就是说,您回避了我的问题。

    问题的重点是如何取得数组中某个具体的数值并将其传递给公式参数 —— GS1可能需要许多行计算,才能得到一个结果,因此需要将其当做一个类似子函数的方式去进行调用,就好比,既然已经现成有了ma、macd的指标,为何还需要重写它呢?而且,我还可能按照不同的要求,进行多次调用,比如TT公式可能写成以下形式:
        T1:=求条件1时的T;
        X1:=GS1(T1);
        T2:=求条件2时的T;
        X2:=GS1(T2);
        ……
用您的方法的话,如果GS1有很多行,我就不得不复制很多遍;同时,假如GS1在实际中是指某一个现成的,如macd、kdj、或其它指标的话,我也同样无法调用,而不得不把macd、kdj指标本身的公式代码,复制出来,并且还不得不复制了一遍又一遍!--
引用:
原帖由 @德芙DF 于 2015-10-21 19:39 发表
曲线游戏
    非常感谢您的回复,我很快就看明白您的方法了,这个方法是,建立一个公式返回一个T的数组,然后在GS1中利用该数组T,直接调用函数REF,这里并没有发生数值参数传递的过程,也就是说,您回避了我的问 ...    
应该是这个意思吧,在TT这个公式中根据条件计算输出数组T,然后将数组T传递给GS1进行计算并返回结果X--@曲线游戏 是在TT这个公式中根据条件计算得到数组T,然后将数组T中的某一个数值传递给GS进行计算并返回结果X,因为自建公式调用时,传递的参数只能接受数值不接受数组。

例子中,HHVBARS返回的其实是一个数组,但我只需要取最后一个数值,也就是最后一个K线的T值,并将这个数值传递给公式GS。因为只有传递数值,才符合自建公式调用的要求。--
引用:
原帖由 @德芙DF 于 2015-10-21 20:34 发表
曲线游戏 是在TT这个公式中根据条件计算得到数组T,然后将数组T中的某一个数值传递给GS进行计算并返回结果X,因为自建公式调用时,传递的参数只能接受数值不接受数组。

例子中,HHVBARS返回的其实是一个数组,但 ...    
明白了,你看下通达信DLL编写规范,写个GS的DLL函数才可实现,这个想法属于高级应用了--@曲线游戏
    啊~~~~这么简单的问题还要写DLL函数?这里的GS是一个泛指,难道每求一个类似这样的参数,对于不同的被调用的GS,都得写一个对应的DLL?要死了!那公式的参数,还有何意义?定义参数跟直接定义在公式开头的变量还有多大区别啊?!
    参数的存在,本身是基于处理不同的数据的要求,而这个数据只要是符合规范,就都应该被接受;如果只能手工定义参数,那么,通达信的公式参数,就只能算是个屁!
    另外,为啥你这么肯定地说,只能用DLL方式才能实现呢?你真的很确定吗?我猜,如果不是你真的不知道如何去实现,那就一定是通达信公司的程序开发员,把公式编译器的BNF语法给做错了!!你是真的很确定吗?--@曲线游戏 非常感谢你的回复,你的方法可以绕过这个问题,谢谢
经过测试,可以很肯定地讲,这是通达信的程序员,把代码给写错了,谢谢--
引用:
原帖由 @德芙DF 于 2015-10-22 08:45 发表
曲线游戏 非常感谢你的回复,你的方法可以绕过这个问题,谢谢
经过测试,可以很肯定地讲,这是通达信的程序员,把代码给写错了,谢谢    
这属于定义和调用子函数了,我用过的几款股软如果不用DLL都不行。金魔方有这个功能,但不能进行逐行计算,受很大限制。飞狐系列股软可以借助数组定义和循环写法解决这个问题--
引用:
原帖由 @曲线游戏 于 2015-10-22 10:16 发表

这属于定义和调用子函数了,我用过的几款股软如果不用DLL都不行。金魔方有这个功能,但不能进行逐行计算,受很大限制。飞狐系列股软可以借助数组定义和循环写法解决这个问题    
高手,虽然完全看不懂,但是还是点赞!
 德芙DF:   2015-10-21 14:27
   我的问题是:通达信,如何在求得的数组中,按条件只取某一个数值,并将该数值作为参数,传递给某个公式。

1、问题详细解释如下:
    1)利用自建公式GS1,实现一个比较复杂的计算,输出线可能有X1,X2,……;
    2)公式GS1,需要一个输入参数T(通达信对公式参数的要求是,T只接受一个数值,不能是数组);
    3)建立一个测试用的TT公式,TT公式中,按照某种条件,求得T值,并将该数值传递给GS1;
    结果是通达信报错:第一个参数不是数值,而是一个数组。

2、具体测试例子如下(本例子为获取60天内最高价那一天的收盘价):
    1)建立公式GS1(求收盘价,只有一个参数T,要求T>=0),公式内只有一行语句(实际应用中,需要完成的计算会复杂得多,不是一行就可以完成的,这里只是一个例子):
            CONST( REF(CLOSE, T) );  {获取参数T所指定的周期的收盘价,T=0表示最后一个周期,T=1表示最后一个周期的前1个周期。}
    2)建立公式TT(求T),内容只有两行如下:
            T := HHVBARS(H,60); {求60天内最高价到当前周期的周期数距离,这里的T应该是一个数组}
            GS1(T); {输出T这一周期的收盘价,本行报错}
    3)对步骤2)中公式进行修改:
            T := CONST( HHVBARS(H,60) );  {用CONST说明只取最后一个数值作为常量,事实上对于类似HHVBARS这样的函数,通常只有最后一个数值才是我们迫切需要的,而之前的数值在实际应用中都没太多意义;我尝试使用CONST的目的,是希望公式管理器能够将其翻译为一个数值,而不是一个数组;但同时我也意识到,在“T:=……”完成赋值后,“:=”操作符可能又将T解释成一个数组了。}
            GS1(T);  {果然,本行报错了}
    4)于是将步骤3)中的公式TT再次改写:
            T := HHVBARS(H,60) );
            GS1( CONST(T) );  {本行同样报错;尝试利用CONST将数组变量T转变为一个数值,即,只取最后一个数值,并传递该数值,尝试还是失败。}

请教,如何做才能完成这样的数值传递?很奇怪竟然查不到通达信这方面的帮助信息,仅仅是传递一个简单的数值参数而已!

 股票专家荐股少而精.成功率达95%免费个股咨询点这里

 想了解手头持有个股接下来的走势个股论坛-股票吧点击这里

请教,关于通达信自建公式的参数传入,如何让数组转变为数值..更多详情请加腾飞涨停微信:gupiao139

相关热词搜索:通达信 指标编写互助答疑区

上一篇:请老师将黄金坑副图改写成选股公式
下一篇:求助,这个指标上加文字怎么做?

本栏点击总排行
分享到: 收藏
短信荐股回顾
邮件传真荐股回顾
整网点击月排行
整网点击排行