图表信号与策略报告不匹配

data-href=

按照下面的函数跑玉米淀粉,策略报告显示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公式修改和重写的权利

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

帐户净仓与信号净仓数量明显不匹配
持仓与信号不匹配,时可否跳出警示窗口
当出现持仓与信号不匹配的情况,如何及时获知
大括号不匹配
回测与自动 不匹配
严重问题TBQ多图层信号,显示和持仓显示不匹配!
图表策略与A函数策略的衔接
信号匹配申请
策略优化-同参数组合,结果报错:加载数据失败,策略参数不匹配
成交价格和信号不匹配

data-href=

我不知道你是怎么得到你的结论的

按照你的配置加载,测试报告说交易次数只有59次,哪里来300次,看不懂

嗯奇怪了,我图表直接右键打开策略报告,也显示300多次交易,估计卡bug了