以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  信号闪烁造成反复开仓  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=161187)

--  作者:skypixel
--  发布时间:2018/1/21 16:21:01
--  信号闪烁造成反复开仓

周五的实盘操作遇到了信号闪烁频繁开仓的问题。

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


--  作者:skypixel
--  发布时间:2018/1/23 10:53:29
--  

没有人答复吗?实盘交易,急!


--  作者:FireScript
--  发布时间:2018/1/23 13:36:05
--  
从代码不能完全判断问题所在,是否有那个时段的交易日志。需要结合下交易日志做下判断。
--  作者:skypixel
--  发布时间:2018/1/23 13:44:19
--  
2018-01-19 14:32:04.180    【图表】RU13 运行完毕
2018-01-19 14:32:04.183    【图表】J13 运行完毕
2018-01-19 14:32:04.186    【图表】I13 运行完毕
2018-01-19 14:32:04.189    【图表】RB13 运行完毕
2018-01-19 14:33:02.188    【图表】RU13 运行完毕
2018-01-19 14:33:02.190    【图表】J13 运行完毕
2018-01-19 14:33:02.191    【图表】框架:Multitrade_V2 触发下单 SELLSHORT 品种 I13 下单K线 2018.01.19 18:33:00 公式:均线交易V1.1 窗格ID:Window6 代码行:47
2018-01-19 14:33:02.194    【图表】下单品种已由 I13 更改为 I05
2018-01-19 14:33:02.196    【图表】模型下单 6
2018-01-19 14:33:02.198    【图表】下单系数调整后 手数:6
2018-01-19 14:33:02.200    【图表】实际持仓 -6
2018-01-19 14:33:02.203    【图表】直接下单
2018-01-19 14:33:02.205    【图表】框架:Multitrade_V2 触发下单 BUY 品种 I13 下单K线 2018.01.19 18:33:00 公式:均线交易V1.1 窗格ID:Window6 代码行:53
2018-01-19 14:33:02.208    【图表】下单品种已由 I13 更改为 I05
2018-01-19 14:33:02.210    【图表】模型下单 6
2018-01-19 14:33:02.212    【图表】下单系数调整后 手数:6
2018-01-19 14:33:02.214    【图表】直接下单
2018-01-19 14:33:02.217    【图表】I13 运行完毕
2018-01-19 14:33:02.219    【图表】RB13 运行完毕
2018-01-19 14:33:02.221    【下单】I05 价540.000000 量6 买卖0 类型0 开平1 账户760xxx Formula 1
2018-01-19 14:33:02.222    【平仓委托计量】6 - 0
2018-01-19 14:33:02.223    【下单】I05 价540.000000 量6 买卖0 类型0 开平0 账户760xxx Formula 1
2018-01-19 14:33:02.224    当前尚有未处理完事件 - 6021
2018-01-19 14:33:02.318    【回报】760xxx : I05 - 正在申报 6 价格:540.0000 平仓 买入
2018-01-19 14:33:02.323    当前尚有未处理完事件 - 6012
2018-01-19 14:33:02.415    【回报】760xxx : I05 全部成交 6 价格:540.0 平 买
2018-01-19 14:33:02.448    【回报】760xxx : I05 - 正在申报 6 价格:540.0000 开仓 买入
2018-01-19 14:33:02.580    【回报】760xxx : I05 全部成交 6 价格:540.0 开 买
2018-01-19 14:34:02.181    【图表】RU13 运行完毕
2018-01-19 14:34:02.182    【图表】J13 运行完毕
2018-01-19 14:34:02.183    【图表】框架:Multitrade_V2 触发下单 SELLSHORT 品种 I13 下单K线 2018.01.19 18:34:00 公式:均线交易V1.1 窗格ID:Window6 代码行:47
2018-01-19 14:34:02.185    【图表】下单品种已由 I13 更改为 I05
2018-01-19 14:34:02.187    【图表】模型下单 6
2018-01-19 14:34:02.189    【图表】下单系数调整后 手数:6
2018-01-19 14:34:02.191    【图表】实际持仓 0
2018-01-19 14:34:02.192    【图表】框架:Multitrade_V2 触发下单 BUY 品种 I13 下单K线 2018.01.19 18:34:00 公式:均线交易V1.1 窗格ID:Window6 代码行:53
2018-01-19 14:34:02.194    【图表】下单品种已由 I13 更改为 I05
2018-01-19 14:34:02.196    【图表】模型下单 6
2018-01-19 14:34:02.197    【图表】下单系数调整后 手数:6
2018-01-19 14:34:02.199    【图表】直接下单
2018-01-19 14:34:02.201    【图表】I13 运行完毕
2018-01-19 14:34:02.202    【图表】RB13 运行完毕
2018-01-19 14:34:02.204    【下单】I05 价540.500000 量6 买卖0 类型0 开平0 账户760xxx Formula 1
2018-01-19 14:34:02.478    【回报】760xxx : I05 - 正在申报 6 价格:540.5000 开仓 买入
2018-01-19 14:34:02.562    【回报】760xxx : I05 全部成交 6 价格:540.5 开 买
2018-01-19 14:35:02.183    【图表】RU13 运行完毕
2018-01-19 14:35:02.185    【图表】J13 运行完毕
2018-01-19 14:35:02.187    【图表】I13 运行完毕
2018-01-19 14:35:02.189    【图表】RB13 运行完毕
2018-01-19 14:36:02.184    【图表】RU13 运行完毕
2018-01-19 14:36:02.186    【图表】J13 运行完毕
2018-01-19 14:36:02.187    【图表】框架:Multitrade_V2 触发下单 SELLSHORT 品种 I13 下单K线 2018.01.19 18:36:00 公式:均线交易V1.1 窗格ID:Window6 代码行:47
2018-01-19 14:36:02.189    【图表】下单品种已由 I13 更改为 I05
2018-01-19 14:36:02.193    【图表】模型下单 6
2018-01-19 14:36:02.197    【图表】下单系数调整后 手数:6
2018-01-19 14:36:02.201    【图表】实际持仓 0
2018-01-19 14:36:02.206    【图表】框架:Multitrade_V2 触发下单 BUY 品种 I13 下单K线 2018.01.19 18:36:00 公式:均线交易V1.1 窗格ID:Window6 代码行:53
2018-01-19 14:36:02.210    【图表】下单品种已由 I13 更改为 I05
2018-01-19 14:36:02.214    【图表】模型下单 6
2018-01-19 14:36:02.218    【图表】下单系数调整后 手数:6
2018-01-19 14:36:02.221    【图表】直接下单
2018-01-19 14:36:02.224    【图表】I13 运行完毕
2018-01-19 14:36:02.226    【图表】RB13 运行完毕
2018-01-19 14:36:02.228    【下单】I05 价541.000000 量6 买卖0 类型0 开平0 账户760xxx Formula 1
2018-01-19 14:36:02.458    【回报】760xxx: I05 - 正在申报 6 价格:541.0000 开仓 买入
2018-01-19 14:36:02.653    【回报】760xxx : I05 全部成交 6 价格:541.0 开 买
2018-01-19 14:37:02.181    【图表】RU13 运行完毕
2018-01-19 14:37:02.183    【图表】I13 运行完毕
2018-01-19 14:37:02.185    【图表】RB13 运行完毕
2018-01-19 14:37:04.183    【图表】J13 运行完毕

--  作者:FireScript
--  发布时间:2018/1/23 14:13:09
--  

虽然不是最佳方式,但是代码实现方式倒是,问下你公式是在什么模式下运行的?序列还是逐K。


--  作者:skypixel
--  发布时间:2018/1/23 14:23:03
--  

逐K线模式。

之前一直用这个公式都没有问题,这是第一次出现。

另外请教下你说的最佳方式是什么?


--  作者:FireScript
--  发布时间:2018/1/23 14:54:08
--  

你的KD1和KK1如果存在闪烁的情况,是有可能导致这个情况的。

具体要看你KD1和KK1怎么写的代码了。 比如小周期引用大周期这种。是有可能会出现历史信号的变动的。如果历史信号变动,可能就会造成当前K再次出现下单信号从而下单了。

 

 


--  作者:skypixel
--  发布时间:2018/1/23 16:27:17
--  

1.我是有小周期引用大周期,但是历史信号怎么会变动呢?我理解历史上的k线是已经定了的值才对啊。

2.就算KD1,KK1闪烁再次发出信号了,我不是用KD_HOLDING1和KK_HOLDING1锁住了吗?比如,一旦开多仓,对应的KD_HOLDING1就会为1, 之后即使KD1再出现也不会发开仓指令了,除非KK1信号触发执行了平仓,这时KD_HOLDING1才会为0,下面再触发KD1信号才会开仓。问题是我的交易记录里面连续开了3次多仓,期间没有平仓。


--  作者:FireScript
--  发布时间:2018/1/23 16:45:12
--  

1.小周期引用大周期存在这样的问题。历史信号是可能会变的。比如最近三个小周期K都在一个大周期下,也就是说这三个小周期引用大的周期的都是同一个大周期的值。这时候即时是历史K的小周期,因为你引用的大周期没走完,它所引用的值还是可能会变化的。

 

2.基于1 的情况。假设在最近三个K上,第一个K走完时的计算结果是要开多仓位,因为闪烁的原因到第二个K走完的时候,计算结果发生变化,第一个K上的信号没了,第二个K上出现开多信号了。这样的结果就是第一个K位置下单了,然后到第二个K位置又会再次下单。  至于你说的用那个变量限制,这种情况下是无法限制的。原因很简单,图表系统和实际账号是单向关系,图表出信号,实际账号下单。实际账号下单之后的情况,对图表系统而言是完全不可见的。只要图表有发出过信号,实际账号就会跟随它下单。

 


--  作者:skypixel
--  发布时间:2018/1/23 17:52:38
--  

1. 我明白你的意思了,不过我引用的大周期,是日线前一天的数据,这个数据和当天的1分钟k线我理解应该是完全无关的。

2. 第2点的解释非常清楚了,多谢!如果出现的闪烁,确实是无法限制的了。但是参考1我觉得不会闪烁,另外我用数据回放验证了一下,确实没有闪烁。

请问还有什么其他可能呢?谢谢