关于策略交易数据的问题
2022-08-19 14:12

我用多品种测试程序在策略交易的执行情况时,发现总有因为数据对不上而导致执行异常的情况,首先列出我的代码:

        If(indexs[0]==0)
        {               
            h0 = HighestFC(Data1.High,xK);
        }
        h3 = HighestFC(Data1.High,xK);
        h4 = HighestFC(Data1.High[1],xK);

        If(BarStatus == 2)
        {
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "This is OnBarClose!" );
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "bartimeOr=" + Text(SystemDateTime));
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "CurrentTime=" + Text(CurrentTime));
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "maxcount=" + Text(maxCount));
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "h0=HighestFC(Data1.High,xK)=" + Text(h0));
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "h3=HighestFC(Data1.High,xK)=" + Text(h3));
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "h4=HighestFC(Data1.High[1],xK)=" + Text(h4));
            FileAppend("E://输出数据//MKHZ//"+FormulaName+"_"+symbolname+"_"+text(date)+".txt", "        " );
        }

以上代码只是简单的计算了data1图层的xk柱范围内K线的最高价,然后输出一个TB的日志。

然后问题就出现了,我发现策略交易出现异常后,回来读TB输出日志中的最高价,发现在TB图标上找不到对应的最高价,例子是在沪铜2022-8-18--21:30后发生的,具体情况如下第二张图:

从输出的日志中蓝色框可以读出,沪铜在21:00时,30条K线(我的程序参数xK默认为30)内的最高价为62360,我们可以打开cu2209图表数数,是可以发现没有错误的。

然后到了红色框的位置,22:00的OnBarClose对应的是cu2209在21:30最后一次图层bar数据,其中TB日志输出的最高价为62500,但我们回到cu2209的K线图表,可以发现图表显示的最高价为62520,这导致了后续所有程序运行异常。

甚至到了今天2022-8-19早上9:30前,计算的最高价h0仍然是62500,而9:30时cu2209的最高价为62510,这时候可以看到下图的输出日志黄色框部分发现,h0变成了62510,h4仍是62500,这明显与TB的图表对不上号,因为30柱K线内的最高价应该是21:30的62520,不是62500,也不是62510。

以上问题出现了不止一次,实在搞不懂原因,请各位老师帮忙解惑 ,谢谢!

评论区
czs763268157

老师好,我知道您很忙,但您在回答问题时能先认真读一下全部内容再回复吗?(抱歉,你回答得太敷衍了,我就发一下牢骚)

首先,我在最初的问题已经截图了我的策略单元,是上下两个图层的策略单元,两个图层的数据都是30分钟周期同品种的数据,只是时间段不一样而已,有图有真相:

然后,我也已经根据您给的视频更改了程序代码,代码是:

而不是h0=HighestFC(Data1.High,xK),至于你若只看最后图片输出的数据,那你会发现那只是输出文字那部分我忘记改了而已,忘改部分截图如下:

所以最终您才会以为我写的是h0=HighestFC(Data1.High,xK)=XXXX。

先感谢老师每天为我们解决各种问题,那么能重新回复一下我之前的问题吗?为什么图表数据和行情输出的数据会不同呢?

P.S.下面一位朋友给了我一点启发,他本来一开始图表数据与我是不同的,但后来换了一下行情服务器就相同了,请问是不是TB在行情演绎时会自动更换行情服务器导致数据不同时段出现差异呢?

2022-08-26 14:03
czs763268157

我在30分钟图看的,而且我打开15min图也是一样5759哦,数据为什么会有差异呢?

我的行情服务器如下:

2022-08-25 13:46
czs763268157

老师好,我已经根据您的提供的视频教程修改了程序如下:

但是错误并没有得到修正,策略交易读取的数据还是与图表交易有差异的,例子如下:

可以看到,pg2209在2022.08.24_11:00创新高,图表读取的是5759,但TB当时输出的数据却是5755,这表明当时数据读取的是5755,有明显差异啊!

所以我想请教一下,请问图表数据是事后统计的数据吗(所以与实际交易的数据其实是有出入的)?若图表数据不真实,那我们如何保证我们的策略交易正常运行呢?

2022-08-25 10:15
czs763268157

老师好,我已经根据您的说法修改了程序如下:

但是错误并没有得到修正,策略交易读取的数据还是错的,例子如下:

可以看到,pg2209在2022.08.24_11:00创新高,图表读取的是5759,但TB当时输出的数据却是5755,这表明当时数据读取的是5755,有明显差异啊!另外,xk不是变量,是参数(Params)。

所以我想请教一下,请问图表数据是事后统计的数据吗(所以与实际交易的数据其实是有出入的)?若图表数据不真实,那我们如何保证我们的策略交易正常运行呢?

2022-08-25 10:11
czs763268157

老师好,虽然你指出了我序列函数的错误用法,但这并没有解决我的问题,因为我的h3和h4是没有在条件语句里的,它们的作用就是对照,但我们可以看到,它们得出的值与h0一样,都是错的,请问这如何解释呢?

2022-08-22 13:37
顶部