【咨询】关于用户函数的如下实现是否合法?
我的需求是尽量减少策略中的变量和逻辑数量, 将和独立因子相关的变量和操作尽量封装在一个独立的用户函数里面。在文档中没有找到相关的详细说明, 于是试了一下:用户函数(getVal):Vars Series<Numeric> val; Begin // 简化演示, 当前的收盘价作为最新的Val数值, 具体实现中可能是MA\标准差或者其他更复杂的逻辑 val = Close; // 返回用户函数内部存储的变量前一个数值, 这里就是前一天的收盘价 Return val[1]; End策略:Params Vars Series<Numeric> lastVal; Events OnBar(ArrayRef<Integer> indexs) { Numeric lastVal= getVal(); PlotNumeric("lastVal", lastVal); }从结果看, 确实图表输出了上一个收盘价。但是从一般编程语言习惯思考,getVal()中的 Series<Numeric> val似乎是一个函数内部的局部变量。这种使用方式似乎在编程语言一般习惯上是错误的。但是结果却是正确的。如果这种调用是对的,似乎是用户函数中的序列变量绑定到了Bar上面,每个Bar对于每次用户函数调用使用和策略内相同的变量存储逻辑。所以问题如下:1。 请问这种做法是合法的吗?还是一种类似于未定义的行为?2。 能否麻烦提供定义序列变量在用户函数中作为Vars的合法使用方式文档( 用户函数的文档: https://tbq3.tbquant.net/helper?product_id=991&keyword=440&content_id=262&selectedkey=3827&type=article , 没有看到关于这种用法的特别说明. )谢谢