以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 开平仓语句顺序问题 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=145486) |
-- 作者:zxsd -- 发布时间:2016/12/29 13:18:52 -- 开平仓语句顺序问题 我按照初级教程给的开平仓顺序—— 1,平空 2,开多 3,平多 4,开空 这样来写的,是逐K线计算 但是今天实盘图表交易的时候,某根K线开盘时用OPEN开了空(代码在位置4),开空就设定开盘价之上20点止损线,在位置1执行CROSS(HIGH,OPEN+20点止损)平空止损,但是本根打了止损没执行,下一根才性质,导致亏损很多 位置1的平空语句中,有条件要求必须位置4开空后才能执行平空,我想就是这个原因导致本根止损没平,但我的问题是,实盘过程中,如果第一秒位置4的开空执行了,第10秒价格达到止损了,之后如果有100秒时间走完这根K线,那这100秒时间中,位置4的开空已执行这个条件不会被刷新吗?(我理解回测时每根K线只计算一遍,但实盘时候呢?) 有什么方法能补救这个问题吗? |
-- 作者:jinzhe -- 发布时间:2016/12/29 13:37:47 -- 1是本根打了止损没执行,下一根才性质,导致亏损很多 2顺序也很重要,但不是一定是顺序的问题,如果不是同一根k线开平仓,那么顺序影响的可能性就小了 |
-- 作者:zxsd -- 发布时间:2016/12/29 14:09:27 -- 谢谢回答,可是: 1,程序化交易运行模式,我就是使用的固定时间间隔,设置的1秒 2,我觉得很有可能是顺序问题,因为我下一根才执行平仓,触发的是另外一个平空语句(开盘价大于止损线时以开盘价平仓)(这语句也写在位置1,先是CROSS止损,之后防止万一开盘价超过止损,这两句前后挨着)。 同时我的开多和平多止损就不会出现这个问题,当根K线就会平仓,两种写法的开平仓只是方向不一样其他都一样,因为我觉得是开多和平多顺序顺序正确,而开空要在下一遍执行才能触发 3,假设我把位置1的平空原封不动复制一遍放在位置4后面,能解决这问题吗?会不会带来其他不好的结果? |
-- 作者:jinzhe -- 发布时间:2016/12/29 14:29:11 -- 把你写的发一下,看看实际的代码是什么样的 |
-- 作者:zxsd -- 发布时间:2016/12/29 17:02:19 -- 请看,螺纹钢连续,15分钟K线图 2016年12月28号01:15这根是多单止损,没问题 2016年12月29号02:45这根是空单止损,只能第二根平 求解决方法 VARIABLE:空单止损=0,空单入场标记=0,多单止损=0,多单入场标记=0; 向上均线:=REF(MA(CLOSE,30),5)<REF(MA(CLOSE,30),4) AND REF(MA(CLOSE,30),4)<REF(MA(CLOSE,30),3) AND REF(MA(CLOSE,30),3)<REF(MA(CLOSE,30),2) AND REF(MA(CLOSE,30),2)<REF(MA(CLOSE,30),1),NOAXIS; 向上成交量:=REF(VOL,5)>REF(VOL,4) AND REF(VOL,4)>REF(VOL,3) AND REF(VOL,3)>REF(VOL,2) AND REF(VOL,2)>REF(VOL,1),NOAXIS; 向下均线:=REF(MA(CLOSE,30),5)>REF(MA(CLOSE,30),4) AND REF(MA(CLOSE,30),4)>REF(MA(CLOSE,30),3) AND REF(MA(CLOSE,30),3)>REF(MA(CLOSE,30),2) AND REF(MA(CLOSE,30),2)>REF(MA(CLOSE,30),1),NOAXIS; 向下成交量:=REF(VOL,5)>REF(VOL,4) AND REF(VOL,4)>REF(VOL,3) AND REF(VOL,3)>REF(VOL,2) AND REF(VOL,2)>REF(VOL,1),NOAXIS; //位置1——平空 //平空1 IF CROSS(HIGH,空单止损) AND OPEN<=空单止损 AND HOLDING<0 AND 空单入场标记=1 THEN BEGIN SELLSHORT(1,1,LIMITR,空单止损); DRAWTEXT(1,LOW*0.995,\' 止损\'+NUMTOSTR(空单止损,0)),COLORWHITE; 空单止损:=99999; 空单入场标记:=0; END //平空2 IF OPEN>空单止损 AND HOLDING<0 AND 空单入场标记=1 THEN BEGIN SELLSHORT(1,1,LIMITR,OPEN); DRAWTEXT(1,LOW*0.995,\' 开盘平\'+NUMTOSTR(OPEN,0)),COLORWHITE; 空单止损:=99999; 空单入场标记:=0; END //位置2——开多 //开多: IF REF(向上均线,1) AND CROSS(MA(CLOSE,10),MA(CLOSE,60)) AND HOLDING=0 THEN BEGIN BUY(1,1,LIMITR,OPEN); 多单止损:=ENTERPRICE-20; 多单入场标记:=1; END //位置3——平多 //平多1 IF CROSS(多单止损,LOW) AND OPEN>=多单止损 AND HOLDING>0 AND 多单入场标记=1 THEN BEGIN SELL(1,1,LIMITR,多单止损); DRAWTEXT(1,HIGH*1.005,\' 止损\'+NUMTOSTR(多单止损,0)),COLORWHITE; 多单止损:=0; 多单入场标记:=0; END //平多2 IF OPEN<多单止损 AND HOLDING>0 AND 多单入场标记=1 THEN BEGIN SELL(1,1,LIMITR,OPEN); DRAWTEXT(1,HIGH*1.005,\' 开盘平\'+NUMTOSTR(OPEN,0)),COLORWHITE; 多单止损:=0; 多单入场标记:=0; END //位置4——开空 //开空: IF REF(向下均线,1) AND CROSS(MA(CLOSE,60),MA(CLOSE,10)) AND REF(向下成交量,1) AND HOLDING=0 THEN BEGIN BUYSHORT(1,1,LIMITR,OPEN); 空单止损:=ENTERPRICE+20; 空单入场标记:=1; END |
-- 作者:jinzhe -- 发布时间:2016/12/29 17:06:56 -- 看了下代码,有用到enterprice这类要获取开仓价以及enterbars获取开仓周期的函数做平仓条件的,那么平仓语句一定要写在开仓语句后面 |
-- 作者:zxsd -- 发布时间:2016/12/29 17:19:26 -- 请教一个不会出错的保险解决办法,比如把位置一的平仓语句再复制到位置4之后,这样同时存在两个平仓语句会不会出问题?两个相同的平仓语句在不同通位置,官方推荐这么写么?(毕竟再上实盘测试还是得赔钱才能看出来,所以直接问版主) 或者准确开仓价的获取,能否用其他方式?这样能维持原来的代码顺序不变? 非常感谢 [此贴子已经被作者于2016-12-29 17:21:12编辑过]
|
-- 作者:jinzhe -- 发布时间:2016/12/29 17:25:04 -- 就如之前所言,这些是没有固定的路数的,看你具体的需求的。用enterprice和enterbars时做为平仓条件判断时,一定要在开仓语句后面,不然是不能正确的获取值的:获取值时会延迟一根k线,开仓当根k线获取不到,要开仓下一根k线才行 |
-- 作者:zxsd -- 发布时间:2016/12/30 16:10:36 -- 版主,这个问题我早上又测试了一下,我修改了代码(注释掉了ENTERPRICE,改为OPEN),也测试了在位置4后面多复制一个位置1的平仓,但是我看历史数据图形还是一样的第二根开 我想确认一下,这样上实盘,OPEN价入场后到收线这段时间是不是一定会当根止损,我担心下一次出现这情况不知道什么时候亏笔大的。 螺纹钢连续,15分钟K线图 2016年12月28号01:15这根是多单止损,没问题 2016年12月29号02:45这根是空单止损,只能第二根平 VARIABLE:空单止损=0,空单入场标记=0,多单止损=0,多单入场标记=0; 向上均线:=REF(MA(CLOSE,30),5)<REF(MA(CLOSE,30),4) AND REF(MA(CLOSE,30),4)<REF(MA(CLOSE,30),3) AND REF(MA(CLOSE,30),3)<REF(MA(CLOSE,30),2) AND REF(MA(CLOSE,30),2)<REF(MA(CLOSE,30),1),NOAXIS; 向上成交量:=REF(VOL,5)>REF(VOL,4) AND REF(VOL,4)>REF(VOL,3) AND REF(VOL,3)>REF(VOL,2) AND REF(VOL,2)>REF(VOL,1),NOAXIS; 向下均线:=REF(MA(CLOSE,30),5)>REF(MA(CLOSE,30),4) AND REF(MA(CLOSE,30),4)>REF(MA(CLOSE,30),3) AND REF(MA(CLOSE,30),3)>REF(MA(CLOSE,30),2) AND REF(MA(CLOSE,30),2)>REF(MA(CLOSE,30),1),NOAXIS; 向下成交量:=REF(VOL,5)>REF(VOL,4) AND REF(VOL,4)>REF(VOL,3) AND REF(VOL,3)>REF(VOL,2) AND REF(VOL,2)>REF(VOL,1),NOAXIS; //位置1——平空 //平空1 IF CROSS(HIGH,空单止损) AND OPEN<=空单止损 AND HOLDING<0 AND 空单入场标记=1 THEN BEGIN SELLSHORT(1,1,LIMITR,空单止损); DRAWTEXT(1,LOW*0.995,\' 止损\'+NUMTOSTR(空单止损,0)),COLORWHITE; 空单止损:=99999; 空单入场标记:=0; END //平空2 IF OPEN>空单止损 AND HOLDING<0 AND 空单入场标记=1 THEN BEGIN SELLSHORT(1,1,LIMITR,OPEN); DRAWTEXT(1,LOW*0.995,\' 开盘平\'+NUMTOSTR(OPEN,0)),COLORWHITE; 空单止损:=99999; 空单入场标记:=0; END //位置2——开多 //开多: IF REF(向上均线,1) AND CROSS(MA(CLOSE,10),MA(CLOSE,60)) AND HOLDING=0 THEN BEGIN BUY(1,1,LIMITR,OPEN); //多单止损:=ENTERPRICE-20; 多单止损:=OPEN-20; 多单入场标记:=1; END //位置3——平多 //平多1 IF CROSS(多单止损,LOW) AND OPEN>=多单止损 AND HOLDING>0 AND 多单入场标记=1 THEN BEGIN SELL(1,1,LIMITR,多单止损); DRAWTEXT(1,HIGH*1.005,\' 止损\'+NUMTOSTR(多单止损,0)),COLORWHITE; 多单止损:=0; 多单入场标记:=0; END //平多2 IF OPEN<多单止损 AND HOLDING>0 AND 多单入场标记=1 THEN BEGIN SELL(1,1,LIMITR,OPEN); DRAWTEXT(1,HIGH*1.005,\' 开盘平\'+NUMTOSTR(OPEN,0)),COLORWHITE; 多单止损:=0; 多单入场标记:=0; END //位置4——开空 //开空: IF REF(向下均线,1) AND CROSS(MA(CLOSE,60),MA(CLOSE,10)) AND REF(向下成交量,1) AND HOLDING=0 THEN BEGIN BUYSHORT(1,1,LIMITR,OPEN); //空单止损:=ENTERPRICE+20; 空单止损:=OPEN+20; 空单入场标记:=1; END { //位置5——平空 //平空1 IF CROSS(HIGH,空单止损) AND OPEN<=空单止损 AND HOLDING<0 AND 空单入场标记=1 THEN BEGIN SELLSHORT(1,1,LIMITR,空单止损); DRAWTEXT(1,LOW*0.995,\' 止损\'+NUMTOSTR(空单止损,0)),COLORWHITE; 空单止损:=99999; 空单入场标记:=0; END } [此贴子已经被作者于2016-12-30 16:11:03编辑过]
|
-- 作者:jinzhe -- 发布时间:2016/12/30 16:17:02 -- 一样的,平仓是开仓相关的条件,平仓语句都要写在开仓语句后面 |