开拓者期货期权程序化系统交易论坛
标题:
公式含有全局变量为何优化不正确?
[打印本页]
作者:
freetiger
时间:
2013-2-23 17:37:42
标题:
公式含有全局变量为何优化不正确?
用穿堂风的R-Breaker测试,优化结果见图:[attach]14098[/attach]
而测试报告的结果是:[attach]14099[/attach]
按理测试报告和优化结果第一行的数据一致,为何会不同?一致怀疑公式含有全局变量或数据库会导致优化不准。大家有无解决办法?附RB代码:
//------------------------------------------------------------------------
// 简称: R_Breaker
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: 穿堂风
//------------------------------------------------------------------------
/*R-Breaker*/
Params
Numeric notbef(9.00);
Numeric notaft(14.55);
Numeric f1(0.35);
Numeric f2(0.07);
Numeric f3(0.25);
Numeric reverse(1.00);
Numeric rangemin(0.2);
Numeric xdiv(3);
Vars
NumericSeries ssetup(0);
NumericSeries bsetup(0);
NumericSeries senter(0);
NumericSeries benter(0);
NumericSeries bbreak(0);
NumericSeries sbreak(0);
NumericSeries ltoday(0);
NumericSeries hitoday(9999);
NumericSeries startnow(0);
NumericSeries div(0);
BoolSeries rfilter(false);
Numeric i_reverse;
Numeric i_rangemin;
Numeric i_vB;
Numeric i_vS;
Begin
i_reverse = reverse*(OpenD(0)/100);
i_rangemin = rangemin*(OpenD(0)/100);
if(BarStatus==0)
{
startnow=0;
div=max(xdiv,1);
}
if(Date != Date[1])
{
SetGlobalVar(0,0);
SetGlobalVar(1,0);
startnow=startnow+1;
ssetup=hitoday[1]+f1*(Close[1]-ltoday[1]);
senter=((1+f2)/2)*(hitoday[1]+Close[1])-(f2)*ltoday[1];
benter=((1+f2)/2)*(ltoday[1]+Close[1])-(f2)*hitoday[1];
bsetup=ltoday[1]-f1*(hitoday[1]-Close[1]);
bbreak=ssetup+f3*(ssetup-bsetup);
sbreak=bsetup-f3*(ssetup-bsetup);
hitoday=High;
ltoday=Low;
rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;
}
if(High>hitoday)
{
hitoday=High;
}
if(Low<ltoday)
{
ltoday=Low;
}
if(Time*100>=notbef and Time*100<notaft and startnow>=2 and rfilter)
{
if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)
{
SetGlobalVar(1,10000);
}
if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)
{
If(Low<=(senter+(hitoday-ssetup)/div))
{
SellShort(1,senter+(hitoday-ssetup)/div);
SetGlobalVar(1,Time);
Return;
}
}
if(ltoday<=bsetup and marketposition<1 and GetGlobalVar(1)<1)
{
If(High>=(benter-(bsetup-ltoday)/div))
{
Buy(1,benter-(bsetup-ltoday)/div);
SetGlobalVar(1,Time);
Return;
}
}
if(marketposition==-1)
{
SetGlobalVar(0,1);
if(High-EntryPrice>=i_reverse)
{
BuyToCover(1,entryprice+i_reverse);
Return;
}
}
if(marketposition==1)
{
SetGlobalVar(0,1);
if(EntryPrice-Low>=i_reverse)
{
Sell(1,entryprice-i_reverse);
Return;
}
}
if(marketposition==0)
{
if(High>=bbreak and GetGlobalVar(0) == 0)
{
Buy(1,bbreak);
Return;
}
}
if(marketposition==0)
{
if(low<=sbreak and GetGlobalVar(0) == 0)
{
SellShort(1,sbreak);
Return;
}
}
}
if(Time*100>=notaft and Time<0.1600)
{
if(marketposition==-1)
{
BuyToCover(1,Open);
}
if(marketposition==1)
{
Sell(1,Open);
}
}
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2011/06/27 14:29
// 版权所有
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
复制代码
作者:
TRANS-AM
时间:
2013-2-23 19:42:22
测试结果都会有误差的,比如换台电脑,结果又不一样了,这个不必太纠结,上模拟盘测试看看
作者:
freetiger
时间:
2013-2-23 21:14:52
谢谢ls,从图上的数据可以看出绝非误差
欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/)
Powered by Discuz! X2