全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
关于引入一个状态变量只之后代码无法正常运行的问题
2022-03-17 13:51

在编写以下策略时,代码能够正常运行买卖,但是当我加入了一个状态变量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公式修改和重写的权利
//------------------------------------------------------------------------

202****8153925177

谢谢老师,已经解决了,以前问过类似的,之前忘记了,具体参见http://www.tbquant.net/forum/1761.html

2022-03-17 15:02
kyover

代码诊断可以看置顶帖发邮件讲解

2022-03-17 15:20
您未登录,请先 登录注册 后发表评论
顶部