作者: 南客 -- 发布时间: 2001/11/19 11:47am [这个贴子最后由南客在 2001/11/21 11:26am 编辑] 公式代码一: a:=close; n:=0.9; <% va=ffl.vardata("a") vn=ffl.vardata("n") '传常量到VN last=ubound(va) for i=0 to last va(i)=va(i)*vn next ffl.vardata("va")=a '这里出问题了,应该是ffl.vardata("a")=va %> a 上述代码的目的是计算收盘价对应的跌停价,但观察结果,输出的却仍是收盘价,错在哪?难道是我们的程序计算错了? 如果在VBS中能“看到”计算的结果多好呀!(DEBUG 方法)为了判断VBS程序是否计算错误,在上述代码next后插入一个函数msgbox,可以帮助我们找到错误。代码如下: 公式代码二: a:=close; n:=0.9; <% va=ffl.vardata("a") vn=ffl.vardata("n") '传常量到VN last=ubound(va) for i=0 to last va(i)=va(i)*vn next msgbox(cstr(va(last))) ffl.vardata("va")=a %> a msgbox(cstr(va(last)))----代码分解:va(last)表示最后一天计算的数值结果,cstr(va(last))是把计算出的数值转换为字符串(msgbox函数只接收字符串),msgbox(cstr(va(last))),在屏幕上弹出一个消息框,显示指定的字符串即计算结果。 为了使消息框显示的信息更具提示性,将本行代码改为 msgbox("最后一天跌停价=" & cstr(va(last))) 显示的消息为两个字符串连接结果,这里使用了字符串连接运算符“&”。 代码解释完毕,可以动手操作了。输入并修改了公式代码二后,点确定,在K线图上显示该公式时,会弹出消息框,提示最后一天的计算结果,显然在VBS脚本中计算的结果是正确的。至此可以推断,问题出在VBS代码的最后一行,仔细观察最后一行代码,ffl.vardata("va")=a并对照wilson对接口ffl.vardata()的解释,原来确实写错了,正确的代码应该是ffl.vardata("a")=va 小结:接口ffl.vardata()的两个用法,va=ffl.vardata("a")作用是把公式系统中的序列变量a传递到VBS中的数组va,ffl.vardata("a")=a的作用是把VBS中的数组传递到公式系统的序列变量a。 思考:找一个上市天数少的股票,如600028试试以下代码,你得出了什么结论? 公式代码三: a:=close; n:=0.9; <% va=ffl.vardata("a") vn=ffl.vardata("n") '传常量到VN last=ubound(va) for i=0 to last va(i)=va(i)*vn msgbox("跌停价=" & cstr(va(i))) next msgbox(cstr(va(last))) ffl.vardata("a")=va %> a 练习1:阅读VBScript帮助文件,输入以下公式代码,看看结果,并思考代码“for i=0 to last step 2”中“step 2”的作用是什么? a:=close; n:=0.9; <% va=ffl.vardata("a") vn=ffl.vardata("n") '传常量到VN last=ubound(va) for i=0 to last step 2 va(i)=va(i)*vn next ffl.vardata("a")=va %> a 练习2:阅读VBScript帮助文件,查看Inputbox()和Cint()函数的用法,把修正后的公式代码一进行修改,使得最后一天的结果等于你从键盘上输入的任意数值。 VBS示例 4 飞狐的接口函数FFL.VarStartIndex() // 传递数组变量有效数值起始位置。例如:FFL.VarStartIndex("VAR1")=10 示例 ma5:=ma(close,5);{序列变量,其序列值是收盘价的5日均价} n:=1.1; <% rem 将公式系统中的序列ma5传入到VBS中的数组vma5 vma5=ffl.vardata("ma5") vn=ffl.vardata("n") '传递公式系统中的常数n到VBS中的变量vn '传递公式系统中序列变量ma5的起始有效周期,赋值给VBS的变量start start=FFL.VarStartIndex("ma5") last=ubound(vma5) 'last等于数组vspj的最大下标 '下面是一个循环 for i=start to last :rem 循环变量i从start到last vma5(i)=vma5(i)*vn '计算vma5上涨10% next ' 将数组vma5传递到公式系统的序列变量ma5 ffl.vardata("ma5")=vma5 FFL.VarStartIndex("ma5")=10 '设置ma5的起始有效周期为10 %> ma5;{在飞狐公式系统中输出 VBS示例 5 条件语句 if ... then ... else ... end if 本文来源:https://www.wddqw.com/doc/b280912d852458fb770b56b2.html