以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  金字塔软件问题提交  (http://222.73.7.161/bbs/list.asp?boardid=2)
----  测试问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=2&id=54381)

--  作者:投资老友-WAN
--  发布时间:2013/7/29 11:03:04
--  测试问题
我最近开发一个模型,加载到图表上一切正常(见第一张图),但是在测试平台上测试时,完全没有成交数据(见第二张图),行情数据和测试平台都是正常的(用其他模型测试验证),请问可能是什么原因??
图片点击可在新窗口打开查看此主题相关图片如下:捕获1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:捕获2.jpg
图片点击可在新窗口打开查看

--  作者:jinzhe
--  发布时间:2013/7/29 11:07:41
--  

测评没有结果,有如下几种可能:

1.没有历史数据

2.测试时间设置错误

3.费率设置错误


--  作者:jsh578
--  发布时间:2013/7/29 11:13:08
--  
有没有类似这样的开仓语句: IF aa=0 and holding=0 and……
--  作者:投资老友-WAN
--  发布时间:2013/7/29 11:19:34
--  
您说的这三点好像都不是,同样的平台(品种和时间都不变),另外模型测就没问题。检查费率设置也没问题。
--  作者:jsh578
--  发布时间:2013/7/29 11:32:27
--  

RUNMODE:0;  
    
variable:aa=0; 

M1:MA(C,5);
M2:MA(C,10);

KD:=REF(CROSS(M1,m2),1);    //开多条件
PD:=REF(CROSS(m2,M1),1);    //平多条件

IF aa=0 and holding=0 and TIME<=150000 and kd THEN 
begin 
aa:=1;
buy(1,1,limitr,o);
end

if aa=1 and holding=1 and pd then 
begin
aa:=0;
sell(1,1,limitr,c);
end

这位朋友你用这个代码测一下,你只要起始时间不是20100416,你的回测就是零!!!
[此贴子已经被作者于2013/7/29 11:33:06编辑过]

--  作者:投资老友-WAN
--  发布时间:2013/7/29 11:37:23
--  

开仓语句是:

 

 IF TRADESIGN=0 and (BPK1 OR BPKS1) THEN BEGIN{开多仓}
  BUY(1,ORDERNO,THISCLOSE);
  TRADESIGN:=1;
  GOTO CONTINUELINE;
 END
 
 IF TRADESIGN=1 and (PWIN) THEN BEGIN{平多仓}
  SELL(1,HOLDING,THISCLOSE);
  TRADESIGN:=0;HHPROFIT:=0;//drawnumber(1,H,FPROFIT,0);
  IF  (POSC>5 AND P5<P4) THEN BEGIN{如果下穿MA线的同时,也下穿LL线,开空仓}
  BUYSHORT(1,ORDERNO,THISCLOSE);
  TRADESIGN:=-1;
  END
  GOTO CONTINUELINE;
 END

 IF TRADESIGN=0 and (SPK1 OR SPKS1) THEN BEGIN{开空单}
  BUYSHORT(1,ORDERNO,THISCLOSE);
  TRADESIGN:=-1;
  GOTO CONTINUELINE;
 END


--  作者:jsh578
--  发布时间:2013/7/29 11:45:38
--  

依我看可能就是出现在你的这个条件判断上 TRADESIGN=0,你把它改成holding试试


我上面的代码,是金字塔的一个bug,曾经和他们反应过,他们说等后续的版本解决,也和他们电话沟通过!
--  作者:投资老友-WAN
--  发布时间:2013/7/29 15:48:54
--  

模型改了一些语句以后,可以测了,但是还是原来不知道原来不能测的原因,问金字塔客服也说不清楚什么问题


--  作者:jinzhe
--  发布时间:2013/7/29 15:50:16
--  
不能测试基本都是从上面几点入手的,如果还检查不出问题,就要从代码入手
--  作者:董小球
--  发布时间:2013/7/30 15:00:19
--  
以下是引用jsh578在2013/7/29 11:32:27的发言:

RUNMODE:0;  
    
variable:aa=0; 

M1:MA(C,5);
M2:MA(C,10);

KD:=REF(CROSS(M1,m2),1);    //开多条件
PD:=REF(CROSS(m2,M1),1);    //平多条件

IF aa=0 and holding=0 and TIME<=150000 and kd THEN 
begin 
aa:=1;
buy(1,1,limitr,o);
end

if aa=1 and holding=1 and pd then 
begin
aa:=0;
sell(1,1,limitr,c);
end

这位朋友你用这个代码测一下,你只要起始时间不是20100416,你的回测就是零!!!
[此贴子已经被作者于2013/7/29 11:33:06编辑过]

这个代码运行的问题在于,你使用了全局变量,而全局变量只在第一根K初始化为0,其余的就都不是0了,所以比如你本地第一根K是股指的20100416时,如果你从非0416这一天开始测试也就变成了,aa始终都是等于1的,因此也就没有任何测试结果了,这不是软件BUG。
了解了全局变量的运行机制后,应当避免这种情况,比如你写的这段代码应该是为了区分第一次开仓的不同吧,直接用普通变量就行了,不需要全局变量。