以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://weistock.com/bbs/list.asp?boardid=2) ---- 阿火秘籍中走完k线+固定轮询混合模式的问题 (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=76043) |
-- 作者:cgysdf -- 发布时间:2015/3/2 14:39:00 -- 阿火秘籍中走完k线+固定轮询混合模式的问题 各位群友,本人有一个走完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线后,究竟是怎么实现的,看了许久都没想明白,比如我下面的图里面:
这里离当前K线走完还剩3秒钟,我查看变量cc也已经变为1了,照理说,if holding<0 and cc>=0 then sellshort(1,1,limitr,o) 这句话要执行平空操作了,但这里却没有执行操作,还是等走完K线,开始以为是交易指令limitr,o)的问题,后来发现改为市价单market也是要等走完当根K线再开仓的。
想来想去都没明白,火哥这里固定轮询模式下的走完K线模式开单,究竟是怎么实现的。请各位大侠详细一点解释一下,在此感激不尽啊!
|
-- 作者:yukizzc -- 发布时间:2015/3/2 15:30:43 -- 阿火这代码是两部分组成的,你看下原帖红色标注部分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 |
-- 作者:江平 -- 发布时间:2015/3/2 15:43:51 -- 一个问题啊老师 假设 我现在是在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线走完开仓矛盾了吗? 那阿火这段代码是怎么解决这个问题的。 谢谢老师
|
-- 作者:yukizzc -- 发布时间:2015/3/2 16:00:02 -- 红色的代码块是放在程序开头部分,你这里的cc改变代码是在程序的下面,不影响前面的数值。 就像 variable:num=0; p:num; //下面的赋值不会改变这里num的值 if c>o then num:=num+1;
|
-- 作者:cgysdf -- 发布时间:2015/3/2 16:01:37 -- 我这里用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编辑过]
|
-- 作者:江平 -- 发布时间:2015/3/2 16:02:26 -- 这个我清楚 我是说过了两分钟又出现了一笔成交数据 固定轮询不是会在刷一下程序的的吗?那这样之前CC=-1 现在不就可以了吗 |
-- 作者:cgysdf -- 发布时间:2015/3/2 16:23:39 -- 你代码从上往下阅读,cc首先是等于0的不开仓,然后代码下面本根k条件成立,把cc条件设为了1,l然后下一根k判断这个条件成立就去开仓——————这里为什么是下一根K判断,而不是下一秒钟判断?我是固定轮询的诶。 |
-- 作者:yukizzc -- 发布时间:2015/3/2 16:39:59 -- 因为代码是从上到下的 比如 a:=0; p:a; a:=5; 你说这边的p应该是多少??是0还是5?理解下 如果你要盘中计算的值那要用到ex的全局变量,看下链接这边有详细说明 http://www.weistock.com/WeisoftHelp/zbgs003.htm |
-- 作者:cgysdf -- 发布时间:2015/3/2 17:11:47 -- 全局变量本身就是一个走完K线的东西,都说得通了。。 |
-- 作者:风度翩翩 -- 发布时间:2016/4/15 9:34:00 -- 全局变量 参与计算判定,都是上周期收盘时刻的值,本周期变化内变化,只影响下一周期K线,我是这么理解的。 |