天软金融分析.NET函数大全 > 数据仓库函数 > 时间序列统计

时间序列统计缓存标志与性能加速    

  • 技术时间序列统计相关函数会自动进行数据缓存以进行加速,例如:
    EMA(Close(),30)在执行的时候,如果存在在Nday或者MA,EMA等序列函数中,每一步计算均会利用前一个交易日计算的缓存。这样效率可以得到大大的提高,但是这个时候产生了一个问题,例如:
    EMA(EMA(Close(),N),30),在这个外围EMA的计算中,由于内层EMA的参数N是不定的,所以外层EMA的缓存无法知道按照什么规则进行缓存,如果直接缓存的话,有可能在N的不同参数的调用时得到错误的结果。这个时候,我们通过给每个时间序列统计函数(CROSS除外)增加了一个可选的参数,即一个缓存的字符串标志。这个字符串标志作用域仅仅用于当前调用的时间序列统计函数,和其他调用的标志定义无关(也就是说可以和其他调用的标志定义重复也可以)。
    这样说起来很拗口,我们可以来一个例子来说明:
     DEA:=EMA(EMA(Close(),Short)-EMA(Close(),Long),M,""$Short$" "$Long);
    这个上述代码是MACD的定义中的一段代码,我们可以看到,对于DEA而言,由于EMA的内还有两个EMA的计算,分别和SHORT参数和LONG参数有关,我们可以将SHORT参数和LONG参数组成一个字符串来作为外层EMA的缓存标志串,这样,当具有缓存的时候,当SHORT和LONG进行了改变,我们不会利用其他参数组存贮的缓存数据来进行EMA的计算,也就是说我们只会用SHORT和LONG相同的计算缓存,这样就避免了缓存错误的问题。
    对于上述的除CROSS函数以外的时间序列统计函数而言,我们均支持在最后增加一个可选的缓存标志串。
    由于缓存会占据存贮空间,而且还因为不会因数据变化而改变而得到不正确的结果,因此缓存仅仅在NDAY以及上述时间序列函数中被打开,在执行完最外层的时间序列统计函数之后缓存会被清除。
    我们有时候会在策略回测多因素模型等开发的时候,希望利用到技术指标加速,但我们又不是使用NDAY等序列函数来提取数据,而是通过循环来提取数据,这个时候,我们需要利用相应的指令来打开这个缓存。有的时候,我们又或许不希望使用缓存。
内容