加减仓问题 [文华财经]
- 咨询内容:
老师,再次麻烦您帮我看一下程序,具体程序如下,在回测报告中2014.9.29之前运行的结果都是正确的,2014.9.30主图上显示的信号强度是50,手数是29是正确的,但是交易明细里出来的结果是买开仓67手,执行的是按前一天信号强度延续下来计算出的手数。我想让您帮忙看一下为什么交易明细里和回测报告中执行的语句不同,是不是我代码中出现了什么歧义造成的。之前有老师回答我的手数不正确是BKVOL,SKVOL造成的,但是这次手数显示错误不是这两个函数造成的,就是下单方向改变后没有识别到50的信号强度,而是延续前面空单信号强度,这个问题我昨天看了一天还是不知问题出在哪,麻烦老师们帮我看一下,我下面截图中加载的是白糖指数,测试时间是2014.7.1开始,最后显示的那根K线就是2014.9.30的信号强度和手数,和交易明细里的手数是不一样的,正常交易明细应该和主图上的结果一致才是正确的吧,而且这都是历史回测应该不会像运行模拟那样实时的出现信号错误什么的。但是不知道为什么不一致
FD:=ABS(C-REF(C,1))/REF(C,1);//K线涨跌幅度DD:=REF(ISDOWN,2)&&REF(ISDOWN,1)&&ISUP&&FD<MIN(REF(FD,1),REF(FD,2))*1/2;//跌顿的定义,由三根K线形成的组合,第一根K线为下跌绿线,第二根为下跌绿线,第三根为上涨红线,且第三根K线幅度<前两根K线幅度较小者*1/2ZD:=REF(ISUP,2)&&REF(ISUP,1)&&ISDOWN&&FD<MAX(REF(FD,1),REF(FD,2))*1/2;//涨顿的定义, 由三根K线形成的组合,第一根K线为上涨红线,第二根为上涨红线,第三根为下跌绿线,且第三根K线幅度<前两根K线幅度较大者*1/2 MBX:=(H-O)>=4*(O-C)&&ISDOWN;//墓碑线:(高-开)>=4(开-收), 且K线为绿线 FMBX:=(O-L)>=4*(C-O)&&ISUP;//反向墓碑线: (开-低)>=4(收-开),且K线为红线ST:=(C-O)/O;//实体部分幅度=(当根收盘-当根开盘)/当根开盘DYX1:= ST>=0.03;//大阳线指实体部分>=3%DYX2:= ST<=-0.03;//大阴线DYBDY1:=DYX1&&C-REF(O,1)>=0&&(C/REF(O,1)-1)<=0.005&& ABS(O/REF(C,1)-1)<=0.005;//大阳伴大阴指是大阳线,0<(收盘-前一根开盘)/前一根开盘<=0.5%;|(开盘-前一根收盘)/前一根收盘|<=0.5%DYBDY2:=DYX2&&C-REF(O,1)<0&&C/REF(O,1)-1>=-0.005&& ABS(O/REF(C,1)-1)<=0.005;//大阴伴大阳TKDK:=ISUP&&REF(ISUP,1)&&(REF(O,1)-REF(C,2))/REF(C,2)<=-0.02;// 跳空低开双阳线,第一根K线为红线,第二根K线为红线,且第一根K线跳空幅度<=-2%TKGK:ISDOWN&&REF(ISDOWN,1)&&(REF(O,1)-REF(C,2))/REF(C,2)>=0.02;// 跳空高开双阴线,第一根K线为绿线,第二根K线为绿线,且第一根K线跳空幅度>=2%QDO:=IF(OPI>REF(OPI,1),20,IF(OPI<REF(OPI,1),-10,0));//持仓量大于前一根,信号强度20,小于前一根,-10,其余为0QDV:=IF(V>REF(V,1),20,IF(V<REF(V,1),-10,0));// 成交量大于前一根,信号强度20,小于前一根,-10,其余为0DDQD:=IF(BKVOL>0&&SKVOL=0&&DD,30,IF(BKVOL=0&&SKVOL>0&&DD,-15,0)); //跌顿做多时信号强度为30,做空时信号强度为-15ZDQD:=IF(BKVOL>0&&SKVOL&&ZD=0,-15,IF(BKVOL=0&&SKVOL>0&&ZD,30,0)); //涨顿做多时信号强度为-25,做空时信号强度为30MBXQD:=IF(BKVOL>0&&SKVOL=0&&MBX,-25,IF(BKVOL=0&&SKVOL>0&&MBX,45,0)); //墓碑线做多时信号强度为-25,做空时信号强度为45FMBXQD:=IF(BKVOL>0&&SKVOL=0&&FMBX,45,IF(BKVOL=0&&SKVOL>0&&FMBX,-25,0)); //反向墓碑线做多时信号强度为45,做空时信号强度为-25DYX1QD:=IF(BKVOL>0&&SKVOL=0&&DYX1,35,IF(BKVOL=0&&SKVOL>0&&DYX1,-20,0)); //大阳线做多时信号强度为35,做空时信号强度为-20DYX2QD:=IF(BKVOL>0&&SKVOL=0&&DYX2,-20,IF(BKVOL=0&&SKVOL>0&&DYX2,35,0)); //大阴线做多时信号强度为-20,做空时信号强度为35DYBDY1QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY1,55,IF(BKVOL=0&&SKVOL>0&&DYBDY1,-30,0)); //大阳伴大阴做多时信号强度为55,做空时信号强度为-30DYBDY2QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY2,-30,IF(BKVOL=0&&SKVOL>0&&DYBDY2,55,0)); //大阴伴大阳做多时信号强度为-30,做空时信号强度为55TKDKQD:=IF(BKVOL>0&&SKVOL=0&&TKDK,65,IF(BKVOL=0&&SKVOL>0&& TKDK,-35,0)); //跳空低开双阳做多时信号强度为65,做空时信号强度为-35TKGKQD:=IF(BKVOL>0&&SKVOL=0&&TKGK,-35,IF(BKVOL=0&&SKVOL>0&& TKGK,65,0)); //跳空高开双阴做多时信号强度为-35,做空时信号强度为65QD1:= QDO+QDV+DDQD+ZDQD+MBXQD+FMBXQD+DYX1QD+DYX2QD+DYBDY1QD+DYBDY2QD+TKDKQD+TKGKQD,NODRAW;//初始信号强度50,否则为每根信号强度之和TJAA1:=(REF(ISLASTBP,1)&&ISLASTBK||REF(ISLASTSP,1)&&ISLASTSK);XHQD:IF(REF(NOT(ISLASTBK)&&NOT(ISLASTSK)&&NOT(ISLASTSP)&&NOT(ISLASTBP),1)||TJAA1,50,IF(REF(XHQD,1)+QD1>=200,200,REF(XHQD,1)+QD1)),NODRAW;XHQD2:IF(XHQD<0,0,IF(XHQD=0,REF(XHQD,1),IF(XHQD>200,200,XHQD)));//上面信号强度范围在(0,200)SS:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C),NODRAW;//算手数,一个信号强度对应0.02倍杠杆SS1:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C)-INTPART(REF(SS,1));SS2:IF(XHQD2<200&&SS1<>0,SS1,IF(XHQD2=200&&XHQD2<>REF(XHQD2,1),SS1,0));TIME>=1458&&BKVOL=0&&SKVOL=0&&C>REF(C,30),BK(SS);//14:58当收盘价大于前第30根收盘价,买开多TIME>=1458&&BKVOL=0&&SKVOL=0&&C<REF(C,30),SK(SS);TIME>=1458&&BKVOL=0&&SKVOL>0&&C>REF(C,30),BP(SKVOL);//14:58当有空单,当收盘价大于前第30根收盘价,反手多TIME>=1458&&REF(BKVOL,1)>0&&SKVOL=0&&C<REF(C,30),SP(BKVOL);//14:58当有多单,当收盘价小于前第30根收盘价,反手空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1>0,BK(SS2);//有多头持仓,新手数大于0,增开多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1>0,SK(SS2);//有空头持仓,新手数大于0,增开空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1<0,SP(ABS(SS2));//有多头持仓,新手数小于0,卖平多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1<0,BP(ABS(SS2));//有空头持仓,新手数小于0,买平空CLOSEKLINE(1,120);//收盘前最后一根K线提前60秒走完TRADE_AGAIN(60);//含有该函数的非过滤模型中,同一指令行可以连续出60
此主题相关图片如下:qq截图20150127090507.png
- 文华技术人员:
可以参考如下写法:
FD:=ABS(C-REF(C,1))/REF(C,1);//K线涨跌幅度DD:=REF(ISDOWN,2)&&REF(ISDOWN,1)&&ISUP&&FD<MIN(REF(FD,1),REF(FD,2))*1/2;//跌顿的定义,由三根K线形成的组合,第一根K线为下跌绿线,第二根为下跌绿线,第三根为上涨红线,且第三根K线幅度<前两根K线幅度较小者*1/2ZD:=REF(ISUP,2)&&REF(ISUP,1)&&ISDOWN&&FD<MAX(REF(FD,1),REF(FD,2))*1/2;//涨顿的定义, 由三根K线形成的组合,第一根K线为上涨红线,第二根为上涨红线,第三根为下跌绿线,且第三根K线幅度<前两根K线幅度较大者*1/2 MBX:=(H-O)>=4*(O-C)&&ISDOWN;//墓碑线:(高-开)>=4(开-收), 且K线为绿线 FMBX:=(O-L)>=4*(C-O)&&ISUP;//反向墓碑线: (开-低)>=4(收-开),且K线为红线ST:=(C-O)/O;//实体部分幅度=(当根收盘-当根开盘)/当根开盘DYX1:= ST>=0.03;//大阳线指实体部分>=3%DYX2:= ST<=-0.03;//大阴线DYBDY1:=DYX1&&C-REF(O,1)>=0&&(C/REF(O,1)-1)<=0.005&& ABS(O/REF(C,1)-1)<=0.005;//大阳伴大阴指是大阳线,0<(收盘-前一根开盘)/前一根开盘<=0.5%;|(开盘-前一根收盘)/前一根收盘|<=0.5%DYBDY2:=DYX2&&C-REF(O,1)<0&&C/REF(O,1)-1>=-0.005&& ABS(O/REF(C,1)-1)<=0.005;//大阴伴大阳TKDK:=ISUP&&REF(ISUP,1)&&(REF(O,1)-REF(C,2))/REF(C,2)<=-0.02;// 跳空低开双阳线,第一根K线为红线,第二根K线为红线,且第一根K线跳空幅度<=-2%TKGK:ISDOWN&&REF(ISDOWN,1)&&(REF(O,1)-REF(C,2))/REF(C,2)>=0.02;// 跳空高开双阴线,第一根K线为绿线,第二根K线为绿线,且第一根K线跳空幅度>=2%QDO:=IF(OPI>REF(OPI,1),20,IF(OPI<REF(OPI,1),-10,0));//持仓量大于前一根,信号强度20,小于前一根,-10,其余为0QDV:=IF(V>REF(V,1),20,IF(V<REF(V,1),-10,0));// 成交量大于前一根,信号强度20,小于前一根,-10,其余为0DDQD:=IF(BKVOL>0&&SKVOL=0&&DD,30,IF(BKVOL=0&&SKVOL>0&&DD,-15,0)); //跌顿做多时信号强度为30,做空时信号强度为-15ZDQD:=IF(BKVOL>0&&SKVOL&&ZD=0,-15,IF(BKVOL=0&&SKVOL>0&&ZD,30,0)); //涨顿做多时信号强度为-25,做空时信号强度为30MBXQD:=IF(BKVOL>0&&SKVOL=0&&MBX,-25,IF(BKVOL=0&&SKVOL>0&&MBX,45,0)); //墓碑线做多时信号强度为-25,做空时信号强度为45FMBXQD:=IF(BKVOL>0&&SKVOL=0&&FMBX,45,IF(BKVOL=0&&SKVOL>0&&FMBX,-25,0)); //反向墓碑线做多时信号强度为45,做空时信号强度为-25DYX1QD:=IF(BKVOL>0&&SKVOL=0&&DYX1,35,IF(BKVOL=0&&SKVOL>0&&DYX1,-20,0)); //大阳线做多时信号强度为35,做空时信号强度为-20DYX2QD:=IF(BKVOL>0&&SKVOL=0&&DYX2,-20,IF(BKVOL=0&&SKVOL>0&&DYX2,35,0)); //大阴线做多时信号强度为-20,做空时信号强度为35DYBDY1QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY1,55,IF(BKVOL=0&&SKVOL>0&&DYBDY1,-30,0)); //大阳伴大阴做多时信号强度为55,做空时信号强度为-30DYBDY2QD:=IF(BKVOL>0&&SKVOL=0&&DYBDY2,-30,IF(BKVOL=0&&SKVOL>0&&DYBDY2,55,0)); //大阴伴大阳做多时信号强度为-30,做空时信号强度为55TKDKQD:=IF(BKVOL>0&&SKVOL=0&&TKDK,65,IF(BKVOL=0&&SKVOL>0&& TKDK,-35,0)); //跳空低开双阳做多时信号强度为65,做空时信号强度为-35TKGKQD:=IF(BKVOL>0&&SKVOL=0&&TKGK,-35,IF(BKVOL=0&&SKVOL>0&& TKGK,65,0)); //跳空高开双阴做多时信号强度为-35,做空时信号强度为65QD1:= QDO+QDV+DDQD+ZDQD+MBXQD+FMBXQD+DYX1QD+DYX2QD+DYBDY1QD+DYBDY2QD+TKDKQD+TKGKQD,NODRAW;//初始信号强度50,否则为每根信号强度之和TJAA1:=(REF(ISLASTBP,1)&&SKVOL=0||REF(ISLASTSP,1)&&BKVOL=0);XHQD:IF(REF(NOT(ISLASTBK)&&NOT(ISLASTSK)&&NOT(ISLASTSP)&&NOT(ISLASTBP),1)||TJAA1,50,IF(REF(XHQD,1)+QD1>=200,200,REF(XHQD,1)+QD1)),NODRAW;XHQD2:IF(XHQD<0,0,IF(XHQD=0,REF(XHQD,1),IF(XHQD>200,200,XHQD)));//上面信号强度范围在(0,200)SS:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C),NODRAW;//算手数,一个信号强度对应0.02倍杠杆SS1:INTPART((MONEYTOT*XHQD2*0.02/UNIT)/C)-INTPART(REF(SS,1));SS2:IF(XHQD2<200&&SS1<>0,SS1,IF(XHQD2=200&&XHQD2<>REF(XHQD2,1),SS1,0));TIME>=1458&&BKVOL=0&&SKVOL=0&&C>REF(C,30),BK(SS);//14:58当收盘价大于前第30根收盘价,买开多TIME>=1458&&BKVOL=0&&SKVOL=0&&C<REF(C,30),SK(SS);TIME>=1458&&BKVOL=0&&SKVOL>0&&C>REF(C,30),BP(SKVOL);//14:58当有空单,当收盘价大于前第30根收盘价,反手多TIME>=1458&&REF(BKVOL,1)>0&&SKVOL=0&&C<REF(C,30),SP(BKVOL);//14:58当有多单,当收盘价小于前第30根收盘价,反手空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1>0,BK(SS2);//有多头持仓,新手数大于0,增开多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1>0,SK(SS2);//有空头持仓,新手数大于0,增开空TIME>=1458&&BKVOL>0&&SKVOL=0&&SS1<0,SP(ABS(SS2));//有多头持仓,新手数小于0,卖平多TIME>=1458&&BKVOL=0&&SKVOL>0&&SS1<0,BP(ABS(SS2));//有空头持仓,新手数小于0,买平空CLOSEKLINE(1,60);TRADE_AGAIN(60);//含有该函数的非过滤模型中,同一指令行可以连续出60
此主题相关图片如下:image .png
- 文华客服:
老师您改过的程序是正确的,谢谢,我还想问一下我是把程序加载到白糖指数上,下单是下的白糖1505合约,现在手数计算是用白糖指数的收盘价来算的,怎么样能变成用白糖1505合约的收盘价来计算手数
- 网友回复:
手数的计算是根据 指数数据来算的
这个无法改变的
只能加载到白糖1505合约来计算下 - 网友回复:
老师麻烦您再看一下1楼的程序我放到白糖上运行,起始时间是从昨天开始,为什么今天收盘的时候监控K线图中昨天的SS指标没有了,导致今天SS2也没有计算结果
此主题相关图片如下:qq图片20150129155643.jpg
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容