以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  前一个帖子的测试问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=180295)

--  作者:剑鱼bjy
--  发布时间:2020/6/2 16:38:36
--  前一个帖子的测试问题
//30分钟K线
N:=BARSLAST(DATE<>REF(DATE,1))+1;//当天开盘以来共有多少根K线
C1:=REF(CLOSE,N);//前1天收
C2:=REF(CLOSE,(N+8));//前2天收
C3:=REF(CLOSE,(N+16));//前3天收
C4:=REF(CLOSE,(N+24));//前4天收
C5:=REF(CLOSE,(N+32));//前5天收
MAC:(C1+C2+C3+C4+C5)/5;
BUY(HOLDING=0 && CLOSE>=MAC && (EXITBARS+1)>0,1);
SELL(HOLDING>0 && ((CLOSE-ENTERPRICE)>30 || CLOSE<MAC),1);
BUYSHORT(HOLDING=0 && CLOSE<=MAC && (EXITBARS+1)>0,1);
SELLSHORT(HOLDING<0 && ((ENTERPRICE-CLOSE)>30 || CLOSE>MAC),1);

加入“(EXITBARS+1)>0”语句是为了在同一个K线上有平仓则不会再开仓,但是策略测试中没有成交。
去除“(EXITBARS+1)>0”语句后,策略测试正常了,但是在某些K线下同时会有平仓和开仓信号。
请问,如何解决这个问题,是EXITBARS参数使用问题吗?

--  作者:banzhuan
--  发布时间:2020/6/2 16:57:55
--  
您可以把策略加载到图表上看下,是否满足了开仓条件
比如输出下 a:开仓条件,看下a是否输出为1
[此贴子已经被作者于2020/6/2 16:59:32编辑过]

--  作者:剑鱼bjy
--  发布时间:2020/6/2 17:05:31
--  
加了语句
A:(HOLDING=0 && CLOSE>=MAC && (EXITBARS+1)>0);

A始终为0。去掉“(EXITBARS+1)>0)”语句A才能为1.

那么,问题在哪?

--  作者:banzhuan
--  发布时间:2020/6/2 17:16:30
--  
(EXITBARS+1)>=0 改成大于等于0试试,策略我加载到图表上可以的 

图片点击可在新窗口打开查看此主题相关图片如下:1111.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2020/6/2 17:26:12编辑过]

--  作者:剑鱼bjy
--  发布时间:2020/6/2 21:06:27
--  
不行啊,我把程序放在300股指连续指数里面,30分钟K线,还是出现某些K线上同时存在平仓和开仓的现象。
请继续帮忙!

--  作者:剑鱼bjy
--  发布时间:2020/6/2 21:39:50
--  
经过测试不同时段EXITBARS的值,上次平仓以后(包括上次平仓并开仓的时段),EXITBARS一直在递增,本次平仓时对应的K线,EXITBARS值还是上次平仓递增值的最大值,平仓之后的下一根K线,EXITBARS才归0。那么就是说,不能用EXITBARS的值判断本次K线是否有过平仓。
请问,还有其它解决办法没?

--  作者:banzhuan
--  发布时间:2020/6/3 9:57:48
--  
调整下开平仓顺序,您再试试;
N:BARSLAST(DATE<>REF(DATE,1))+1;//当天开盘以来共有多少根K线
C1:=REF(CLOSE,N);//前1天收
C2:=REF(CLOSE,(N+8));//前2天收
C3:=REF(CLOSE,(N+16));//前3天收
c4:=REF(CLOSE,(N+24));//前4天收
C5:=REF(CLOSE,(N+32));//前5天收
MAC:(C1+C2+C3+c4+C5)/5;

BUYSHORT(HOLDING=0 && CLOSE<=MAC && EXITBARS>=-1,1);
SELLSHORT(HOLDING<0 && ((ENTERPRICE-CLOSE)>30 || CLOSE>MAC),1);
BUY(HOLDING=0 && CLOSE>=MAC && EXITBARS>=-1 ,1,marketr);
SELL(HOLDING>0 && ((CLOSE-ENTERPRICE)>30 || CLOSE<MAC),1,marketr);