不持久化的基础数据能保留多久?

关联帖子: 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. 公式中定义的非持久化基础变量什么时候才会被清除?

不持久化???
SetDicValue-基础数据指定键名、关联名、时间写入
如何让一个不断更新的基础数据始终只保留一条数据?
使用Global变量和非持久化Dic存储数据时的性能问题 【内存使用很大】
基础数据
基础数据读写
基础数据的查询
关于订阅基础数据参数优化的问题
基础数据问题
基础数据问题

应该是写入的公式停止运行就会清除了

建议做交互处理的都持久化,否则无法溯源

好的,谢谢老师。 我注意到持久化应该是保存到本地的sqlite数据库,会有性能问题,另外在别的帖子里看到如果用了持久化数据分发会是异步的,考虑到一些数据只是为了跨公式共享,能不持久化就不用持久化了。

关联帖子:  https://bbs.tbquant.net/thread/20250124112334529398  

这种情况依旧建议持久化。否则如果遇到意外情况无法溯源