加载中…
个人资料
莫大仙岳居
莫大仙岳居 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:24,627
  • 关注人气:12,180
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]飞狐のVBS

(2013-03-24 16:14:01)
标签:

转载

分类: 转帖
存档备查
原文地址:飞狐のVBS作者:neverforget

在飞狐中使用VBS,大多涉及的是数值运算,只需熟悉一些常用语句、基本概念就可以应用了,如数组、赋值语句、循环语句、条件语句,过程等概念。
VBS与飞狐原公式系统的的比较

可以任意访问、处理股票数据,解决飞狐公式系统所无法处理的问题

致命的弱点,VBS是解释性语言,因此运行较慢,利用VBS设计公式时,应注意使用高效率的算法、尽量避免用于运算量大的情况

VBS与DLL的比较

VBS比Dll编的函数慢

飞狐直接内嵌了VBS,无需另外安装软件

VBS公式直观,调试非常方便,稍运用技巧,即可做到所见即所得

VBS可以读写外部文件、数据库、Word、Execl等,在运算量不大的情况,VBS比Dll扩展函数运行速度“感觉”不到明显差别。
VBS示例 1   VBS数组、飞狐接口函数ffl.vardata()

设计一个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示例 2   循环语句

VBS的循环语句表达方式

FOR I=0 TO 1000
   VSPJ(I)=VSPJ(I)*1.1
NEXT

// for表示循环开始,是循环首,next是循环尾

// I : 循环变量

示例

spj:=close;{序列变量,其序列值为收盘价}

<%
vspj=ffl.vardata("spj")

for i=0 to 1000
   vspj(i)=vspj(i)*1.1
next

ffl.vardata("spj")=vspj
%>

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

VBS示例 3   ubound函数 返回指定数组维数的最大可用下标

示例

spj:=close;{序列变量,其序列值为收盘价}

<%
vspj=ffl.vardata("spj")

last=ubound(vspj)
for i=0 to last
   vspj(i)=vspj(i)*1.1
next

ffl.vardata("spj")=vspj
%>

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

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                                    

 

 

 

 

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有