金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1585|回复: 0

PEL

[复制链接]

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
发表于 2021-11-22 16:58 | 显示全部楼层 |阅读模式

工具菜单上那个全局变量,是一个存储容器,存储的变量分为数值型和字符串型,是键值对形式的,类似于字典,这些全局变量在整个金字塔策略中都是共用的,包括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):
标题没写完,误按了回车键,直接就发出去了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-11-16 06:29 , Processed in 0.282627 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表