各位群友,本人有一个走完K线加固定轮询的模型,一般都是开仓走完K线,止盈止损固定轮询盘中实时触发的思路。这样的话整体而言要走固定轮询模式,之前我的做法是用DYNIFO(207)=TIME 或者是在当前K线走完后1-2秒钟内开仓,但后来发现这样做法可能会有漏单的情况发生,滑点一般也会偏大。后来参考了论坛中火哥的写法,就下面一段语句,相信大多数群友都已经看过。火哥这套写法确实是解决了走完K线开仓,止损盘中实时触发的功能。单对于下面的代码,我一直有不解之处。
runmode:0;
variable:zs=0,cc=0;
ma5:=ma(c,5);
ma20:=ma(c,20);
entertime:=time>100000 and time<144500;
if holding>0 and cc<=0 then sell(1,1,limitr,o);
if holding<0 and cc>=0 then sellshort(1,1,limitr,o);
if holding=0 and cc>0 then buy(1,1,limitr,o);
if holding=0 and cc<0 then buyshort(1,1,limitr,o);
if cc>0 and l<zs then begin
sell(1,1,limitr,min(o,zs-0.6));
cc:=0;
end
if cc<0 and h>zs then begin
sellshort(1,1,limitr,max(o,zs+0.6));
cc:=0;
end
if cc>0 and ma5<ma20 then cc:=0;
if cc<0 and ma5>ma20 then cc:=0;
if cc=0 and ma5>ma20 and entertime then begin
cc:=1;
zs:=c-10;
end
if cc=0 and ma5<ma20 and entertime then begin
cc:=-1;
zs:=c+10;
end
if time>=150000 then begin
cc:=0;
end
这里开仓是在走完K线后,究竟是怎么实现的,看了许久都没想明白,比如我下面的图里面:

此主题相关图片如下:qq图片20150302143352.png

这里离当前K线走完还剩3秒钟,我查看变量cc也已经变为1了,照理说,if holding<0 and cc>=0 then sellshort(1,1,limitr,o) 这句话要执行平空操作了,但这里却没有执行操作,还是等走完K线,开始以为是交易指令limitr,o)的问题,后来发现改为市价单market也是要等走完当根K线再开仓的。
想来想去都没明白,火哥这里固定轮询模式下的走完K线模式开单,究竟是怎么实现的。请各位大侠详细一点解释一下,在此感激不尽啊!
阿火这代码是两部分组成的,你看下原帖红色标注部分if holding<0 and cc>=0 then sellshort(1,1,limitr,o) 这种的效果就是走完k
蓝色部分才是实时止损的代码块。
你代码从上往下阅读,cc首先是等于0的不开仓,然后代码下面本根k条件成立,把cc条件设为了1,l然后下一根k判断这个条件成立就去开仓
if cc=0 and ma5>ma20 and entertime then begin
cc:=1;
zs:=c-10;
end
一个问题啊老师
假设 我现在是在30分钟的周期下 K线走完的含义就是29分钟末快要到30分钟的时候,如果在15分钟的时候
if cc=0 and ma5>ma20 and entertime then begin
cc:=1; zs:=c-10;end这段代码触发,那CC=-1 并且HOLDINNG=0,这里不开仓我理解的,但是如果下一笔交易发生在17分钟,因为CC是全局变量,这时候CC依然等于-1
这时候if holding=0 and cc<0 then buyshort(1,1,limitr,o);这段代码就会触发,就会开仓了。
但是这时候才到第17分钟上,依旧不满足K线走完的含义,这里还是会开仓,这不就跟K线走完开仓矛盾了吗?
那阿火这段代码是怎么解决这个问题的。
谢谢老师
红色的代码块是放在程序开头部分,你这里的cc改变代码是在程序的下面,不影响前面的数值。
就像
variable:num=0;
p:num; //下面的赋值不会改变这里num的值
if c>o then
num:=num+1;
我这里用buy(1,1,market)模拟去跑,也是走完K线开仓的。就是说和(limitr,o)指令没关系的。
上面的图中,cc在盘中,没有走完K线就已经被赋值为1了,上面的holding<=0的条件也符合的,我的代码改为:if holding<0 and cc>=0 then sellshort(1,1,market);
盘中为什么没开仓呢?也是要等走完K线。
[此贴子已经被作者于2015/3/2 16:02:46编辑过]
这个我清楚 我是说过了两分钟又出现了一笔成交数据 固定轮询不是会在刷一下程序的的吗?那这样之前CC=-1 现在不就可以了吗
因为代码是从上到下的
比如
a:=0;
p:a;
a:=5;
你说这边的p应该是多少??是0还是5?理解下
如果你要盘中计算的值那要用到ex的全局变量,看下链接这边有详细说明
http://www.weistock.com/WeisoftHelp/zbgs003.htm
全局变量本身就是一个走完K线的东西,都说得通了。。