以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  做精细化历史测评时发现的几个问题  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=182670)

--  作者:popypopy
--  发布时间:2020/10/24 23:56:01
--  做精细化历史测评时发现的几个问题
我的精细化历史测评的几个参数设定:
前高位置:=peakbars(1,8,1);
前高价:=ref(close,前高位置);
QianGaoDate:=ref(date+19000000,前高位置);

精细化历史测评时间段:2020年4月15日-10月15日,测试品种247只股,按固定间隔60秒回测

测评结果看日志发现有如下几个问题,前三个和peakbars相关,第4个是关于回测时的买入逻辑
1、刚开始产生符合判断条件的交易的第一天内发生peakbars取到的peakbars有问题,案例:柏楚电子,6月30日判断突破前高,但前高价的赋值是-1.#QO -1.#R%,QianGaoDate的值是-1,不知道系统是取到哪天的值作为前高了,截图如下:

图片点击可在新窗口打开查看此主题相关图片如下:wx20201024-233032@2x.png
图片点击可在新窗口打开查看

2、取到了前高的值,但基于前高日期查到的前高价和实际当日的收盘价不一致。案例:天邑股份,6月30日突破5月21日的前高,前高价为27.067。但5月21日实际的收盘价是27.28。截图如下:

图片点击可在新窗口打开查看此主题相关图片如下:wx20201024-233402@2x.png
图片点击可在新窗口打开查看

3、如果将QianGaoDate命名为中文“前高日期”,前高日期:=ref(date+19000000,前高位置); msgout(1,numtostr(前高日期,0)会导致无法输出,经过几次验证发现,如果将中文的“前高日期”改为字母类型的名称,比如QianGaoDate,就不会出问题

4、做精细化历史测评前我已经补充了日线、1分钟线、5分钟线等主要数据,买入条件是一旦突破前高,则以前高价、5日均线价格挂单买入。根据回测明细发现,以天邑股份为例,6月30日当股价突破前高价时,当前价格已经高于5日均线26.482且之后也一直没有回踩5日均线位置,但由于当日开盘时曾经跌破过5日均线,所以回测结果显示5日均线价26.482的挂单也成交了。这在现实情况下是不可能发生的。按说我已经补充了1分钟和5分钟的数据,即便不依靠分笔数据,系统也应该可以判断出不可能在5日均线价成交才对。天邑股份6月30日的分时图截图如下:

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





--  作者:无为剑
--  发布时间:2020/10/25 7:56:43
--  
完全的文字描述我们是无法帮助到你的,请将可以呈现问题的公式代码一并贴出,并最好详细阐述使用过程。
部分的价格不同,建议看一下是否是复权问题产生的

--  作者:popypopy
--  发布时间:2020/10/29 12:10:55
--  
经过我排查发现出现前高价的赋值=-1.#QO -1.#R%这种诡异情况的原因是由于在我设定的回测时间段内的当前时间往前到回测起始时间peakbars(1,8,1)没有找到符合条件的峰值。
例如以柏楚电子为例,我设定的精细化历史评测时间段是2020年4月15日至2020年10月25日,当前时间在2020年6月30日
在6月30日检查peakbars(1,8,1), 由于在4月15日至6月30日这段时间内没有找到符合8%条件的峰值,导致peakbars(1,8,1)输出了-1.#QO -1.#R%,继而导致我引用ref(close,peakbars(1,8,1))输出了-1.#QO -1.#R%

程序的这种逻辑我认为是有漏洞的,虽然我指定了回测时间段是2020年4月30日开始,但是在计算peakbars指标时,只要我本地下载的历史数据足够,应该以当前时间往前找出符合条件的峰值位置,哪怕这个峰值位置是在4月30日之前。否则就会导致发生这样的错误
[此贴子已经被作者于2020/10/29 12:11:38编辑过]

--  作者:banzhuan
--  发布时间:2020/10/29 14:04:19
--  
回测是按时间段去判断的,在这个时间段之前就算有数据也不会去参与计算,所以 peakbars 返回的就是一个空值
--  作者:popypopy
--  发布时间:2020/10/29 21:11:53
--  
这样的规则设定不符合实际情况啊,
我设置从4月15号开始回测,意味着从4月15号开始就需要开始寻找买点。而判断是否4月15号有没有买点,是要基于4月15号之前若干天的历史数据做判断的。如果仅因为设置了从4月15号开始回测,就把4月15号之前的指标输出置空,那等于我实际的有效回测时间就不是从4月15号开始了

--  作者:无为剑
--  发布时间:2020/10/29 22:20:31
--  
这个你考虑将回测开始时间往前移一下确保4月15号能出现信号,然后代码中判断日期如果小于4月15号的的返回不做计算