全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
请教编程问题
2022-09-28 10:03

老师好,我想请教下,我本来想查看下我写的程序里面的止盈情况,用plotbool来标记出来,但问题却是有很多地方都标出来,有些地方我对比过数据应该有信号却没有,想请教下,问题出在哪里?

 

//------------------------------------------------------------------------
// 简称: 
// 名称: 
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
    Numeric fastlength1(13);//快线周期
    Numeric slowlength1(27);//慢线周期
    Numeric lots(2);//手数
    Numeric n(8);//均线
    numeric long_TakeProfitSet(0.07);
    Numeric long_stoploss(300);
    numeric short_stoploss(300);
    
Vars
    Numeric FastLength(12);
    Numeric SlowLength(26);
    Numeric MACDLength(9);

    
    Series<Numeric> MACDDiff; 
    series<Numeric> AvgMACD;
    series<Numeric> MACDValue;
    bool golden(false);
    bool ending(false);
    
    bool upDiff(false);
    bool dnDiff(false);
    bool con_down(false);
    
    bool upvalue(false);
    bool dnvalue(false);
    
    series<Numeric> ma;

    Numeric TR;
    Numeric MinPoint;
    Numeric MyEntryPrice;
    
    series<Numeric> status;
    
    
Events
OnInit()
{
    AddDataFlag(Enum_Data_AutoSwapPosition());    //设置自动换仓
}

OnBar(ArrayRef<Integer> indexs)
{
    Range[0:DataSourceSize() - 1]
    {
        
        MACDDiff = xAverage(Close, FastLength ) - xAverage(Close, SlowLength ) ;    
        AvgMACD = XAverage(MACDDiff,MACDLength);
        MACDValue = 2*(MACDDiff - AvgMACD);
        ma = Average(close,n);
        PlotNumeric ("ma",ma);
        golden = CrossOver(MACDDiff,AvgMACD);
        ending = CrossUnder(MACDDiff,AvgMACD);

        //////////////////////////////////////////////////////////////////////////////////
        upDiff =  MACDDiff > MACDDiff[1];                                                  //DIFF做多信号
        dnDiff =  MACDDiff < MACDDiff[1];                                                   //DIFF做空信号

        upvalue = MACDVALUE > MACDVALUE[1] ;                                                  //macd做多信号
        dnvalue = MACDVALUE < MACDVALUE[1];                                                 //macd做空信号
        
        MyEntryPrice = AvgEntryPrice;  
        MinPoint = MinMove * PriceScale;
        TR= High - Low;
        Commentary("TR = " + text(TR));
        

    ////////////////////////////////////////////////////////////////////       

            If ( high >= round( AvgEntryPrice * (1 + long_TakeProfitSet),0)) //满足多头固定止盈条件平仓
               {
                  sell(0 ,Round(AvgEntryPrice * (1 + Long_TakeProfitSet),0));
                  PlotBool("止赢",true,close);                              
               }
            If ( low <= round( AvgEntryPrice * (1 - long_TakeProfitSet),0)) //满足空头固定止盈条件平仓
               {
                  BuyToCover(0 ,Round(AvgEntryPrice * (1 - Long_TakeProfitSet),0));                              
               }   
            if(BarsSinceEntry>=1 and  close < ma and MarketPosition == 1) //多头反向突破均线止损离场
                {
                Sell(lots,close);
                }
            if(BarsSinceEntry>=1 and  close > ma and MarketPosition == -1)//空头反向突破均线止损离场
                {
                BuyToCover(lots,close);
                }    
            if(MarketPosition == 1 and  low <= AvgEntryPrice- long_stoploss) Sell(lots,AvgEntryPrice- long_stoploss);
            if(MarketPosition == -1 and high >= AvgEntryPrice + short_stoploss) 
                {
                    BuyToCover(lots,AvgEntryPrice + short_stoploss);
                    //PlotBool("止损",true,close);
                }
            if (avgmacd >0 and upvalue and close > ma and MarketPosition != 1 ) //多头开仓条件
            {
                  buy(lots ,close);  
            }
            if (avgmacd <0 and dnvalue and close < ma and MarketPosition != -1 ) //空头开仓条件
            {
                  sellshort(lots ,close);  
            }
    }        
    
    
}


    


//------------------------------------------------------------------------
// 编译版本    2022/01/09 173139
// 版权所有    20220106181726058
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

tblaocai

一个比较明显的错误是,不判断marketposition就比较多空的止盈条件,出来的结果不知道是什么。另外,多个进出场条件的情况,写的时候,真得要仔细考虑写的顺序,甚至是需要把条件合在一起进行判断的

2022-09-28 22:18
您未登录,请先 登录注册 后发表评论
顶部