以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  inblock函数有时返回不正确的结果  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=78633)

--  作者:a141027
--  发布时间:2015/5/15 8:54:26
--  inblock函数有时返回不正确的结果
我想检测当前品种是否在某个自建的板块当中,使用方法如下

建新板块A,这个板块把已经退市的品种都过滤掉了;
建立一个独立公式“检测”,仅一行代码:通过:=inblock(\'A\');
在当前品种中执行 stkindi(\'\',\'A.通过\',0,6,0);

绝大部分品种的结果都是对的,但总是有些不在板块中的品种却莫名其妙地通过了检测。这会导致我的策略总是有出错的地方,因为不知道哪里出了问题,想容错都不知道从哪着手。

为何inblock函数会出现这样的结果?

--  作者:a141027
--  发布时间:2015/5/15 9:16:04
--  
还补充一个更无法理解的问题,为了节省计算资源,我限定仅当todaybar=2的时候进行检测,结果返回至某个全局变量并显示,到收盘时间自动重置该全局变量。大部分品种的运行结果都是稳定的,但那些inblock返回结果不正确的品种的返回值在todaybar>2的时候会莫名其妙地无规则跳动,我仔细观察了,仅仅是inblock返回值不正确的品种会出现这种情况,返回值正常的都不会这样。情况很吓人,甚至你不动光标,光标停在任何一根K线上时,该全局变量也会自己不断上下跳动。你inblock执行结果不对也就算了,怎么todaybar>2的时候它的值还会变?那if todaybar=2 then语句为什么不起作用?
--  作者:yukizzc
--  发布时间:2015/5/15 9:34:57
--  
你直接通过:=inblock(\'A\');这个输出到那些品种上看呢,输出结果是1还是0
--  作者:a141027
--  发布时间:2015/5/15 9:45:03
--  
直接到那些品种上看时结果是对的,是0,而且也不会自己跳。见图。
此主题相关图片如下:未命名图片_1.png
按此在新窗口浏览图片

--  作者:yukizzc
--  发布时间:2015/5/15 10:05:37
--  

我这边用了没发现不对额

总是有些不在板块中的品种却莫名其妙地通过了检测,您把你这边设置的板块以及里面品种说下,并注明在哪个品种下返回结果不对。

我们这边看下。


--  作者:a141027
--  发布时间:2015/5/15 10:53:00
--  

行,我把步骤罗列如下,请你复制代码到你电脑上重复一遍看看结果是否跟我说的一样。出问题的不止一个品种,这里只提了其中一个,J03,焦炭1603,为简单化查找错误的过程,我简化了公式。

 

1、建立公式”筛选“,在条件选择中以该公式的结果建立板块A,代码如下。执行公式的时候不要点选”停牌的品种“。

 

非连续:=not(strfind(stkname(),\'连续\',1)),nodraw;
非指数:=not(strfind(stkname(),\'指数\',1)),nodraw;
通过:非连续 and 非指数;

 

2、建立公式”检测“,检测当前品种是否包括于板块A当中,代码如下。

 

通过:inblock(\'A\'),nodraw;

 

3、另建公式”读结果“,在1分钟线下运行于任何连续合约都行,代码如下:

variable:AA=drawnull;

 

if todaybar=2 then AA:=stkindi(\'J03\',\'检测.通过\',0,6,0);

 

通过:AA,nodraw;

 

if time()=closetime(0) then AA=drawnull;

 

4、观察结果,我这里的情况就是上面说的那样,”通过“字段返回的结果是很奇怪的数字,而且不断自己跳动,即时光标不动,它也时不时自己在那里跳动。

 

 


--  作者:a141027
--  发布时间:2015/5/15 10:55:58
--  

上面第3步那句if...then的代码还可以改成这样,你就能更清楚看到J03通过了检测,并且返回结果不断自己跳。

 

if todaybar=2 then AA:=if(stkindi(\'J03\',\'检测.通过\',0,6,0),stkindi(\'J03\',\'检测.通过\',0,6,0),drawnull);


--  作者:a141027
--  发布时间:2015/5/15 10:59:17
--  

上面“读结果”公式最后一行AA后面我打漏了一个冒号,但系统里的公式是对的。

 

if time()=closetime(0) then AA:=drawnull;


--  作者:a141027
--  发布时间:2015/5/15 11:07:44
--  
忘了说,筛选品种进A板块的时候,范围全选上期,郑期和大期三个交易所。
--  作者:FexTel
--  发布时间:2015/5/15 11:11:39
--  
好的,我们会安排具体工作人员测试后回复您