工具菜单上那个全局变量,是一个存储容器,存储的变量分为数值型和字符串型,是键值对形式的,类似于字典,这些全局变量在整个金字塔策略中都是共用的,包括Pel、VBA、Python编写的策略都能读写这类全局变量,是常数,不需要定义。
一、在Pel中使用ExtgbDataSet和ExtGbStringSet来存储,使用ExtGbData和ExtGbString来读取。
ExtgbDataSet读取数值型变量的值,ExtGbStringSet是保存字符串类型的值。
例子:在一个策略中保存一个数值型全局变量的值,然后在另一个策略中读取这个值 拿
策略1:A变量保存到A这个数值型全局变量 A:=(Open+Close)/2; ExtGBDataSet('A',A);
策略2:读取A这个数值型全局变量,参与后续判断 A:=ExtGBData('A');
如果是字符串类型,稍做修改 策略1:B变量保存到B这个字符型全局变量 B:='买入'; ExtGBStringSet('B',B);
策略2:读取B这个字符型全局变量,参与后续判断 B:=ExtGBString('B');
这样全局变量A和B就能在不同策略之间共用了,不过需要注意的是,全局变量的值不是系列数,不能使用REF函数来获取前一个值,所以,不便于策略进行回测之类的运算。
二、使用VBA读取和保存全局变量
使用Document对象的GetExtData方法获取数值型全局变量的值,SetExtData来保存数值型全局变量的值; GetExtString方法获取字符型全局变量的值,SetExtString来保存字符型全局变量的值。
例子:拿上面PEL中设置的全局变量变量A和B来讲解,读取时: Dim N1 Dim S1 N1=Document.GetExtData("A") '读取数值型全局变量A的值 S1=Document.GetExtString("B") '读取字符型全局变量B的值
保存时: Call Document.SetExtData("A",100) '保存数值型全局变量A,用数值100替换A的值 Call Document.SetExtString("B",“平仓”) '保存字符型全局变量B,用字符串"平仓"替换B的值
使用VBA对全局变量的操作比使用PEL更强大些,比如:可以清除全局变量,可以删除某一个全局变量等。
要清除所有全局变量,使用Call Document.ClearExtData()就可以。
如果要删除某一个全局变量,可以使用遍历的方法,逐个取出全局变量的键和值,根据键名字来判断是否是要删除的,由于删除操作之后,该全局变量之后的,编号会自动向前移位,所以遍历的时候,要用逆序方式进行。
还是用代码来说明: '删除以A开头的数值型全局变量 Sub DeleteDataGlobal() '删除A开头数值型的全局变量 iGlobal=document.ExtDataNum '获取数值型全局变量的个数 for i=iGlobal-1 to 0 step -1 '逆序循环 '获取指定编号的全局变量的键(sKeyName)值(iKeyValue)对,然后判断是否是要删除的 iKeyValue=document.GetExtDataByIndex(i,sKeyName) Application.MsgOut ikeyvalue & "," & skeyname if ucase(left(sKeyName,1))="A" then '如果键名以A开头就删除,否则不删除 call document.RemoveExtData(i) end if next end sub
'删除以B开头的字符型全局变量 sub DeleteStringGlobal() '删除B开头字符串的全局变量 iGlobal=document.ExtDataStringNum '获取字符串型全局变量的个数 for i=iGlobal-1 to 0 step -1 '逆序遍历 '获取指定编号的全局变量的键(sKeyName)值(iKeyValue)对,然后判断是否是要删除的 iKeyValue=document.GetExtStringByIndex(i,sKeyName) if ucase(left(sKeyName,1))="B" then call document.RemoveExtString(i) end if next end sub
三、使用Python来读写全局变量
#读取数值型全局变量的值 a=getextdata('A') #打印输出'A'的结果 print(a)
#设置A全局变量的值 setextdata('A',1)
#读取字符型全局变量的值 s=getextstring('B') #打印输出'B'的结果 print(s)
#设置字符串型B全局变量的值 setextstring('B','平仓')
希望这篇文章说清楚了这个键值对的神奇容器。
如果你觉得对你有帮助,就来个点赞加分享吧!这可是实打实的原创。
也欢迎你扫码加我微信:guotx-(注明:金字塔),一起交流学习!
补充内容 (2021-11-22 17:01):
标题没写完,误按了回车键,直接就发出去了。 |