全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
请指教一下,我的程序有没有什么编写错误的地方
2022-03-01 23:01

Params
    Numeric length(9);
    Numeric LengthRSI(16);
    Numeric MTMlength(5);     //MTM均值计算值
    Numeric longband(60);   //rsi 向上突破边界值
    Numeric shoryband(40); //rsi 向下突破边界值
    Numeric lots(1);
Vars
    series<Numeric> MTM(0);    
    series<Numeric> MTMMA(0);
    series<Numeric> longstop(0);
    series<Numeric> Highafterentry(0);
    series<Numeric> shortstop(0);
    series<Numeric> lowafterentry(0);
    series<Numeric> NetChgAvg( 0 );
    series<Numeric> TotChgAvg( 0 );
    series<Numeric> RSIValue;
    Numeric SF( 0 );
    Numeric Change( 0 ); 
    Numeric ChgRatio( 0 ) ;
    
    Numeric stoppoint(10);  //多头止损点
    Numeric stoppoint1(10);  //空头止损点


Events

    OnBar(ArrayRef<Integer> indexs)
{
    
        stoppoint=Average(TrueRange(),10);
        stoppoint1=Average(TrueRange(),10);

        MTM=close-close[length];  //计算MTM动能指标
        MTMMA=Average(MTM,MTMlength); //计算MTM动能指标均值
        //-------------------------计算RSI-------------------------------
        If(CurrentBar <= LengthRSI - 1)
        {
            NetChgAvg = ( Close - Close[LengthRSI] ) / LengthRSI ;
            TotChgAvg = Average( Abs( Close - Close[1] ), LengthRSI ) ;
        }
        Else
        {
            SF = 1/LengthRSI;
            Change = Close - Close[1] ;
            NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;
            TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ; 
        }

        If( TotChgAvg <> 0 )
        {
            ChgRatio = NetChgAvg / TotChgAvg;
        }
        else
        {
            ChgRatio = 0 ;
        }

        RSIValue = 50 * ( ChgRatio + 1 ); 
//---------------------------开仓条件为MTM 金叉MTM均值意味着行情呈现强势,
//并且同时RSI 也突破做多边界,反之亦然----------------------------


        if (marketposition==0 && CrossOver(mtm[1],mtmma[1])  && RSIValue[1]>=longband )
        {
            buy (lots,Open);
        }
        if (marketposition==0 &&   CrossUnder(mtm[1],mtmma[1]) && RSIValue[1]<=shoryband)
        {
        sellshort(lots,Open);
        }   
        if (barssinceentry==0)
        {
            longstop=min(low,low[1])-stoppoint;   //入场的当跟k线的最低价与前一根k线的最低价进行比较,谁低作为出场止损价
            Highafterentry=high;
        }

//-------------------------多头出场模块--------------------------------------
        if (high>Highafterentry)
        {
            Highafterentry=high;  //如果不断创新高Highafterentry 这个变量值就是新高
        }  
        if (barssinceentry>0)
        {
            if (c[1]>Highafterentry[2]) 
            {
                longstop=min(low,low[1])-stoppoint;  //如果收盘价比前一个新高要高,那么止损价格就变为这一根k线和前低的最低价-10为止损点
            } 
        } 

        if (marketposition==1 && Low<=longstop) 
        { 
        sell(lots,longstop);  //止损操作止损价格为longstop,计算方法见上一句
        }
//-------------------------空头出场模块--------------------------------------
        if (low<lowafterentry) 
        {
            lowafterentry=low;  //如果不断创新低lowafterentry 这个变量值就是新低
        }   
        if (barssinceentry==0) 
        {
            shortstop=max(high,high[1])+stoppoint;//入场的当跟k线的最高价与前一根k线的最高价进行比较,谁低作为出场止损价
            lowafterentry=low;
        }


        if (barssinceentry>0)
        {
            if (c[1]<lowafterentry[2])
             {
                 shortstop=max(high,high[1])+stoppoint;  //入场的当跟k线的最高价与前一根k线的最高价进行比较,谁高作为出场止损
             }  
        }
        if (marketposition==-1 && high>=shortstop) 
        {
            buytocover(lots,shortstop);  //止损操作止损价格为longstop,计算方法见上一句
        }  
}

kyover

检查错误的主要步骤有两部分

第一部分,观察图表上的信号,确认信号是否与策略思路一致

第二部分,模拟交易,检查实际报单的时间价格手数是否和图表信号一致

2022-03-02 08:28
您未登录,请先 登录注册 后发表评论
顶部