不知道谁设的D J还成了敏感字了,不能直接复制到这代码请看附件
https://www.bilibili.com/video/BV1MN4y1d7Yg/?spm_id_from=333.999.0.0
我觉得你与其浪费时间在这里发帖,还不如1.5倍速把状态变量,计数器,甚至前面的数据类型结构的视频看一遍,就没有疑问了。
而且global不是全局变量吗,是在整个程序里面都会一直保持的量,除了我们自己去改变他的数值他是不会变的这样的变量怎么会闪烁呢
历史的bar上onbar只驱动执行一次,当然不会变化
但是实时bar上,是每tick执行一次的。
一分钟的k线,会执行120次。
第一次满足了,第二次不满足,那不就消失了么
先把零基础学习好,把这种基础常识确认了再来问问题。
这次输出截图,
你看他不是一直是一个信号吗
买卖信号为0表示这个BAR没有买卖信号,为1是表示有一个开多仓,为-1表示有一个开空仓,你看这信号不是一直没变吗,怎么就闪烁了呢
应为duochang是用来记录多仓是不是已经开仓的,如果开仓了就不能再开仓了,不然实盘会一直开仓啊,这样就能保证实盘的时候不会多次开仓并且一个bar中只开仓一次,这样就没有闪烁啊,如果多次开仓那样才会闪烁啊,闪烁不就是多次开仓吗
你对机制的理解,听上去很正确,很多TB初学者也大多会这么理解,这个很正常。但是因为TB公式运行有一个很特殊的点,那就是历史回测和实盘交易是合二为一的。也就是策略既要考虑实盘也要考虑历史回测。那你试想一下,实盘时一根K线是不是每次数据更新了,都得处理,如果上一个tick按照策略应该有个开仓信号,下个tick判断,就不出信号了,那这么一直运行,这根K线上信号就没有了,当这根K线走完了,成为历史了,信号不也就没有了,这跟实际结果肯定就不一致了。当然这个整套机制,这个只是其中一小部分,每个处理都有道理的。这个就需要慢慢去体会了
你用global类型的容器来作为信号的判断条件?这样写不是本来就很容易信号闪烁的吗
不会啊,这个全局容器也加到条件里了,每个BAR只改一次,只有到OnBarClose(ArrayRef<Integer> indexs)
{
//用户业务逻辑
buysellshs=0;
jscs=0;
ksjs=0;
sellshs=0;
}才会清零,我实盘试确实是每个BAR只出一个信号,控制台可的到到只有一个位号,但是软件他还是判定说有闪烁所以我就行迷惑,不信你可以用这个试一下实盘的输出你看一下就知道了
代码没对齐,还有很多不知道意义的代码,分析问题和整理格式的时候就浪费了很多时间。
但是总体来说,还是global类型的问题
duochang这个变量肯定是闪烁的,你自己输出看看吧,你上面那个我回复我看不懂什么意思,这个global的duochang上一tick满足,执行完buy你立马就改掉值,那下个tick不就不满足条件信号消失了吗?这不是非常显而易见的吗?
如果你对不同类型的数据结构机制不是那么清楚,建议把零基础课程里关于tb特色数据结构机制的部分先学习一下