以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  走完K线模式下,每天的最后一根K线有开平仓信号如何处理?  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=4469)

--  作者:pancg
--  发布时间:2010/12/18 0:05:50
--  走完K线模式下,每天的最后一根K线有开平仓信号如何处理?

      如果我的系统是基于30分钟周期的,而且是做的收盘价。

      在走完K线模式下,盘中的其它时间都问题不大,K线一走完就在下个K线的刚开始时发出单成交,基本和前个K线的收盘价差不多,滑移价差不大。

问题是:在日收盘(15:00),也就是在当天的最后一根K线发出开平仓信号时,如果等它走完,发出的单就是废单。我实盘测试了,根本就没有单发出,而是第二天一开盘8:59才发的。

      大家都知道,这根线在一天中却是最重要的,因为有可能面临的是第二天的大幅跳空。

      所以我想问,这种情况如何解决?

      如果临收盘时用手工操作,确实可以做,但对于全自动交易来说总有点不足;是否可以写一个IF语句来判断如果最后一根K线有开平仓信号,在

14:59:50发出开平仓单,使其尽量接近收盘价。


--  作者:王锋
--  发布时间:2010/12/18 10:15:00
--  

这种情况,建议你做两套公式。并在后台程式化交易里执行。

一套公式是正常的自动交易。K线走完模式

二套也是前面一样的公式,但是需要运行在固定轮询模式,开平仓条件代码都需要加上CURRENTTIME>=14:59:00这样的条件限制,保证最后的时刻能在出现信号后及时出现动作。

为了防止第一套公式出现第二天重复开仓,你也可以加上CURRENTTIME>=09:01:00这样的条件


--  作者:pancg
--  发布时间:2010/12/19 18:26:44
--  
 

谢谢楼上的回复。

只是如此一来,将增加很多不必要的麻烦:

1、  一个策略要分成几个分别设置,如果公式比较大则对电脑的内存和CPU增加了几倍的要求。如果再增加一个另外的策略,又要分成几部分,顶配的电脑可能也应付不过来。

2、  仓位管理会造成不连续,分开策略开平的仓位不会计算到原始策略中去,会出现重复开平仓,稍有不慎就会造成仓量的错误。而且在设置监控品种、开平仓手数时要完全相同,更换一个合约时要同时修改多个地方,一个地方没照顾到,又会出现错误。

3、  对于第二天重复开平仓,设置9:01也是不行的,金字塔会把9:30之前的这根K线做为前收盘15:00的下一根,如果15:00有信号,在9:01~9:30这时间段中任何时候启动自动交易都会开平仓。如果设置成9:31,前一天15:00的信号会滤过,但是当天9:30分的信号也会被滤过。总之太复杂了,可能比手工操作还要麻烦。

如此一来,这样的全自动交易岂不是太繁琐了?


昨天,我想了很久,终于想到了一个方法,这也是得益于王锋的指点,同时也需要金字塔软件人员的配合。方法是:在K线走完模式下,金字塔系统内置交易时间的最后一分钟为强制轮询模式即商品期货14:59:00、股指期货15:14:00后为强制固定轮询;或者是在程式化交易设置的“走完一根K线之后”增加一个复选框“强制最后1分钟(50S、40S、30S、20S可任选)采用固定轮询模式”。这样一来,15:00前的开平仓信号则可完美解决,也就没有了重复开平仓的问题,也不需要把一个策略分成几个了。而且这对于金字塔的软件开发高手来说,应该也不成问题。

 

热切盼望在下一版升级的金字塔,能把这个问题解决。我想,只要做过夜单的期友们应该都会遇到这个问题,不能把金字塔的全自动交易局限在日内的全自动上,这会束缚金字塔的发展壮大。


--  作者:阿火
--  发布时间:2010/12/19 20:27:41
--  

这样试试怎么样:比如买入条件if1

 

ref(if1 and time<>150000,1) or (if1 and time=150000 and currenttime>145930),BK;//无须选择K线走完

 

………


--  作者:tittat
--  发布时间:2010/12/20 14:22:21
--  

请问楼上,bk是什么指令?函数列表里没有啊?

 


--  作者:阿火
--  发布时间:2010/12/20 14:30:50
--  

买开 指令。可以用Enterlong代替

Enterlong:ref(if1 and time<>150000,1) or (if1 and time=150000 and currenttime>145930);

 

其实帮助说明的文件里有:

 

交易系统之多头买入信号
例如:
ENTERLONG:CROSS(VAR1,VAR2),或者CROSS(VAR1,VAR2),BK
所属函数组:控制语句


--  作者:tittat
--  发布时间:2010/12/20 15:04:05
--  

呵,还有这个指令啊。奇怪哦,全部函数列表里没收

 

另外,你说的不用K线走完模式,那盘中的30分钟收盘发出的信号也是按轮循模式了啊?取多长的固定时间间隔


--  作者:阿火
--  发布时间:2010/12/20 21:41:40
--  

跟轮循模式没有太大关系吧。是为了完成楼主要实现的目的

楼主要的 目的是:信号成立,K线走完下单。但是临近收盘的时候,不必等K线走完,最后30秒下单(甚至最后15秒)

换种说法,也就是:信号成立,下一K线开盘价下单。但临近收盘的那根K线图,最后30秒下单。

当然,最后30秒也有可能出现信号出现又消失的情况,特别是最后30秒,价格在临界位附近波动。但是,系统设计,是否能盈利,跟这个关系不大

[此贴子已经被作者于2010-12-20 21:46:48编辑过]

--  作者:pancg
--  发布时间:2010/12/20 23:07:26
--  

楼上的思路有点意思。

我的理解就是:在固定轮询模式下,在K线时间不是15:00那一根时,上一周期出现信号,本周期开盘下单,就相当于K线走完模式。因此在出信号的周期K线上不会下单,就避免了轮询模式下信号出现又消失的问题。

      这就解决了15:00以前K线按接近收盘价交易的目的。

      而在15:00那根K线和currenttime>145930 时,见信号就下单,就解决了收盘K线的开平仓问题。关于出现信号出现又消失的情况,在最后30秒是很难出现的,这已经最接近收盘价了。

 

谢谢了,明天试一下。

     


--  作者:阿火
--  发布时间:2010/12/21 8:34:54
--  

不用客气。我目前一般都是用H、L来写系统,所以我自己还没试,有问题再提出来一起解决。