我写的策略,在模拟盘运行时,不发单,请帮助
我写了一个策略,回测复盘时有交易信号。 加载到交易策略中自动运行,账户为股票模拟账户,数据源为次新股,肉眼观察,今天应该有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; } } } //------------------------------------------------------------------------