开拓者期货期权程序化系统交易论坛

标题: 为什么HighD(1)值在日线bar和1分钟bar上的结果不一样 [打印本页]

作者: Yvan0617    时间: 2017-12-14 02:20:50     标题: 为什么HighD(1)值在日线bar和1分钟bar上的结果不一样

以日线为单位的bar返回值是对的,但是以1分钟为单位的bar返回值不对,HighD(1)不管应用在什么bar上应该都是表示头一天的最高值吧?
作者: 小米    时间: 2017-12-14 08:51:16

看一下1分钟图表里商品设置的K线数有多少?是否包含一天前的全部K线数据?
作者: Yvan0617    时间: 2017-12-15 12:38:32

@小米,样本肯定是足够的,一个月的样本,分析的中间时间段。还发现一个问题,1分钟bar,白天的HighD(1)和晚上21点后的HighD(1)也不一样。商品是螺纹钢连续。
作者: 小米    时间: 2017-12-15 13:37:45

Yvan0617 发表于 2017-12-15 12:38
@小米,样本肯定是足够的,一个月的样本,分析的中间时间段。还发现一个问题,1分钟bar,白天的HighD(1)和 ...

代码怎么写的?其运算有没有上层条件的限制 ?
作者: Yvan0617    时间: 2017-12-16 14:01:11

测试程序如下,我用的是rb888,早上9点的1分钟bar测试,两次打印结果不一样
Params

       
Vars
        Numeric i;
        Numeric StartTime;        //开盘时间
        Numeric StartTimeH;        //开盘时间小时
        Numeric StartTimeM;        //开盘时间分钟


Begin
       
        Commentary("第一次:HighD(1)="+Text(HighD(1))+" CloseD(1)="+Text(CloseD(1)));

        StartTime = GetSessionStartTime(0);

        For i = 1 To GetSessionCount() - 1
        {

                if(StartTime > GetSessionStartTime(i))
                {

                        StartTime = GetSessionStartTime(i);
                }
               
        }

        StartTimeH = HourFromDateTime(StartTime);
        StartTimeM = MinuteFromDateTime(StartTime);

        if(Hour()==StartTimeH&&Minute()==StartTimeM)
        {
                SetGlobalVar2("IsCloseTime",0);
        }
        if(GetGlobalVar2("IsCloseTime")==1) return;

        Commentary("第二次:HighD(1)="+Text(HighD(1))+" CloseD(1)="+Text(CloseD(1)));
        SetGlobalVar2("IsCloseTime",1);
       
End
作者: Yvan0617    时间: 2017-12-19 01:49:44

@小米,有什么结论了么?
作者: 小米    时间: 2017-12-19 08:54:25

Yvan0617 发表于 2017-12-19 01:49
@小米,有什么结论了么?

5#的代码里,第二次打印前有一个return啊。。。
序列函数的赋值 运算前加了条件或是有return是可能导致序列取值不完整,从而影响计算结果的。。

你将return去掉再看看打印结果。。
或者声明几个中间变量,在公式前段将highD(1),closeD(1)等赋值给中间变量后,再到不同的条件下打印这些中间变量即可。
作者: Yvan0617    时间: 2017-12-19 23:37:10

@小米,不是很明白
1、就算return语句不被执行,只要出现了“return”这调命令,后面的所有序列运算可能出错?
2、如果上面一条成立,那程序里面就不能出现return语句了。如果要达到在某种条件下程序不往下走,还有其他简单办法么?
3、“序列函数的赋值 运算前加了条件可能导致序列取值不完整”,这句话不是很明白,难道if(){}的大括号里面不能出现序列值的读取?能否举例说明一下




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2