关于全局变量的建议
随着模型的发展,全局变量500个不够用了,同时,多个策略,先每个策略留一段,但策略改进后,后面发现留少了,结果一个策略在多个段内,程序不易读,又容易错。造成这个情况是全部变量不能由用户自己定义。目前用GetGlobalVar和SetGlobalVar构建的全局变量,在每个bar时,可以看见其变化过程,明显这些全局变量是用序列变量来实现的,因此,500,占用了很大空间,估计也是你们不愿意继续扩大全局变量数量的原因。
实际上,目前这种GetGlobalVar和SetGlobalVar的全部变量是需要的,但不要那么多,有10到20个够了,只用于调试程序,但程序中需要大量的由用户自己定义的全局变量,这种变量不需要记录中间变化过程,因此,只需要把这个变量值记录下来,在全局可以调用,每个变量只占用几个字节,因此不论定义多少,占用空间极少。
不知道,tb内部是什么机制,开发一般意义上的全局变量那么难。
顶 我也深受其害 做了个模型 tm 快气死了 用a函数加全局变量怎么搞都是重复发单
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); }
根本控制不住重复发单 初始值就不知道放在那里才能不被初始化 一堆 SetGlobalVar(0,GetGlobalVar(1)) , 原来可以简单的写出 A = B 的,这可读性差太远了,TB再不解决这问题,前途堪忧 强烈建议全局变量增加到 5000个。 tbQ的全局变量好象没有限制为500个了,可以无限多了!哈哈哈 我刚才试了,tbQ的全局变量,设10万个都没问题了!哈哈哈 全局变量的作用
1_说变就变,立马变的量;
2_当锁用;
3_名称可以用string来组合;
4_用来记录只运行一次的代码块内的数值,用于代码块外使用;
页:
[1]