tjlinjie 发表于 2015-5-29 23:12:26

关于全局变量的建议

随着模型的发展,全局变量500个不够用了,同时,多个策略,先每个策略留一段,但策略改进后,后面发现留少了,结果一个策略在多个段内,程序不易读,又容易错。造成这个情况是全部变量不能由用户自己定义。

目前用GetGlobalVar和SetGlobalVar构建的全局变量,在每个bar时,可以看见其变化过程,明显这些全局变量是用序列变量来实现的,因此,500,占用了很大空间,估计也是你们不愿意继续扩大全局变量数量的原因。

实际上,目前这种GetGlobalVar和SetGlobalVar的全部变量是需要的,但不要那么多,有10到20个够了,只用于调试程序,但程序中需要大量的由用户自己定义的全局变量,这种变量不需要记录中间变化过程,因此,只需要把这个变量值记录下来,在全局可以调用,每个变量只占用几个字节,因此不论定义多少,占用空间极少。
不知道,tb内部是什么机制,开发一般意义上的全局变量那么难。

a894554096 发表于 2015-6-23 17:41:39

a894554096 发表于 2015-6-23 17:42:49

我也深受其害 做了个模型 tm 快气死了 用a函数加全局变量怎么搞都是重复发单

a894554096 发表于 2015-6-23 17:52:09

Params                          
Vars            
       NumericSeries SX;
       NumericSeries DP;
       NumericSeries KP;      



                         //(CurrentTime-A_OrderTime)//平台时间-委托单时间                                       
Begin                     
         
         
   SX=20150701;
If(Date>=SX){setglobalvar(8,81);}   
         Else{setglobalvar(8,80);}      
                        
         if(Getglobalvar(8)==80&&A_BuyPosition==0&&A_SellPosition==0&&(CurrentTime-A_OrderTime)>0.000020)   //赋予初始值
        {setglobalvar(0,0);
     setglobalvar(1,10);
     setglobalvar(2,20);
     setglobalvar(3,30);
     setglobalvar(4,40);
     setglobalvar(5,50);}
         
         
         
If(A_BuyPosition==0&&A_SellPosition==0&&Getglobalvar(0)==0)
   { A_SendOrder(Enum_Buy, Enum_Entry, 1 ,Q_AskPrice );  //多头开仓  
    A_SendOrder(Enum_Sell, Enum_Entry,1 ,Q_BidPrice);    //空头开仓  
         setglobalvar(0,1); }
根本控制不住重复发单  初始值就不知道放在那里才能不被初始化

tuwicn 发表于 2016-7-2 21:42:54

一堆 SetGlobalVar(0,GetGlobalVar(1)) , 原来可以简单的写出 A = B 的,这可读性差太远了,TB再不解决这问题,前途堪忧

wuxyan 发表于 2017-5-13 18:46:50

强烈建议全局变量增加到 5000个。

zz175133 发表于 2021-5-30 09:28:20

tbQ的全局变量好象没有限制为500个了,可以无限多了!哈哈哈

zz175133 发表于 2021-5-30 09:36:45

我刚才试了,tbQ的全局变量,设10万个都没问题了!哈哈哈

zz175133 发表于 2021-5-30 15:56:28

全局变量的作用
1_说变就变,立马变的量;
2_当锁用;
3_名称可以用string来组合;
4_用来记录只运行一次的代码块内的数值,用于代码块外使用;
页: [1]
查看完整版本: 关于全局变量的建议