以文本方式查看主题

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

--  作者:skylands
--  发布时间:2014/11/21 13:21:00
--  重复开仓
我有两个独立的开仓条件,某根K线里两个条件先后满足了,然后在同一根K线内重复开仓了,但开仓的条件判断里有holding=0才开仓的,而图表上显示持仓仍是1手。理论上同根K线里不应重复开仓的啊,是不是?求解答。

sellshort(开多信号1 and holding<0,holding,limitr,open+mindiff*1),ORDERQUEUE;
buy(开多信号1 and holding=0,1,limitr,open+mindiff*1),ORDERQUEUE;

sellshort(开多信号2 and holding<0,holding,limitr,open+mindiff*1),ORDERQUEUE;
buy(开多信号2 and holding=0,1,limitr,open+mindiff*1),ORDERQUEUE;

--  作者:yukizzc
--  发布时间:2014/11/21 13:33:57
--  

代码顺序问题,比如你上面如果开多信号2满足了,然后开多信号1也满足

此时因为开多1在前面所以其实holding还是=0的。

 


--  作者:skylands
--  发布时间:2014/11/21 14:56:01
--  
但图表显示持仓为1手,这样就会导致虚拟和实际持仓不一致……这不麻烦了么,有什么办法解决这个问题?
--  作者:yukizzc
--  发布时间:2014/11/21 15:07:08
--  

你从哪里看到图表持仓是1手的,看下当时图表上有几个信号?

另外你的开仓条件是否有闪烁,比如开仓1满足了,过了不久这个信号消失,开仓2又满足了。这种情况是会开2次仓的


--  作者:skylands
--  发布时间:2014/11/21 15:13:16
--  
图表显示就是k线图上啊,有holding输出显示虚拟持仓的。当时图表上就只有一个信号,确定没有信号闪烁,我一直盯着的。
--  作者:yukizzc
--  发布时间:2014/11/21 15:32:42
--  

ho:holding;
buy(c>o,1,market);
   //自己去看下第一根开仓语句的输出ho值,代码顺序是从上到下。你后面的开仓语句是不会影响前面的持仓的。

 

你或者在开仓语句各自加上一个

buy(开多信号1 and holding=0 and not(开多信号2),1,limitr,open+mindiff*1),ORDERQUEUE;               //这样如果开多2成立,那么第一条开仓也不会执行

--  作者:skylands
--  发布时间:2014/11/21 17:53:49
--  
诚如所言,确是第二个开仓语句先触发的,然后很快在同一根k线内第一个开仓语句也触发了。“后面的开仓语句不会影响前面的持仓”,这是我以前没有想到的。
你的建议是,第一个开仓语句中加not(开多信号2),第二个开仓语句中加not(开多信号1),就能避免重复开仓了?

--  作者:FexTel
--  发布时间:2014/11/21 23:20:17
--  
cond1:开多信号1 OR 开多信号2;
sellshort(COND2 and holding<0,holding,limitr,open+mindiff*1),ORDERQUEUE;
buy(COND1 and holding=0,1,limitr,open+mindiff*1),ORDERQUEUE;

 

--  作者:skylands
--  发布时间:2014/11/22 14:02:16
--  
哪来的COND2?是不是笔误?
能理解,但实践中这样行不通。因为我的模型两个开多信号时完全不同的,下单语句并不一样,并非都是limitr,open+mindiff这么简单。
上面yukizzc的加not限制之解答是否可行?

--  作者:yukizzc
--  发布时间:2014/11/22 23:35:45
--  

buy(开多信号1 and holding=0 and not(开多信号2),1,limitr,open+mindiff*1),ORDERQUEUE;

buy(开多信号2 and holding=0,1,limitr,open+mindiff*1),ORDERQUEUE;            
 
如果开多信号1成立,那么holding=1了下面开仓语句不会去执行。如果开多信号2成立那么由于not(开多信号2)的存在第一条开仓语句不会执行。