欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 嵌入式VBS、JS 脚本帮助文档

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3187人关注过本帖树形打印复制链接

主题:嵌入式VBS、JS 脚本帮助文档

帅哥哟,离线,有人找我吗?
pel46585
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
嵌入式VBS、JS 脚本帮助文档  发帖心情 Post By:2016/1/31 15:19:15 [只看该作者]

3.1 嵌入式VBSJS 脚本

在各种高级语言中,熟悉和精通VB的人无疑是最多的。VBScript VB 的一个子集,它提供的各种语句和语法、常量和变量、函数和过程的规则与VB完全相同,并且也提供了许多基本的计算、处理函数。VBScript是标准的脚本语言,广泛应用于动态网页、大型电子商务系统、Windows系统管理等领域。因此,选用 VBScript作为自己的公式脚本语言(之一),使其公式系统具有强大的计算能力、扩展能力和生命力。

金字塔采用嵌入脚本语言的方式引入VBScript,编制方法类似制作ASP动态网页。采用这种方式可以保持原有公式系统的兼容性,避免一些冲突(例如原条件函数IF不条件语句IF的关键字冲突)。另外,这种方式便于将来再引入新的脚本语言,这就大大提升了公式系统的扩展性和生命力。

VBScript所能进行的计算、处理能力非常强大,甚至可进行文件操作等,所以,只要是想得到的计算,都应该能够实现。类似编制ASPPHP动态网页,可在公式中多处嵌入脚本(用<%...%>括起即可),可在脚本中定义函数、过程供脚本自己调用。

提醒:VBS公式只能在序列模式下运行,无法在逐K线模式工作,这就意味着只能使用ENTERLONG等简单图表交易模型和TBUY等后台交易模式,无法使用图表的BUY交易模型。

3.2 VBS 接口

VBS 不金字塔公式系统之间,必须通过接口才能交换数据,也就是说,公式系统中的数据不能直接被VBS处理,同样VBS 中运行的结果,也不能直接被公式系统使用。

VBS 目前提供的接口有:

1FFL.VarData("变量名"),传递常量、数组变量数据。

2FFL.StrVarData("变量名"),传递字符串常量、数组变量数据。

3FFL.VarStartIndex("变量名"),传递数组变量有效数值起始位置,若脚本处理过程中不改变变量有效数值起始位,则无须调用。

4FFL.Color("变量名"),用于指定指标输出变量的颜色;(可程序实现渐变色)。

5FFL.LineThick("变量名"),用于指定指标输出变量的线宽;(可程序实现线宽)。

3.3 利用VBS 设计公式

VBS 脚本语句,必须使用“<%”和“%>”框起来,以便让公式系统能够识别,在一个指标公式中,可以多次调用VBS 脚本,即可以有多组由“<%%>”框起来的脚本。在公式系统中无法实现而需要调用VBS 的实例通常较复杂,为了学习VBS,所举的实例从简单开始,大多可以在原公式系统中实现。

以下通过具体实例,解剖一下VBS 设计的公式。

例一:设计一个公式,计算收盘价对应的涨停价位(设涨停板为10%

代码如下:

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

%>

vspj: spj;

以下详细解释公式代码:

1spj:=close--定义一个序列变量spj,其值等于序列收盘价(对日K 线而言,等于从上市首日直到最后一天的一系列收盘价,故名为序列变量)。接着是一段由“<%”、“%>”框起来的VBS 程序代码。

2vspj=ffl.vardata("spj")--将序列变量spj 传递到VBS 中,其数据放入数组vpj 中。有关数组概念,可参阅Vbs55.chm

这里对数组稍加解释,VBS 中的数组,是由一系列元素构成的,本例中为Vspj(0)vspj(1)......,这里括号中的01......等称为数组的下标,VBS 数组下标是从0 开始的。其中vbs(0)是数组的第一个元素,对应序列变量的第一个值(即首日收盘价),依此类推,直到最后一个。那么,数组vspj 的最后一个元素是哪个?这很重要,因为在涉及相关计算时必须知道。看下一行代码:

3last=ubound(vspj)--ubound(vspj)是计算数组vspj 最大下标。本行语句,是把vspj 的最大下标的值赋给变量last,也就是说last 此后就等于vspj 的最大下标值。

4)接着的三行语句是VBS 的循环,此处的for...... next 语句的VBS 循环语句中的一种。循环是起什么作用的?我们来看看,要计算从第一天到最后一天的涨停价位,如果逐条语句来写,大致如下:

vspj(0)=vspj(0)*1.1--把第一天的收盘价vspj(0)乘以1.1,再赋回给vspj(0),运算后vspj(0)就不再等于收盘价,而是原价的涨停价位。

vspj(1)=vspj(1)*1.1--vspj(1)运算后等于第二天的涨停价位。

vspj(2)=vspj(2)*1.1

vspj(last)=vspj(last)*1.1--最后一天的运算。一共须写last+1 条语句,显然效率太低了。这些语句用循环语句来写,只须3 条就行了,即

for i=0 to last

vspj(i)=vspj(i)*1.1

next

解释如下:

for i=0 to last--循环首,让循环变量i 1 开始,每次增加递增1 循环执行“循环体”,直到i=last 时跳出循环。

vspj(i)=vspj(i)*1.1-- 循环体, 这里只有一条语句, 可以有多条语句。当i=0 时, 执行的是

vspj(0)=vspj(0)*1.1,随着i 的递增,最后一次执行的是vspj(last)=vspj(last)*1.1,共执行last+1 次。

next--循环尾,与 for 配套对应,执行到此处时,跳回到对应的循环首for 重新执行。当for 语句判断i=last+1 时,for 语句将会跳出循环,即跳过next,到next 的下一条语句。

5)执行完循环后,我们需要的所有运算都完成了,接着要做的是把VBS 中的结果送回到金字塔公式系统中。

ffl.vardata("spj")=vspj--按字面上通俗理解,本行意思是通过接口ffl.vardata(),让金字塔公式系统中的序列变量spj 等于vbs 中的数组vspj,即VBS 中的数据传递到金字塔公式系统。

6)金字塔公式系统输出spj,注意此时的spj 已经不等于原来的序列收盘价了。

有关VBS 公式更详细的说明和教程,请参阅我们的软件使用帮助。

示例:

交易系统:

背景:假定买入信号发生的条件是创200天新高,第一次达到条件时发出买入信号,略去随后的买入信号,利润目标是10%,最大亏损是8%,达到止赢止损点发出止损卖出信号,这样的交易系统可用VBS脚本语言实现。该实例综合应用了循环语句、条件语句和数组操作,请注意变量数据是怎样被转入、转出的。

请看代码:

{ 买入信号临时变量:收盘创200 天新高 }

MYBUY:= CLOSE = HHV(CLOSE,200);

{ 初始化卖出信号临时数组变量给下面的脚本用,仸意赋给一个有效数值起始位置为0 的数组变量即可,注意,

SELL:=0 则表示SELL 为数值而非数组 }

MYSELL:= c;

{ 初始化收盘价临时数组变量给下面的脚本用 }

CLOSEPRICE:= CLOSE;

{ <% ......%> 嵌入脚本语言,类似编写ASP }

<%

' 将公式系统变量转入VBScript

close = FFL.VarData("CLOSEPRICE")

buy = FFL.VarData( "MYBUY" )

sell = FFL.VarData("MYSELL")

 

' 该变量保存买入价,也表示开仓、平仓状态。如为0 则表示空从(平仓)

lastbuyprice = 0

' 遍历数组

for i = 0 to UBound( close )

sell( i ) = 0

' 若已买入而且未平仓略去随后的买入信号

if( lastbuyprice > 0 ) then

buy( i ) = 0

end if

'若满足买入条件取买入价,也用于设置开仓

if ( lastbuyprice = 0 ) AND (buy( i ) = 1) then

lastbuyprice = close( i )

end if

' 若已买入且满足卖出条件,产生卖出信号并平仓

if (lastbuyprice >0 ) AND ( ( close( i ) > ( 1.1 * lastbuyprice ) ) OR ( close( i ) < ( 0.92 *

lastbuyprice ) ) ) then

sell( i ) = 1

lastbuyprice = 0

end if

next

' VBScript 变量转出为公式系统变量

FFL.VarData("MYBUY") = buy

FFL.VarData("MYSELL") = sell

%>

ENTERLONG: MYBUY;

EXITLONG: MYSELL;

有关VBS 公式的更多描述信息,请参考帮助里的更详细描述。

有关VBS语法的更多帮助描述信息,请参阅帮助菜单中的“编程信息”。


 回到顶部