图表信号与策略报告不匹配
按照下面的函数跑玉米淀粉,策略报告显示2023年7月25日到2024年7月25日两小时周期有300多笔交易,但是图表远小于这个数字,是有bug吗?Params Numeric Length(8); //周期 Numeric Offset(0.6); //标准差倍数 Numeric DMI_N(14); //DMI的N值 Numeric DMI_M(6); //DMI的M值, 本策略中用不到 Numeric ADXLevel(30); //ADX低于此值时被认为行情处于震荡中 Numeric FastLength(5);// 短期指数平均线参数 Numeric SlowLength(10);// 长期指数平均线参数 Vars Series<Numeric> UpLine; //上轨 Series<Numeric> DownLine; //下轨 Series<Numeric> MidLine; //中间线 Numeric Band; Numeric fudu;//计算两轨之间差距 //DMI最终输出 Series<Numeric> oDMIPlus; Series<Numeric> oDMIMinus; Series<Numeric> oDMI; Series<Numeric> oADX; Series<Numeric> oADXR; Series<Numeric> oVolty; //DMI过程计算 Series<Numeric> sDMI; Series<Numeric> sADX; Series<Numeric> cumm; Series<Numeric> sVolty; Numeric PlusDM; Numeric MinusDM; Numeric UpperMove; Numeric LowerMove; Numeric SumPlusDM(0); Numeric SumMinusDM(0); Numeric SumTR(0); Series<Numeric> AvgPlusDM; Series<Numeric> AvgMinusDM; Numeric SF; // smoothing factor Numeric Divisor; Numeric i; Series<Numeric> TRValue; //-------------------- Numeric money;//开仓资金 Numeric myprice;//委托价格 Numeric lots;//委托数量 Global Numeric lposition; Global Numeric sposition; Series<String> entr;//入场位置 Events OnInit() { AddDataFlag(Enum_Data_RolloverBackWard()); AddDataFlag(Enum_Data_RolloverRealPrice()); AddDataFlag(Enum_Data_AutoSwapPosition()); AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); SetBeginBarMaxCount(10); //设置最大起始bar数为10 } OnReady() { SetBackBarMaxCount(1+Max(SlowLength,Length)); } OnBarOpen(ArrayRef<Integer> indexs) { If(MarketPosition == -1 && low[1] > MidLine[1])//空头止盈 { BuyToCover(sposition,Open); Commentary(空头止盈); } If(MarketPosition ==1 && high[1] < MidLine[1])//多头止盈 { Sell(lposition,Open); Commentary(多头止盈); } } OnBar(ArrayRef<Integer> indexs) { Numeric a; Numeric result = 1; for a = 0 to DataSourceSize-1 { result = result*data[a].BarExistStatus; } If (result <> 1) Return;//检查跨周期数据源是否闪烁 Numeric risk;//账户当前风险程度 risk = Portfolio_UsedMargin / Portfolio_CurrentEquity;//定义risk为保证金占动态权益比例 money = Portfolio_CurrentEquity * 0.4;//按总风险度的40%,每个品种均分投资额 myprice = Open;//这里使用open,更为精确的是使用委托价格 lots = IntPart(money/(myprice*contractunit*BigPointValue*MarginRatio)); //计算开仓手数 Range[0:DataSourceSize() - 1] { MidLine = AverageFC(Close[1],Length); Band = StandardDev(Close[1],Length,2); UpLine = MidLine + Offset * Band; DownLine = MidLine - Offset * Band; fudu = Offset * Band / MidLine; PlotNumeric(UpLine,UpLine); PlotNumeric(DownLine,DownLine); PlotNumeric(MidLine,MidLine); Commentary(潜在空间:+Text(fudu)); //DMI指标计算, 最终将输出ADX指标 //--------------------------DMI计算开始-----------------------------------// SF = 1/DMI_N; TRValue = TrueRange; If(CurrentBar == DMI_N) { for i = 0 To DMI_N - 1 { PlusDM = 0 ; MinusDM = 0 ; UpperMove = High[i] - High[ i + 1 ] ; LowerMove = Low[ i + 1 ] - Low[i] ; if (UpperMove > LowerMove And UpperMove > 0 ) { PlusDM = UpperMove; }else if (LowerMove > UpperMove And LowerMove > 0) { MinusDM = LowerMove ; } SumPlusDM = SumPlusDM + PlusDM ; SumMinusDM = SumMinusDM + MinusDM ; SumTR = SumTR + TRValue[i] ; } AvgPlusDM = SumPlusDM / DMI_N ; AvgMinusDM = SumMinusDM / DMI_N ; sVolty = SumTR / DMI_N ; } Else if(CurrentBar > DMI_N) { PlusDM = 0 ; MinusDM = 0 ; UpperMove = High - High[1] ; LowerMove = Low[1] -Low ; if (UpperMove > LowerMove And UpperMove > 0 ) { PlusDM = UpperMove; }else if (LowerMove > UpperMove And LowerMove > 0 ) { MinusDM = LowerMove ; } AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ; AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ; sVolty = sVolty[1] + SF * ( TRValue - sVolty[1] ) ; }Else { oDMIPlus = InvalidNumeric; oDMIMinus = InvalidNumeric; oDMI = InvalidNumeric; oADX = InvalidNumeric; oADXR = InvalidNumeric; oVolty = InvalidNumeric; } if (sVolty > 0) { oDMIPlus = 100 * AvgPlusDM / sVolty ; oDMIMinus = 100 * AvgMinusDM / sVolty ; }else { oDMIPlus = 0 ; oDMIMinus = 0 ; } Divisor = oDMIPlus + oDMIMinus ; if (Divisor > 0) { sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor; }else { sDMI = 0 ; } cumm=Cum( sDMI ); if(CurrentBar > 0) { if (CurrentBar <= DMI_N) { sADX = Cumm / CurrentBar ; oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ; }else { sADX = sADX[1] + SF * ( sDMI - sADX[1] ) ; oADXR = ( sADX + sADX[ DMI_M - 1 ] ) * 0.5 ; } } oVolty = sVolty; oDMI = sDMI; oADX = sADX; Commentary(MarketPosition: + Text(MarketPosition())); Commentary(动态权益: + Text(Portfolio_CurrentEquity)); Commentary(保证金占用: + Text(Portfolio_UsedMargin)); //提示各图层多、空仓信息 Commentary(风险度:+Text(risk)); Commentary(ADX:+text(oADX[1])); if(oADX[1] <= ADXLevel) { Commentary(震荡); }else { Commentary(趋势); } If(risk <= 0.4 && MarketPosition <> 1 && oADX[1] > ADXLevel && High >= UpLine)//在震荡市,限制开仓规模 { Buy(lots,max(high,UpLine));//符合做多环境,做多 lposition = lots; } If(risk <= 0.4 && MarketPosition <> -1 && oADX[1] > ADXLevel && low <= downLine) //在震荡市,限制开仓规模 { SellShort(lots,min(low,DownLine));//符合做空环境,做空 sposition = lots; } } } //------------------------------------------------------------------------// 编译版本 2024/06/20 220532// 版权所有 xingn1991// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------