关联帖子: https://bbs.tbquant.net/thread/20250123231744525985
之前看论坛里相关的帖子里老师的回复,以为不持久化的基础数据要等到软件重新启动才会清除,自己动手试了一下,有点迷惑
代码说明:
写了两个策略公式,分别运行在两个图表上,一个负责更新基础数据变量,一个负责读取基础变量值
负责更新基础数据变量的公式每隔2秒更新一次,一共更新5次,然后调用Stop函数,代码如下:
Vars
Dic<Array<Numeric>> myDic("My_Test_Dic", False, "mytarget2");
Global Array<Numeric> arr;
Global Integer counter(0);
Defs
Events
OnInit()
{
PrintClear();
}
OnReady()
{
CreateTimer(2 * 1000, 0, 5);
}
OnTimer(Integer Id, Integer millSecs)
{
counter = counter + 1;
ArrayPushBack(arr, counter);
myDic = arr;
Print("#" + Text(counter) + " -> " + TextArray(myDic));
If(counter == 5)
{
Print("Begin Stop");
Stop();
Print("EndStop");
}
}
负责读取基础数据变量的公式每隔2秒读取一次,一共读取10次,代码如下:
Vars
Dic<Array<Numeric>> myDic("My_Test_Dic", False, "mytarget2");
Global Integer counter(0);
Defs
Events
OnInit()
{
PrintClear();
}
OnReady()
{
CreateTimer(2 * 1000, 0, 10);
}
OnTimer(Integer Id, Integer millSecs)
{
counter = counter + 1;
Print("#" + Text(counter) + " -> " + TextArray(myDic));
}
观察到的现象:
#1 先启动基础数据更新公式,一段时间后再启动数据读取公式,发现即使更新公式停止了,读取公式依然可以正常读取
#2 先启动更新公式,一段时间后再启动读取公式,然后刷新更新公式,发现读取公式显示的数据与更新公式变化一致
#3 先启动更新公式,再启动读取公式,如#1待更新公式运行完,再刷新读取公式,此时读取数据均为空(看截图)
我的问题是:
#A. 同样是更新公式停止,为什么在#1中依然可以读取基础变量,而在#3中就没有了?
#B. 公式中定义的非持久化基础变量什么时候才会被清除?
应该是写入的公式停止运行就会清除了
建议做交互处理的都持久化,否则无法溯源
好的,谢谢老师。 我注意到持久化应该是保存到本地的sqlite数据库,会有性能问题,另外在别的帖子里看到如果用了持久化数据分发会是异步的,考虑到一些数据只是为了跨公式共享,能不持久化就不用持久化了。
这种情况依旧建议持久化。否则如果遇到意外情况无法溯源