身上起小红丘疹并低烧:飞狐中VB扩展实例

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 15:50:27

飞狐VBS公式编写入门

一、VBS教程:
  请参阅Vbs55.chm,里面已经论述得非常详细了,该文件在飞狐的主页提供了下载。链接:http://61.145.112.150//download/show.php?id=27&down=1
  提示:在飞狐中使用VBS,大多涉及的是数值运算,只需熟悉一些常用语句、基本概念就可以应用了,如数组、赋值语句、循环语句、条件语句,过程等概念。
  VBS较飞狐原公式系统的强大之处是,可以任意访问、处理股票数据,解决飞狐公式系统所无法处理的问题,但也有个致命的弱点,VBS是解释性语言,因此运行较慢,利用VBS设计公式时,应注意使用高效率的算法、尽量避免用于运算量大的情况。
  VBS虽然比Dll编的函数慢,但其优点也是明显的,飞狐直接内嵌了VBS,无需另外安装软件。VBS公式直观,调试非常方便,稍运用技巧,即可做到所见即所得。VBS可以读写外部文件、数据库、Word、Execl等,在运算量不大的情况,VBS比Dll扩展函数运行速度“感觉”不到明显差别。

二、VBS公式示例:VBS数组、飞狐接口函数ffl.vardata()
  为了方便学习,可以先在技术指标下建立一个公式组“VBS学习”,示例公式不妨用前缀“SL”比如“SL01”,练习的公式可用“LX01”等表示。
  例一:设计一个VBS公式,计算收盘价对应的涨停价位(设涨停板为10%),为了方便叙述,本公式代码仅用于600531。
  600531,到今天2002.8.4为止,共有4天的数据,因此设计代码如下(设为公式SL01):

PHP代码:
spj:=close;  //序列变量,其序列值为4天的收盘价



<%

vspj=ffl.vardata("spj")



vspj(0)=vspj(0)*1.1

vspj(1)=vspj(1)*1.1

vspj(2)=vspj(2)*1.1

vspj(3)=vspj(3)*1.1



ffl.vardata("spj")=vspj

%>



spj;  //在飞狐公式系统中输出VBS处理后的结果


  公式代码解释:
  1、用“<%”和“%>”这对符号框起来的代码就是我们要学习的VBS公式代码,凡是VBS代码都必须用这对符号框起来,“<%”标志着VBS代码开始,“%>”代表VBS代码结束。注意都是半角符号,不能用全角符号。
  2、vspj=ffl.vardata("spj"),把飞狐公式系统的序列变量传入到VBS中,在VBS中开辟一个数组vspj“接收”这些数据。
  这里ffl.vardata()是接口,负责把公式系统的序列变量、常数传到VBS,或者反方向传递,下面会谈到。
  3、下面对数组vspj稍加解释,数组是有序数据的集合,由一系列元素组成,可以用数组名称和下标来唯一地确定数组中的元素。
  本例中,vspj就是数组名称,“vspj(0)”括号中的0是下标即此时下标为0,VBS规定数组的最小下标为0,因此“vspj(0)”表示vspj数组的第一个元素,vspj(1)代表数组vspj的第二元素,依此类推。
  当语句vspj=ffl.vardata("spj")把spj传递到VBS中的数组vspj时,第1个元素vspj(0)等于spj的首日值即首日收盘价,第2个元素vspj(1)等于spj的第2周期值,......,vspj(3)等于spj第4周期的值,显然数组vspj的下标跟序列变量spj的周期序列对应起来了。但要注意的是,数组vspj的下标比序列变量的序列周期数少1,因为数组下标的起点是0。
  4、vspj(0)=vspj(0)*1.1,这是赋值语句,等号表示赋值,把vspj(0)乘以1.1后赋值到vspj(0)。这条语句可能不好理解,首先这里的“等号”要理解成赋值,不能理解成“相等”的意思,其次,这条语句相当于2条语句即:
x=vspj(0)*1.1
vspj(0)=x
就是说,经过运算后,vspj(0)的值不再是原来的值了,而是原来值的1.1倍(涨幅10%)。此后的三条语句:
vspj(1)=vspj(1)*1.1
vspj(2)=vspj(2)*1.1
vspj(3)=vspj(3)*1.1
相同解释。经过这4条语句运算后,数组vspj的4个元素的值,都变成了原来的1.1倍。到这里为止,我们已经达到了计算收盘价涨幅10%的目的。
  5、VBS的工作还没完,因为VBS计算的结果,飞狐公式系统还不知道。需要把我们计算的结果即vspj数组传递到公式系统。大家马上就能猜到了,ffl.vardata("spj")=vspj,就是完成这项工作。
  请分析对比ffl.vardata("spj")=vspj和vspj=ffl.vardata("spj")有何不同?在VBS中各起什么作用?在VBS中它们的位置通常在哪里?
  6、接下来的代码就是“%>”,意味着什么?
  7、最后一行代码是“spj”,请问是VBS代码吗?起什么作用?

先告一段落,下午继续。。。