开拓者期货期权程序化系统交易论坛

标题: 网络断开并重联后,全局变量重置的问题?(请nopain释疑) [打印本页]

作者: saji    时间: 2011-3-8 18:02:07     标题: 网络断开并重联后,全局变量重置的问题?(请nopain释疑)

个人认为:全局变量和其它变量一样,是在TB运行时,存储在计算机内存上的数值。
因此,在程序退出后,内存便丢失,全局变量所保存的值也不复存在。
所以,对于隔日引用的数值,需要保存在本地的TBPROFILE数据库中。。。。
但对于,只要求在交易当天(跨BAR引用)使用的数值,用全局变量就可以。

但是论坛这位新管理员lh×××说,网络中断后重联也会引起全局变量的重置,
本人百思不得其解。。。。在这个过程中,TB并未退出运行,因此内存中所保留的数值不会丢失。。。

到底是怎么回事?还是请道行高深的nopain兄证实一下。。。。
有过类似疑问的兄弟,也欢迎拍砖
作者: shanjian    时间: 2011-3-11 16:20:47

个人认为应该不会丢失,否则以TB现在这个断线的频率,全局变量根本没法用
只有在关闭图表之后才会丢

当然,还请专家给出权威答案
作者: nopain    时间: 2011-3-11 17:40:58

断线重连后,全局变量不会自动重置~


断线重连后,会重新获取数据,重算所有的Bar。
很多人的代码会在CurrentBar==0的时候进行全局变量的初始化。
如果这个时候被重新初始化了就会出问题的。

建议只在全局变量的值是无效值,并且CurrentBar==0的时候进行初始化操作。
例子如下:
MyVar0 = GetGlobarVar(0);
if(CurrentBar == 0 && MyVar0==InvalidNumeric)
{
    MyVar0    = 0; // 这里的0是你想要初始化的值
    SetGlobarVar(0,MyVar0);
}

...
作者: futurekiller    时间: 2011-3-12 20:57:59

学习了。
作者: cyansand    时间: 2011-3-12 21:46:50

回复 3# nopain
请问,断链重联之后,是把超级图表中全部bar都算一遍吗?这样会不会比较浪费cpu?如果是这样,看来实时交易的时候只能把bar的样本数量设少些了吧?
作者: shanjian    时间: 2011-3-14 17:08:41

回复 3# nopain


试了一下,即使是第一次运行程序,在bar(0)返回的全局变量值也不是无效值啊,而是0
不知道怎么回事
作者: shanjian    时间: 2011-3-14 17:16:19

回复 6# shanjian

又测试了一下,如果返回一个已经根本没用过的全局变量,倒是N/A

看起来是这个全局变量(例如第0个),如果有任何程序用过,那么即时再重新启动一个超级图标,都不太可能是返回N/A




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2