策略中使用 Sellshort 开空后,无论使用哪种写法的平空命令,空单都无法被平仓

好,我在使用TBQuant 1.4.4.6版本开发量化策略时,遇到做空平仓命令无法执行的问题,请帮助确认。【问题描述】策略中使用 Sellshort 开空后,无论使用哪种写法的平空命令,空单都无法被平仓。回测结果显示空单从头持仓到回测结束,没有任何平仓记录。【已测试的四种写法,全部失败】1. Buytocover(lots, Close)2. BuyToCover(lots, Close)3. Sell(lots, Close)4. Sell(-lots, Close)【最简测试代码】Params Numeric TestLots(1);Vars Global Numeric vLastDate(0); Global Numeric vTested(0); Global Numeric vOpenBar(0);Events OnBar(ArrayRef<Integer> indexs) { Numeric nCurPos; nCurPos = MarketPosition * CurrentContracts; Numeric nCurTime; nCurTime = Hour * 100 + Minute; If(Date <> vLastDate) { vLastDate = Date; vTested = 0; vOpenBar = 0; } If(nCurPos == 0 And vTested == 0 And nCurTime == 930) { Sellshort(TestLots, Close); vTested = 1; vOpenBar = CurrentBar; } If(nCurPos < 0 And vOpenBar > 0 And CurrentBar - vOpenBar >= 5) { Buytocover(TestLots, Close); // 四种写法都试过,均失败 vOpenBar = 0; } }【回测参数】品种:TA888(郑州PTA主力)周期:5分钟时间:2024-01-01 至 2024-06-30资金:100万【回测结果】只有1笔交易(开空),空单持仓到回测结束从未平仓。理论上应该有约100笔开空+平空配对。【我的问题】1. 在TBQuant 1.4.4.6中,做空平仓的正确函数名是什么?2. 策略单元创建时是否需要特殊设置才能支持做空?3. 是否有完整的做空策略示例代码可以参考?请帮助解答,谢谢!

我问了AI 没有用啊, 就是不能平空单,你能给我指点下吗

回复:视频区有学习资料。零基础课程里有模型开发相关或者社区置顶看一下收费代编

函数名正确,不需要特殊设置。那问题很可能就出在 Global 变量上。为什么我用了 Global(以及为什么可能有问题)我当时的理由:Global Numeric vLastDate(0);Global 的意思是"跨Bar持久化"——变量值在每根K线之间保留不会重置。我用它来记录"今天是否已经开仓"。但问题在于:TBQuant里 Global 变量在整个策略生命周期只初始化一次,有时会和平台内部状态产生冲突,尤其是涉及持仓判断时行为不可预期。正确写法应该用 Series<Numeric>:// Global(可能有问题) Global Numeric vLastDate(0); // Series(更安全,每根K线都有自己的值,但也能访问前一根) Series<Numeric> vLastDate(0);立刻重写测试策略,去掉所有 Global:Ran a command, read a fileRan a command, read a filev5发送完毕。核心改动之前(可能有问题)v5(修复版)变量类型Global NumericSeries<Numeric>跨Bar读取隐式显式用 [1] 读上一根初始化只初始化一次每根K线明确赋值Series<Numeric> 的用法:vTested = vTested[1]; // 读取上一根K线的值(保持状态) vTested[1] // 上一根 vTested[2] // 两根前这正是TBQuant里所有策略状态变量的标准写法,包括官方示例里的写法。

回复:......ai写的代码不分析有问题问ai

能否把做空的策略库发我看看,或者发点代码,做空可以,但平空不能

1. 在TBQuant 1.4.4.6中,做空平仓的正确函数名是什么?buytocover2. 策略单元创建时是否需要特殊设置才能支持做空?不需要3. 是否有完整的做空策略示例代码可以参考?平台的策略库里至少有二十个做空的策略可以参考大概我觉得就是你定义的三个变量,为什么是global?我不明白,请说明一下这么定义的理由