设为首页收藏本站

 找回密码
 注册
查看: 36974|回复: 43
打印 上一主题 下一主题

能否举例通俗的解释一下 SetGlobalVar和 GetGlobalVar? [复制链接]

初级大户

程序化交易探索者

Rank: 5Rank: 5

精华
2
UID
99
积分
662
帖子
159
主题
42
阅读权限
60
注册时间
2007-8-12
最后登录
2015-6-9
跳转到指定楼层
1#
发表于 2007-8-18 02:13:15 |只看该作者 |倒序浏览
我对编程不熟,对于变量的赋值和局部变量全局变量等东西,理解很粗浅.

我在看老师写海龟交易系统的公式的时候,发现要用到
SetGlobalVar  设置某个索引的全局变量值
GetGlobalVar  获取某个索引的全局变量值


能否请斑竹举个简单的例子,通俗的解释一下 SetGlobalVar和 GetGlobalVar是什么意思?

初级大户

程序化交易探索者

Rank: 5Rank: 5

精华
2
UID
99
积分
662
帖子
159
主题
42
阅读权限
60
注册时间
2007-8-12
最后登录
2015-6-9
2#
发表于 2007-8-18 03:13:09 |只看该作者
在斑竹写的海龟交易系统中,第11楼有这样一段代码:

Begin
        N = XAverage(TrueRange,Length);
        TurtleUnits = (CurrentCapital()*0.01) /(N * BigPointValue());
        TurtleUnits = IntPart(TurtleUnits);
        
        DonchianHi = Highest(Close[1],Length);
        DonchianLo = Lowest(Close[1],Length);
        
        If(CrossOver(High,DonchianHi))
        {
                // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
                myEntryPrice = min(high,DonchianHi + PriceScale*MinMove);
                Buy(TurtleUnits,myEntryPrice);
                IsEntryThisBar = True;
                SetGlobalVar(0,myEntryPrice);                        // 保存第一次开仓的价格

这最后一句为什么要写? 前面不是已经对 myEntryPrice 进行赋值,并保存在变量 myEntryPrice 中了吗?在后面直接引用和重新赋值不就行了吗?为什么还要来一句:
    SetGlobalVar(0,myEntryPrice);                        // 保存第一次开仓的价格

使用道具 举报

初级大户

程序化交易探索者

Rank: 5Rank: 5

精华
2
UID
99
积分
662
帖子
159
主题
42
阅读权限
60
注册时间
2007-8-12
最后登录
2015-6-9
3#
发表于 2007-8-18 03:20:10 |只看该作者
我不是很明白,举例说吧
if(------------)
{
   ------------;
   ------------;
   ------------;
  a = 123;
}
难道在  if 语句后面的大括号里面第一次申明和赋值的变量(例如 变量a)都是属于局部变量吗?离开这个大括号之后就不能引用了吗? 是否使用个SetGlobalVar就把像a这样的局部变量转换为了可以在 其他地方引用的全局变量?

使用道具 举报

初级大户

程序化交易探索者

Rank: 5Rank: 5

精华
2
UID
99
积分
662
帖子
159
主题
42
阅读权限
60
注册时间
2007-8-12
最后登录
2015-6-9
4#
发表于 2007-8-18 03:26:26 |只看该作者
自己找了点资料,请斑竹帮我看下,这个说明是否正确?

局部变量是在只有在“{”和“}”中间定义并起作用的变量,在内存中基本上是一堆栈形式存放的变量,只有程序运行到“{”时出现,离开“}”后消失的变量。
全程变量是定义在“{”和“}”之前的变量,基本上是在整个“{”和“}”之间都起作用的,但是如果在“{”和“}”之间也定义与之相同的变量的话,则程序运行到“{”和“}”之间时用的是在“{”和“}”定义的局部变量
如:
int x;
main()
{
    ...//使用全局变量x
    if(...)
    {
        int x;
        ...;//使用局部变量x
    }
}
程序运行到不同的过程不同的边另起作用
形参是放在函数名后的括号里面的变量,供函数之间传递数值使用。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2007-8-18 09:18:45 |只看该作者
系统目前提供50个全局变量。这50个全局变量附着在超级图表上,即一个图表可以有50个全局变量。您可以通过这些全局变量在技术指标及交易指令中进行数据交换。关掉超级图表之后及全部删除,新建一个超级图表,新建出50个初值为无效值的变量。用户自行通过GetGlobalVar,SetGlobalVar进行保存及获取数据的操作。全局变量不会因为当前Bar的变化而变化。

2楼的意思是:把myEntryPrice这个值存放到第一个全局变量里面,在其他使用的时候可以来取。

您下面的理解都和这个全局变量没有关系。在括号里面写,只是因为属于条件分支的处理代码。

使用道具 举报

Rank: 4

精华
0
UID
568
积分
314
帖子
66
主题
15
阅读权限
50
注册时间
2007-10-19
最后登录
2018-4-13
6#
发表于 2007-10-20 10:23:47 |只看该作者
好贴,好好学习!!!!!!

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
377
积分
1827
帖子
222
主题
29
阅读权限
70
注册时间
2007-9-19
最后登录
2021-12-9
7#
发表于 2007-11-30 15:39:34 |只看该作者
有点明白了。谢谢啦

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
8#
发表于 2007-12-1 10:19:50 |只看该作者
其实很理解的,局部变量是只在一个K线上起作用的变量,出了这根K线,又变回初值了,如果有其他赋值条件,又装下新的值了,再出了这根K线,又变回初值了,如果有其他赋值条件,又装下新的值了,再出了这根K线,又变回初值了,如果有其他赋值条件,又装下新的值了,再出了这根K线,又变回初值了,如果有其他赋值条件,又装下新的值了,再出了这根K线,又变回初值了。。。。。。
而全局变量,就是系统本身只定义了一个GlobalVar全局变量(其他语言中是可以由用户定义的),这个全局变量一共有0到50共51个存储位置,你希望在第一个位置放进一个数据(在本软件中一般放下的是静态数据,不因K线的移动而改变),就用setglobalvar(0,你的数),放进第二个数又不希望覆盖第一个,就用setglobalvar(1,你的数),最多能放下共51个静态数据;然后是引用这些数据了,就用getglobalvar(存储位置)等等,这个全局变量最起码是生存于当前的程序模块中,比如用户函数、技术指标、K形态、特征走势、交易指令中。以上是我个人的理解。
但我同样有疑惑,就是这个全局变量最大生存级别是什么,即到什么程度数据才被初始化,如果是退出交易者软件平台时才被初始化的话,那么两个以上的程序模块就可以调用这个全局变量的值了,也即要进行一个帐户交易多个商品的设想,就很有可能有点突破口了。
TradeBlazer交流群33647992。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
9#
发表于 2007-12-1 10:39:41 |只看该作者

补充点,说错了

上面第一段的解释是指series序列变量,如果是没有series的定义的,装的是静态数据(不随K的移动的改变),这两种定义就是所谓的局部变量,其生存期是在当前运行的程序模块中(一个程序模块是指只有一次参数、变量声明的程序块).
由此推断,全局变量的生存期肯定比局部变量高一级,即各程序模块间是可以读取全局变量中的数的,不知对不对,由nopain最后解释吧.
TradeBlazer交流群33647992。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
10#
发表于 2007-12-1 13:53:20 |只看该作者
可惜,看了nopain的5楼回帖,全局变量的存活级别是一个超级图表(应用于这个超级图表的所有技术指标或交易指令都可以读取全局变量中的数,其他的图表就不能跨图读取了),这就意味着一个帐户管理多个品种在这里是行不通的。
在海龟交易中,如果有加仓操作,当然需要一个全局变量来存储每一次开仓价(因为随着条件的反复出现,myEntryprice是被赋了新的值的),如果没有加仓操作,即每一次开仓接着下一步只有平仓,那么就没有用全局变量的必要了。
TradeBlazer交流群33647992。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-30 21:36

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部