在学习TBQuant3编程的时候,我遇到了一个问题:
以下是一段案例教学中的内容,是一个日内交易策略的平仓逻辑,策略要求当日收盘前必须平仓:
If( ( Date[-1] != InvalidInteger && Date != Date[-1] ) || ( Date[-1] == InvalidInteger && Date < CurrentDate ) )
{
Sell( 1 , Close ) ;
Buy( 1 , Close ) ;
}
我的疑问是:
1、If条件的第二部分是什么意思?
2、Date[-1]在什么情况下会等于无效值?
3、Date在什么情况下会小于CurrentDate ?
1 如果后一根bar的时间是无效值,并且,当根bar的日期小于本地日期。
2 一般是图表里最后一根bar的时候,没有下一根bar
3 这种情况很多啊,今天是2025年7月10号,那代码执行到今天以前的任何一天,date都会小于currentdate啊
忘了说了![-1]这种写法是上古时代的语法了,早就已经取消了
👍
原来是上古写法,哈哈哈。谢谢老师的解答,感谢
颇尴尬🤣
If( ( Date[-1] != InvalidInteger && Date != Date[-1] ) || ( Date[-1] == InvalidInteger && Date < CurrentDate ) )
只有这一段代码
不知道你看的范例的上下文具体啥场景
第一个条件
不是数据源第一个bar 且 当前bar和前一个bar是不同交易日
要么没考虑夜盘
要么夜盘也清仓
第二个条件
数据源只有一个bar:要么是数据源第一根bar,要么只订阅了一个bar 且 历史bar
两个条件满足一个
先平多单
再开多单
根据你表达的收盘前一定平仓
没看明白这个操作
应该不是官方的范例吧
我学习的案例如下方链接,是一个微信的公众号分享的教学策略,仅供教学使用:
Date[-1]是后一个Bar的交易日期,而不是前一个Bar的交易日期。
前一个Bar的交易日期是:Date[1]
非常抱歉
date[1]、date[-1]是我搞错了
第一个条件就是
中间bar 且 夜盘清仓
或
第二个条件
最后一个bar 且周末或放假期间?
这段代码有夜盘的bug
也不适合回放模式
等老师回复吧
他是在当前时点回溯历史数据
用于测试策略逻辑和收益情况
并用了向后取值的未来函数
回放模拟的是实时状态
还是按照正常的方式编码
即可回溯
也可交易
还能回放测试
date[-1]这种写法实际上已经取消了
👌
昨晚直接被搞懵了。。。
1 夜盘
2 只订阅了一个bar
3 今天视角下的昨天夜盘
我这边在历史行情回访的模拟实时数据测试的时候发现,不论日盘还是夜盘,最新一根bar上的Date[-1]的取值都是一个很大的Integer,但不是无效值,并且Date一直都等于CurrentDate。另外,策略肯定是要求加载到超过一根bar的行情上
无效值就是很大的值
你说的情况不可能
CurrentDate 是当前时间
Date[-1]是前一个Bar的交易日期
无效值就是很大的值
最新一个Bar的Date
在当前视角
如果是当天就相等
比如凌晨0点后 到 夜里24点前 是相等的
明天白天bar的Date和CurrentDate就是20250710
今天夜盘bar的Date就是20250709
黄金白银原油会跨日
Date[0]/Date[-X]根据bar动态的
CurrentDate永远是电脑最新的日期
Date[-1]是后一个Bar的交易日期,
Date[1]是前一个Bar的交易日期。
无效值InvalidInteger 我print出来、或者commentary出来,结果是N/A。
最新一根bar上的Date[-1]的取值是个能够正常print出来、或者commentary出来的很大的Integer,不会显示N/A。
CurrentDate在历史行情回访的模拟实时数据测试的时候,print出来就会是历史上的电脑日期,而不是真实的电脑日期
回放当然是当时的电脑时期
这都是相对的概念
回放相当于实时行情
最后一个bar的date 当然等于 currentdate
时点不同
视角也不同
是相对的的关系
回放相当于实时行情
最后一个bar的date 当然等于 currentdate
时点不同
视角也不同
是相对的的关系