[转载]飞狐のVBS
(2013-03-24 16:14:01)
标签:
转载 |
分类: 转帖 |
在飞狐中使用VBS,大多涉及的是数值运算,只需熟悉一些常用语句、基本概念就可以应用了,如数组、赋值语句、循环语句、条件语句,过程等概念。
VBS与飞狐原公式系统的的比较
可以任意访问、处理股票数据,解决飞狐公式系统所无法处理的问题
致命的弱点,VBS是解释性语言,因此运行较慢,利用VBS设计公式时,应注意使用高效率的算法、尽量避免用于运算量大的情况
VBS与DLL的比较
VBS比Dll编的函数慢
飞狐直接内嵌了VBS,无需另外安装软件
VBS公式直观,调试非常方便,稍运用技巧,即可做到所见即所得
VBS可以读写外部文件、数据库、Word、Execl等,在运算量不大的情况,VBS比Dll扩展函数运行速度“感觉”不到明显差别。
VBS示例
1
设计一个VBS公式,计算收盘价对应的涨停价位(设涨停板为10%) --假设共有4天的数据
spj:=close;{序列变量,其序列值为4天的收盘价}
<%
//
“<%”标志着VBS代码开始
vspj=ffl.vardata("spj")
// vspj=ffl.vardata("spj"),把飞狐公式系统的序列变量传入到VBS中,在VBS中开辟一个数组vspj“接收”这些数据;
//
ffl.vardata()是接口,把公式系统的序列变量、常数传到VBS,或者反方向传递;
vspj(0)=vspj(0)*1.1 //
赋值语句
vspj(1)=vspj(1)*1.1 //
赋值语句
vspj(2)=vspj(2)*1.1 // 赋值语句
vspj(3)=vspj(3)*1.1 //
赋值语句
// vspj为数组名称
// “vspj(0)”表示vspj数组的第一个元素;
//
“vspj(0)”括号中的0是下标即此时下标为0,vspj(1)代表数组vspj的第二元素,依此类推...
ffl.vardata("spj")=vspj
//
ffl.vardata("spj")=vspj: 把计算的结果即vspj数组传递到公式系统;
%>
// “>”代表VBS代码结束。
spj;
// 在飞狐公式系统中输出VBS处理后的结果
VBS示例
VBS的循环语句表达方式
FOR
I=0 TO 1000
NEXT
// for表示循环开始,是循环首,next是循环尾
// I : 循环变量
示例
spj:=close;{序列变量,其序列值为收盘价}
<%
vspj=ffl.vardata("spj")
for i=0 to
1000
next
ffl.vardata("spj")=vspj
%>
spj;{在飞狐公式系统中输出VBS处理后的结果}
VBS示例
示例
spj:=close;{序列变量,其序列值为收盘价}
<%
vspj=ffl.vardata("spj")
last=ubound(vspj)
for i=0 to last
next
ffl.vardata("spj")=vspj
%>
spj;{在飞狐公式系统中输出VBS处理后的结果}
VBS示例
//
示例
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
next
'
将数组vma5传递到公式系统的序列变量ma5
ffl.vardata("ma5")=vma5
FFL.VarStartIndex("ma5")=10 '设置ma5的起始有效周期为10
%>
ma5;{在飞狐公式系统中输出
VBS示例
if
else
end
if