我写的策略,在模拟盘运行时,不发单,请帮助
2021-11-17 15:08

我写了一个策略,回测复盘时有交易信号。
加载到交易策略中自动运行,账户为股票模拟账户,数据源为次新股,肉眼观察,今天应该有3笔委托发单,但是一笔也没有,不知程序错在哪里,请指教,策略代码如下:

//------------------------------------------------------------------------
// 简称: zndk20211102_02_42
// 名称: 股票 次新股,突破5日前高入场,跟踪止盈
// 类别: 公式应用
// 类型: 用户应用
    //入场,30日内次新股,突破5日前高,入场价kdj_price,
    //资金管理,每单固定金额5万;
    //止损,成本的20%,k_Bstop = kdj_price*0.80;
    //止盈,跟踪止盈,1、连续15日,股价在5日线之上,5日线为止盈位;
    //               2、浮盈40%以上,零保护;
   
//------------------------------------------------------------------------
Params
    //此处添加参数
    //Numeric millsecs(1000);
    Numeric n(5);                //突破周期
    Numeric k(30);                //上市时间(小于30日)
    Numeric RiskRatio(50000);    //仓位轻重 (5万元)
    Numeric stop_bl(20);        //止损比例 (10~20%)
    
    Numeric lingbaohu(40);            //零保护位置 浮盈40%
    //Numeric jiacang(5);             //加仓次数(1~5)
    
Vars
    //此处添加变量
    Numeric lots;    //可开仓手数
    //Series<Numeric> OpenLots;   //历次建仓手数
    
    //Series<Numeric> ma2d;
    Series<Numeric> ma5d;    
        
    Global Numeric kdj_Price;        //kdj低位时的入场价
    
    //Global Numeric jiancang(0);    //建仓次数(1~5)
    
    
    Series<Numeric> k_ATR;  
    Global Numeric k_Bstop;   //止损价
    
    Numeric Highest_bs;// = Highest(high, BarsSinceLastEntry());//最后一次建仓以来的最高价
        
        
Defs
    //此处添加公式函数
    Numeric calcAvg(Numeric a,Numeric b)
    {
        return (a+b)/2;
    }

Events    

     OnInit()
    {
        //SubscribeBar(symbol(),"15m",20210301);//"i2109.DCE"
        //SubscribeBar(symbol(),"1D",20210301);//"i2109.DCE"
       
        Range[0:DataCount-1]
        {
            AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权
            AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格
            //AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓
            //AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算
        }
    
    }
    
    //此处实现事件函数
OnBar(ArrayRef<Integer> indexs)
{
        Highest_bs = Highest(high, BarsSinceLastEntry());//最后一次建仓以来的最高价
        
        //入场价位计算
        kdj_Price = Highest(high[1],n);
            
        //仓位计算
        lots = RiskRatio/kdj_Price;//计划购买股票手数
        lots = RoundUp(lots,-2); // 对小数向上取整
        
        
                
    //均线计算
    //ma2d  = Average(SMA(Close,2,1),2);//2日均线
    ma5d  = Average(SMA(Close,4,1),2);//5日均线
    
        Bool bool06 = high>kdj_Price;
        Bool bool08 = BarCount()<k;
        bool bool09 = open>ma5d[1] && close>ma5d[1];//价格持续在5日线之上
        
    //**********************
    //多头开、平仓
    //**********************
                
    If(MarketPosition <> 1 )
    {
        
        If(bool08 && Bool06)//突破5日高点
        {
            Buy(lots,max(kdj_price,open));
            k_Bstop =kdj_Price*(100 - stop_bl)/100;   //止损
            //jiancang = jiancang+1;
        }
    }
        
   
    //多头持仓,止损,止盈,加仓
    if(MarketPosition == 1)
    {
        k_Bstop =RoundUp(LastEntryPrice()*(100 - stop_bl)/100,2);   //止损
        
        //止损    
        If( Low<=k_Bstop )
        {
            Sell(0,k_Bstop);//止损平仓
        }
                        
        //跟踪止盈
        If(CountIf(bool09,15)>=15)
        {
            k_Bstop = ma5d[1];//Lowest(Low,3);
        }Else
        If( high>=Highest_bs && High>=LastEntryPrice()*(100+lingbaohu)/100)//有相当盈利后零保护
        {
            k_Bstop = Highest_bs/(100+lingbaohu)/100;            
        }
        
    }
    
    
}

//------------------------------------------------------------------------

评论区
vdm666

谢谢指教,我试一下

2021-11-18 08:03
顶部