在编写以下策略时,代码能够正常运行买卖,但是当我加入了一个状态变量Flag之后,代码编译没错,但是交易出问题了,求老师帮我看看
Params
Numeric Length(14); //周期
Numeric AvgLength(9); //平均周期
Vars
Global Numeric Lsign;
Series<Numeric> TmpValue;
Numeric Mean( 0 );
Numeric AvgDev( 0 );
Numeric Counter( 0 ) ;
Series<Numeric> CCI(0);
Numeric CCIAvg;
Numeric MA;
Events
OnBar(ArrayRef<Integer> indexs)
{
//CCI的计算
TmpValue = High + Low + Close;
Mean = AverageFC( TmpValue, Length ) ;
AvgDev = 0 ;
for Counter = 0 to Length - 1
{
AvgDev = AvgDev + Abs( TmpValue[Counter] - Mean ) ;
}
AvgDev = AvgDev / Length ;
if( AvgDev == 0)
CCI = 0;
Else
CCI = ( TmpValue - Mean ) / ( 0.015 * AvgDev ) ;
CCIAvg = AverageFC(CCI, AvgLength );
If(CCI > CCI[1])
{
Lsign = 1; //做多
}Else
{
Lsign = -1; //做空
}
MA = Average(Close[1],10);
If(Lsign == 1 And MarketPosition == 0)
{
//做多
Commentary("做多");
Buy(1,Close);
}
If(Lsign == -1 And MarketPosition == 0)
{
//做空
Commentary("做空");
SellShort(1,Close);
}
If(Low < MA And MarketPosition == 1)
{
//做多平仓
Commentary("做多平仓");
Sell(1,MA);
}
If(High > MA And MarketPosition == -1)
{
//做空平仓
Commentary("做空平仓");
BuyToCover(1,MA);
}
//}
Commentary("CCI:"+Text(CCI));
Commentary("CCI[1]:"+Text(CCI[1]));
Commentary("MAR:"+Text(MarketPosition));
PlotAuto("MA",MA);
}
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
Params
Numeric Length(14); //周期
Numeric AvgLength(9); //平均周期
Vars
Global Numeric Lsign;
Series<Numeric> TmpValue;
Numeric Mean( 0 );
Numeric AvgDev( 0 );
Numeric Counter( 0 ) ;
Series<Numeric> CCI(0);
Numeric CCIAvg;
Numeric MA;
Global Numeric Flag(0);
Events
OnReady()
{
Print("0:"+Text(Flag));
}
OnBar(ArrayRef<Integer> indexs)
{
//CCI的计算
TmpValue = High + Low + Close;
Mean = AverageFC( TmpValue, Length ) ;
AvgDev = 0 ;
for Counter = 0 to Length - 1
{
AvgDev = AvgDev + Abs( TmpValue[Counter] - Mean ) ;
}
AvgDev = AvgDev / Length ;
if( AvgDev == 0)
CCI = 0;
Else
CCI = ( TmpValue - Mean ) / ( 0.015 * AvgDev ) ;
CCIAvg = AverageFC(CCI, AvgLength );
If(CCI > CCI[1])
{
Lsign = 1; //做多
}Else
{
Lsign = -1; //做空
}
MA = Average(Close[1],10);
If(Flag == 0)
{
Print("1:"+Text(Flag));
If(Lsign == 1 And MarketPosition == 0)
{
//做多
Commentary("做多");
Print("2:"+Text(Flag));
Flag = 1;
Buy(1,Close);
}
If(Lsign == -1 And MarketPosition == 0)
{
//做空
Commentary("做空");
Print("3:"+Text(Flag));
Flag = 1;
SellShort(1,Close);
}
}
If(Flag == 1)
{
If(Low < MA And MarketPosition == 1)
{
//做多平仓
Commentary("做多平仓");
Print("4:"+Text(Flag));
Flag = 0;
Sell(1,MA);
}
If(High > MA And MarketPosition == -1)
{
//做空平仓
Commentary("做空平仓");
Print("5:"+Text(Flag));
Flag = 0;
BuyToCover(1,MA);
}
}
//}
Commentary("CCI:"+Text(CCI));
Commentary("CCI[1]:"+Text(CCI[1]));
Commentary("MAR:"+Text(MarketPosition));
PlotAuto("MA",MA);
}
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
谢谢老师,已经解决了,以前问过类似的,之前忘记了,具体参见http://www.tbquant.net/forum/1761.html
代码诊断可以看置顶帖发邮件讲解