周五的实盘操作遇到了信号闪烁频繁开仓的问题。
1. 代码如下. KD1是多信号,KK1是空信号。用两个变量KD_HOLDING1和KK_HOLDING1来同步记录仓位状态,避免反复开仓。逻辑是:比如KD1满足条件的话,会开
仓,紧接着就把KD_HOLDING1置成1。除非是KK1信号产生,平仓之后才把KD_HOLDING1复位为0,在此之前,因为KD_HOLDING1为0,即使再产生KD1的开多信号,也
不会开仓。
实际是,周五的时候,我在矿石上连续在14:33,14:34,14:36买入开仓,期间没有平仓。
2. 我用的是1分钟,走完k线的交易模式。
请问各位大拿,我的代码有问题吗?为什么会出现信号闪烁。
VARIABLE:KD_HOLDING1=0,KK_HOLDING1=0; //多空持仓
。。。
IF KD1 then
BEGIN
IF KK_ENABLE THEN BEGIN
IF KK_HOLDING1=1 THEN BEGIN
平空:SELLSHORT(1,交易手数1,THISCLOSE); //平空信号
KK_HOLDING1:=0;
END
END
IF KD_ENABLE THEN BEGIN
IF KD_HOLDING1=0 THEN BEGIN
开多:BUY(1,交易手数1,THISCLOSE); //开多信号
KD_HOLDING1:=1;
END
END
END
IF KK1 then
BEGIN
IF KD_ENABLE THEN BEGIN
IF KD_HOLDING1=1 THEN BEGIN
平多:SELL(1,交易手数1,THISCLOSE); //平多信号
KD_HOLDING1:=0;
END
END
IF KK_ENABLE THEN BEGIN
IF KK_HOLDING1=0 THEN BEGIN
开空:BUYSHORT(1,交易手数1,THISCLOSE); //开空信号
KK_HOLDING1:=1;
END
END
END
没有人答复吗?实盘交易,急!
虽然不是最佳方式,但是代码实现方式倒是,问下你公式是在什么模式下运行的?序列还是逐K。
逐K线模式。
之前一直用这个公式都没有问题,这是第一次出现。
另外请教下你说的最佳方式是什么?
你的KD1和KK1如果存在闪烁的情况,是有可能导致这个情况的。
具体要看你KD1和KK1怎么写的代码了。 比如小周期引用大周期这种。是有可能会出现历史信号的变动的。如果历史信号变动,可能就会造成当前K再次出现下单信号从而下单了。
1.我是有小周期引用大周期,但是历史信号怎么会变动呢?我理解历史上的k线是已经定了的值才对啊。
2.就算KD1,KK1闪烁再次发出信号了,我不是用KD_HOLDING1和KK_HOLDING1锁住了吗?比如,一旦开多仓,对应的KD_HOLDING1就会为1, 之后即使KD1再出现也不会发开仓指令了,除非KK1信号触发执行了平仓,这时KD_HOLDING1才会为0,下面再触发KD1信号才会开仓。问题是我的交易记录里面连续开了3次多仓,期间没有平仓。
1.小周期引用大周期存在这样的问题。历史信号是可能会变的。比如最近三个小周期K都在一个大周期下,也就是说这三个小周期引用大的周期的都是同一个大周期的值。这时候即时是历史K的小周期,因为你引用的大周期没走完,它所引用的值还是可能会变化的。
2.基于1 的情况。假设在最近三个K上,第一个K走完时的计算结果是要开多仓位,因为闪烁的原因到第二个K走完的时候,计算结果发生变化,第一个K上的信号没了,第二个K上出现开多信号了。这样的结果就是第一个K位置下单了,然后到第二个K位置又会再次下单。 至于你说的用那个变量限制,这种情况下是无法限制的。原因很简单,图表系统和实际账号是单向关系,图表出信号,实际账号下单。实际账号下单之后的情况,对图表系统而言是完全不可见的。只要图表有发出过信号,实际账号就会跟随它下单。
1. 我明白你的意思了,不过我引用的大周期,是日线前一天的数据,这个数据和当天的1分钟k线我理解应该是完全无关的。
2. 第2点的解释非常清楚了,多谢!如果出现的闪烁,确实是无法限制的了。但是参考1我觉得不会闪烁,另外我用数据回放验证了一下,确实没有闪烁。
请问还有什么其他可能呢?谢谢