coolyks 发表于 2017-7-17 09:34:25

山林大神你好,请问一下你的解决方案是否解决了夜盘归属到第二天日K线的问题?如果没解决的话,应该从什么思路去解决呢?

wwq1989 发表于 2017-11-4 21:08:23

比如我的策略运行在1小时K线周期里面,但是我想调用日线周期里面的5日、10日、20日均线,代码怎么写

wwq1989 发表于 2017-11-4 21:08:55

比如我的策略运行在1小时K线周期里面,但是我想调用日线周期里面的5日、10日、20日均线,代码怎么写

读书山林 发表于 2017-11-24 11:28:30

coolyks 发表于 2017-7-17 09:34 static/image/common/back.gif
山林大神你好,请问一下你的解决方案是否解决了夜盘归属到第二天日K线的问题?如果没解决的话,应该从什么 ...

//------------------------------------------------------------------------
// 简称: iBar
// 名称:
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric TimeFrame(1440);   
        // 目标时间周期:月线=40320,周线=10080,日线=1440,4小时线=240
        // 其他1小时内的周期等于相应的分钟数,如:1小时=60, 30分钟=30。。。
        // 支持不规则分钟数,如3分钟,8分钟,之类都行
        
        Numeric BarsBack(1);
        // 目标时间周期BAR偏移:
        // 1--表示将目标时间周期下的前1根K线数据作为与当前Bar对应的目标时间周期下的K线数据
        // 0--表示将目标时间周期下的截止到目前为止的数据转换为与当前BAR对应的目标时间周期下K线数据
        
        NumericRef oCurBar;                 // 目标时间周期下的Bar索引
        NumericRef oOPenHT;         // 目标时间周期下的开盘价
        NumericRef oHighHT;         // 目标时间周期下的最高价
        NumericRef oLowHT;          // 目标时间周期下的最低价
        NumericRef oCloseHT;        // 目标时间周期下的收盘价
        NumericRef oVolHT;          // 目标时间周期下的成交量
        NumericRef oOpenIntHT;      // 目标时间周期下的持仓量

Vars
        NumericSeries barCnt;
        NumericSeries CurBar;
        NumericSeries barCntSum;
        NumericSeries OpenHT;
        NumericSeries HighHT;
        NumericSeries LowHT;
        NumericSeries CloseHT;
        NumericSeries VolHT;
        NumericSeries OpenIntHT;
        Numeric CurTime;
        Numeric PreTime;
        bool condition(false);
        Numeric i;
Begin
        If (TimeFrame == 40320)                 // 月线
        {
                CurTime = Month;
                PreTime = Month;
        }
        Else If (TimeFrame == 10080)                        // 周线
        {
                CurTime = IntPart(DateDiff(19700105,Date)/7);
                PreTime = IntPart(DateDiff(19700105,Date)/7);
        }
        Else                                                                        // 其他时间周期
        {
                CurTime = IntPart((DateDiff(19700105,TrueDate(0))*1440 + Hour*60 + Minute)/TimeFrame);
                PreTime = IntPart((DateDiff(19700105,TrueDate(1))*1440 + Hour*60 + Minute)/TimeFrame);
        }
        condition = CurTime != PreTime;

        If (CurrentBar==0)                // 如果是第一根Bar, CurBar=0
        {
                barCnt = 0;
                CurBar = 0;
                OpenHT = Open;
                HighHT = High;
                LowHT = Low;
                CloseHT = Close;
                VolHT = Vol;
                OpenIntHT = OpenInt;
        }
        Else
        {
                If(Condition)               
                // 如果在目标周期下,属于另一根K线,则CurBar加1
                {
                        barCnt = 1;
                        CurBar = CurBar + 1;
                        OpenHT = Open;
                        HighHT = High;
                        LowHT = Low;
                        VolHT = Vol;
                }Else
                // 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
                {
                        barCnt = barCnt + 1;
                        CurBar = CurBar;
                        OpenHT = OpenHT;
                        HighHT = Max(HighHT,High);
                        LowHT = Min(LowHT,Low);
                        VolHT = VolHT + Vol;
                }
                // 收盘价和持仓量总是取最新值
                CloseHT = Close;
                OpenIntHT = OpenInt;
        }
        
        // 上面的程序,在每根小周期的K线上,记录了它所属的大时间周期下的开高低收等值的变化。
        // 接下来,要把在大的时间周期级别上,属于同一根K线的开高低收这些数据,记录在这一组小周期K线的最后一根上。
        barCntSum = barCnt ;
        If(BarsBack == 0)
        // 如果Bar偏移参数为0,则取每根小周期K线上保留的大时间周期截止到这根小周期K线为止的BAR数据
        {
                barCntSum = 0 ;
        }Else If(BarsBack == 1)
        // 如果Bar偏移参数为1,则取大时间周期的上一根K线的BAr数据
        {
                barCntSum = barCnt ;
        }Else
        // 如果BAR偏移参数为其他,则取大时间周期的指定偏移后的那根K线的BAR数据
        {
                For i = 2 To BarsBack
                {
                        barCntSum = barCntSum + barCnt;
                }
        }

        // 最后将相应的K线数据作为引用参数返回
        oCurBar = CurBar;
        oOpenHT = OpenHT;
        oHighHT = HighHT;
        oLowHT = LowHT;
        oCloseHT = CloseHT;
        oVolHT = VolHT;
        oOpenIntHT = OpenIntHT;
        Return barCnt;
End把基础函数更新下就好
把Date函数替换为TrueDate 其他函数不变

读书山林 发表于 2017-11-24 11:37:09

本帖最后由 读书山林 于 2018-3-5 09:49 编辑

......

lkcxhhj 发表于 2017-12-16 08:34:25

谢谢读书山林。
不过群还是加不上。

TBzhanghu888 发表于 2018-7-31 11:38:53

读书山林 发表于 2015-5-8 23:52 static/image/common/back.gif
白线就是Mean  自定义的数据源的跨周期值

山林老师,为什么小周期上(比如1分钟)显示的大周期均线数值和目标周期(比如日线图)数值不一样?

qdq333 发表于 2019-5-18 00:40:14

看不到啊

wanygqh 发表于 2021-1-17 17:13:35

请问ihhv如何调用,谢谢
页: 1 2 3 4 5 [6]
查看完整版本: 福利 跨周期的傻瓜式解决方案