在飛狐中使用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