以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [求助]为什么偶尔会有两次重复平仓  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=160165)

--  作者:a100016259
--  发布时间:2017/12/5 16:31:02
--  [求助]为什么偶尔会有两次重复平仓
大家有碰到这种偶尔会两次平仓的不,确认只触发了一次开仓?

我是采用固定间隔时间刷新的方式


代码方面 大概如下:
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171205162723.png
图片点击可在新窗口打开查看

VARIABLE : buying    := 0;

......

IF buying =  5 AND in_buying_kline=0 THEN
BEGIN
LOSS := IFELSE((buy_price-HIGH)>max_loss,1,0);
IF LOSS=1 THEN
BEGIN
buying :=0;
SELL(1,1,MARKET);
DRAWTEXT(1,CLOSE,\'止损\'),colorred;
END;
END;

--  作者:FireScript
--  发布时间:2017/12/5 16:36:20
--  
你帖下交易日志。日志里面会记录的很详细的。
--  作者:a100016259
--  发布时间:2017/12/5 16:42:08
--  
2017-12-05 13:00:10.640    2017.12.05 13:00:10【图表】框架:duo_ce_lue 触发下单 SELL 品种 GC02 下单K线 2017.12.05 06:03:00 公式:黄金.逐笔.分时线.刷多一.1116 窗格ID:Window9 代码行:297
2017-12-05 13:00:10.656    【图表】模型下单 1
2017-12-05 13:00:10.656    【图表】下单系数调整后 手数:1
2017-12-05 13:00:10.656    【图表】实际持仓 2
2017-12-05 13:00:10.656    【图表】直接下单
2017-12-05 13:00:10.656    【图表】GC02 运行完毕
2017-12-05 13:00:10.656    【下单】GC02 价0.000000 量1 买卖1 类型1 开平1 账户70004210 Formula 1
2017-12-05 13:00:10.656    【下单】已提交,订单ID :176
2017-12-05 13:00:10.687    【指令】收到回报指令 ID = 176
2017-12-05 13:00:10.687    【回报】70004210 : GC02 - 已报单 1 价格:0.0 平 卖
2017-12-05 13:00:10.875    【指令】收到成交回报指令 ORDERID = 176
2017-12-05 13:00:10.875    【指令】平仓计量 EBuy:0 ESell:0
2017-12-05 13:00:10.890    【回报】70004210 : GC1802 - 已成交 1 价格:1277.0 平 卖
2017-12-05 13:00:10.890    【回报】70004210 : GC1802 - 全部成交 1
2017-12-05 13:00:10.890    【指令】收到回报指令 ID = 176

.............................

2017-12-05 13:09:07.640    2017.12.05 13:09:07【图表】框架:duo_ce_lue 触发下单 SELL 品种 GC02 下单K线 2017.12.05 06:12:00 公式:黄金.逐笔.分时线.刷多一.1116 窗格ID:Window9 代码行:297
2017-12-05 13:09:07.640    【图表】模型下单 1
2017-12-05 13:09:07.640    【图表】下单系数调整后 手数:1
2017-12-05 13:09:07.640    【图表】实际持仓 1
2017-12-05 13:09:07.640    【图表】直接下单
2017-12-05 13:09:07.640    【图表】GC02 运行完毕
2017-12-05 13:09:07.640    【下单】GC02 价0.000000 量1 买卖1 类型1 开平1 账户70004210 Formula 1
2017-12-05 13:09:07.640    【下单】已提交,订单ID :177
2017-12-05 13:09:07.656    【指令】收到回报指令 ID = 177
2017-12-05 13:09:07.671    【回报】70004210 : GC02 - 已报单 1 价格:0.0 平 卖
2017-12-05 13:09:07.796    【指令】收到成交回报指令 ORDERID = 177
2017-12-05 13:09:07.796    【指令】平仓计量 EBuy:0 ESell:0
2017-12-05 13:09:07.812    【回报】70004210 : GC1802 - 已成交 1 价格:1277.0 平 卖
2017-12-05 13:09:07.812    【回报】70004210 : GC1802 - 全部成交 1
2017-12-05 13:09:07.812    【指令】收到回报指令 ID = 177

--  作者:a100016259
--  发布时间:2017/12/5 16:43:52
--  
比较疑惑的是 我通过 buying 控制不重复进行平仓,都在一个 IF 的控制范围内了..

对了,我是开了框架,同时一个账号跑几个策略
--  作者:FireScript
--  发布时间:2017/12/5 17:17:29
--  

你运行的是什么周期的?你这个应该是出现过信号闪烁了导致的重复下单。固定轮询是有这样的问题的。


--  作者:a100016259
--  发布时间:2017/12/6 7:59:03
--  
3分钟周期

我通过全局变量 buying 控制,只有买入信号和卖出信号都会触发相应值改变。

信号闪烁一般是在同一个周期内,我这两个卖出信号相隔9分钟,间隔三个周期了。

现在比较大可能是 IF 语句内,buying 值未被改变为 0 ,
因为buying =5 我代码里只有买入信号发生的时候才会成立,不太像buying 重新被赋值为 5


--  作者:wenarm
--  发布时间:2017/12/6 8:46:39
--  

闪烁和其k线间隔没有必然关系,第一出现平多动作是在k线中触发的,然后当这根k走完时,有于闪烁,(比如用的close这种)就能造成在走完时信号又回来了,

自然存在后面再次触发是再平一次。

建议你从自己的条件入手,如果有疑问,可以配合debugfile进行跟踪调试输出,它能很好反应出当时的触发状态事,各项得输出条件的结果。

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=49428

或者你贴出完整的代码给我们分析