A:
说明
在天软编程取数与指标的过程中,我们经常会用到系统参数。
具体系统参数的使用与列表,可查看:FAQ:
Q:天软有哪些系统参数
本节中,主要说明关于在对系统参数的备份与还原中,对于常用的几种方式,哪些是可以通过公用模型还原的,哪些则是不能被直接还原的。
在程序中,我们常在子过程中,需要临时修改系统,而后续又想恢复到调用前的状态,我们一般会采用BackUpSystemParameters2()/with/specAll等进行控制。
对于绝大多数的应用来讲,这些功能是完全可以满足的,如证券代码,周期,当前时间等等。
但是对于一些特别(由特别需求产生)的系统参数,如空记录模式,当前组合等,由于不在备份列表中,所以上面这些备份恢复的手段对它们而言,是无恢复功能的,
具体可查看上面链接中的【是否备份】标识。
另外,类似的,如用户自己定义的系统参数,通过sysparams保存的全局变量,都不具备恢复功能。
其具体表现举例
如,在with中临时设置周期("Cycle")与当前证券序列("CurrentStockArr")的系统参数时,它们在with结束后的一个恢复表现情况:
echo "初始值:",getsysparam("Cycle")," ",tostn(getsysparam("CurrentStockArr"));
with *,array("Cycle":cy_1m(),"CurrentStockArr":array("SZ000002")) do
begin
echo "with中:",getsysparam("Cycle")," ",tostn(getsysparam("CurrentStockArr"));
end
echo "with结束外:",getsysparam("Cycle")," ",tostn(getsysparam("CurrentStockArr"));
return "OK";
运行打印结果如下:
初始值:日线 NIL
with中:1分钟线 array("SZ000002")
with结束外:日线 array("SZ000002")
通过这个结果可以看出,结束后,周期恢复到了初始值的状态,而当前证券列表CurrentStockArr则还保持着在with中改变后的值。
也就是说with方式中,对于"Cycle"系统参数在结束后有恢复操作,而“CurrentStockArr”则没有这个恢复功能。
该种现象同样也表现在BackupSystemParameters2()、BackUpSystemParameters/RestoreSystemParameters、specAll中,且适用范围一致。
那对于这类系统参数,若想不影响上层的应用,如何处理呢?
我们推荐的方式有两种:
一种是,在取数前,若确认与该类系统参数有关,则应该直接设置确定值后,再进行取数,而不是依赖默认值。
第二种是,在特殊场景中使用后,应该在程序return前,重新设置该值为默认值,以便不影响后续程序。
如:在with结束前,将修改过的不在备份序列中的系统参数”CurrentStockArr“进行重新赋值处理
s0:=getsysparam("CurrentStockArr"); //保存在变量中作为备份
echo "初始值:",getsysparam("Cycle")," ",tostn(s0);
with *,array("Cycle":cy_1m(),"CurrentStockArr":array("SZ000002")) do
begin
echo "with中:",getsysparam("Cycle")," ",tostn(getsysparam("CurrentStockArr"));
setsysparam("CurrentStockArr",s0); //恢复到with之前的状态
end
echo "with结束外:",getsysparam("Cycle")," ",tostn(getsysparam("CurrentStockArr"));
return "OK";
打印结果:
初始值:日线 NIL
with中:1分钟线 array("SZ000002")
with结束外:日线 NIL
注:系统参数在提供便利的同时,也会产生一些程序中的不便,我们可以理解它为一个全局变量,用户也可以在程序中利用系统参数,对一些重复计算的中间结果进行缓存,可以有得地提高程序的运行效率。
更多系统参数的用法可参考:FAQ:
2014-06-17-TSL基础-系统参数:系统参数的设置、使用及备份和还原