以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  过滤连续信号的问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=167320)

--  作者:qq代人发帖
--  发布时间:2018/12/25 10:23:03
--  过滤连续信号的问题
请教:我想要解决的问题第一步是过滤连续信号的问题:
LASTBUY:= TENTERBARS(0)>0 AND (( TEXITBARS(0)<0  ) OR (TENTERBARS(0)<TEXITBARS(0)))   ;
LASTSELL:=TEXITBARS(0)>0  AND   (TEXITBARS(0)<TENTERBARS(0))   ;
TBUY(CONDBUY AND not(LASTBUY) ,10000,MKT,0,0,ZH1,PZ1 );
//如果上次不是卖出
TSELL(CONDSELL AND not(LASTSELL) ,10000,MKT,0,0,ZH1,PZ1);

这个在15分钟间隔 实盘模拟中看起来没问题,一买后一卖,
但是在后台程序化 回测中,无法过滤连续买卖,
用DEBUGFILE也是显示的一塌糊涂

--  作者:FireScript
--  发布时间:2018/12/25 10:27:21
--  
 截图看下你的回测结果,说明下你说的连续买卖是什么情况。

--  作者:qq代人发帖
--  发布时间:2018/12/25 10:52:24
--  
正在注册账号。。
请帮加如下debugfile内容:
2018-12-25 09:30:39.253    持仓=30000
2018-12-25 09:30:39.255    TODAYHOLDING=0
2018-12-25 09:30:39.256    HOLDING=0
2018-12-25 09:30:39.257    TENERBARS=-1
2018-12-25 09:30:39.258    TEXITBARS=-1
2018-12-25 09:30:39.259    LASTBUY=0
2018-12-25 09:30:39.261    LASTSELL=0
2018-12-25 09:30:39.262    DAYHOLDING=0
2018-12-25 09:30:39.271    持仓=30000
2018-12-25 09:30:39.272    TODAYHOLDING=0
2018-12-25 09:30:39.273    HOLDING=0
2018-12-25 09:30:39.275    TENERBARS=-1
2018-12-25 09:30:39.276    TEXITBARS=-1
2018-12-25 09:30:39.277    LASTBUY=0
2018-12-25 09:30:39.278    LASTSELL=0
2018-12-25 09:30:39.280    DAYHOLDING=0
2018-12-25 09:30:39.289    持仓=40000
2018-12-25 09:30:39.291    TODAYHOLDING=0
2018-12-25 09:30:39.292    HOLDING=0
2018-12-25 09:30:39.293    TENERBARS=-1
2018-12-25 09:30:39.294    TEXITBARS=-1
2018-12-25 09:30:39.296    LASTBUY=0
2018-12-25 09:30:39.297    LASTSELL=0

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/12/25 10:54:26编辑过]

--  作者:FireScript
--  发布时间:2018/12/25 11:14:15
--  

1.HOLDING这个是图表上的持仓啊。和后台概念不一样的。还是说你这里面只是一个名称而已。贴下你debugfile的语句。

2.你这里用的TENTERBARS  TEXITBARS 都是和后台交易监控

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

这里关联的。所以你看到你输出里面都是-1.

3.TENTERBARS TEXITBARS 相关的判断应该没能限制到你开平仓了。所以还得看你的CONDBUY   CONDSELL 如何定义的了。

最好还是给下你的完整代码吧。

--  作者:xlxl
--  发布时间:2018/12/25 13:12:50
--  
ZH1:=\'\';
PZ1:=\'SH510500\';
 
//条件判断
DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  := EMA(DIFF,M);
MACD1 := 2*(DIFF-DEA);
CONDBUY:= MACD1>0;
CONDSELL:=  MACD1<0;
//控制日内交易次数
//IF TTOTALDAYTRADE>=2 THEN EXIT;
 
LASTBUY:= TENTERBARS(0)>0 AND (  TEXITBARS(0)<0   OR (TENTERBARS(0)<TEXITBARS(0)) )  ;
LASTSELL:=TEXITBARS(0)>0  AND   (TEXITBARS(0)<TENTERBARS(0)  )  ;
a:=TBUYHOLDINGEX(ZH1 ,PZ1 ,2 );
DEBUGOUT(\'持仓=%.0f\',a);
//DEBUGOUT(\'TODAYHOLDING=%.0f\',TODAYHOLDING);
DEBUGOUT(\'THOLDING=%.0f\',THOLDING);
DEBUGOUT(\'TENERBARS=%.0f\',TENTERBARS(1));
DEBUGOUT(\'TEXITBARS=%.0f\',TEXITBARS(1));
DEBUGOUT(\'LASTBUY=%.0f\',LASTBUY );
DEBUGOUT(\'LASTSELL=%.0f\', LASTSELL);

DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'持仓=%.0f\',a);
DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'TODAYHOLDING=%.0f\',TODAYHOLDING);
DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'THOLDING=%.0f\',THOLDING);
DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'TENERBARS=%.0f\',TENTERBARS(1));
DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'TEXITBARS=%.0f\',TEXITBARS(1));
DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'LASTBUY=%.0f\',LASTBUY );
DEBUGFILE(\'C:\\金字塔测试\\test2.txt\',\'LASTSELL=%.0f\', LASTSELL);

//如果上次不是买入
TBUY(CONDBUY AND not(LASTBUY) ,10000,MKT,0,0,ZH1,PZ1 );
//如果上次不是卖出
TSELL(CONDSELL AND not(LASTSELL) ,10000,MKT,0,0,ZH1,PZ1);
ENTERBARS(0)>0 AND ( TEXITBARS(0)<0 or="OR" (TENTERBARS(0)0 AND (TEXITBARS(0)
[此贴子已经被作者于2018/12/25 13:14:17编辑过]

--  作者:xlxl
--  发布时间:2018/12/25 13:18:52
--  

这个是测试debugfile和测试报告,

谢谢


--  作者:xlxl
--  发布时间:2018/12/25 13:26:44
--  

不好意思,上面公式的最后一行是不存在的,可能编辑帖子的时候多加的

ENTERBARS(0)>0 AND ( TEXITBARS(0)<0 or="OR" (TENTERBARS(0)0 AND (TEXITBARS(0)

 

这个是监测399905,买卖510500的

 

以下是部分模拟实盘预警信息,

运行结束
18.12.25 13:23:03 399905
持仓=10000
18.12.25 13:23:03 399905
THOLDING=0
18.12.25 13:23:03 399905
TENERBARS=19
18.12.25 13:23:03 399905
TEXITBARS=226
18.12.25 13:23:03 399905
LASTBUY=1
18.12.25 13:23:03 399905
LASTSELL=0
18.12.25 13:23:03 399905
运行结束
18.12.25 13:24:03 399905
持仓=10000
18.12.25 13:24:03 399905
THOLDING=0
18.12.25 13:24:03 399905
TENERBARS=20
18.12.25 13:24:03 399905
TEXITBARS=227
18.12.25 13:24:03 399905
LASTBUY=1
18.12.25 13:24:03 399905
LASTSELL=0
18.12.25 13:24:03 510500
TSell 无有效可平仓数量
18.12.25 13:24:03 399905
TSell 已成功触发下单操作 价格:0 数量:10000
18.12.25 13:24:03 399905
运行结束


--  作者:xlxl
--  发布时间:2018/12/25 13:47:05
--  
以下是引用xlxl在2018/12/25 13:18:52的发言:

这个是测试debugfile和测试报告,

谢谢

文档好像没传上去,再传一遍

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:test2.txt


好像只能先传这个了


--  作者:FireScript
--  发布时间:2018/12/25 14:04:50
--  
 LASTBUY:= TENTERBARS(0)>0 AND (( TEXITBARS(0)<0  ) OR (TENTERBARS(0)<TEXITBARS(0)))   ;
LASTSELL:=TEXITBARS(0)>0  AND   (TEXITBARS(0)<TENTERBARS(0))   ;

这里面的 TENTERBARS   TEXITBARS  没能限制到你的开平仓。因为回测时候这2函数返回值都是-1.
这2个函数依赖于监控的记录,所以回测时候这2个函数不能正确取值的。  你需要用其他方式去实现你的需求。
上面2行代码思路是什么?为什么不直接用持仓情况去判断上次是买还是卖?


--  作者:xlxl
--  发布时间:2018/12/25 14:28:59
--  
持仓 容易被其他策略的持仓混淆,TBUYHOLDINGEX无法识别哪个策略的买入

用虚拟持仓HOLDING,DAYHOLDING好像也不行