您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

福利 跨周期的傻瓜式解决方案 [开拓者 TB]

  • 咨询内容:          TB的跨周期调用,论坛以前已经有一些解决方案。但对很多人来说不够方便 ,本方案主要参考了追涨杀跌的一些基础函数,兼顾了使用方便、运算性能速度、精确,在具体的算法上如 均线ma 标准差std 等不用因为数据源的变化而重新编写算法函数。
          
            比如close 的ma  myValue 的ma 都可以用一个 iMA函数解决。iMA的形式之所以不用  iMA(iPrice 数据源,TimeFrame 时间周期,Length 算法参数) 而是选择  iMA((iPrice 数据源,mtBarCnt ,Length1);是为了运算速度,否则如果一个策略多次用到跨周期的算法 函数内部会多次重复计算mtBarCnt值 ,  会影响运算速度。

     

  • TB技术人员: 此函数是追涨杀跌的MtBar 函数 为了和后面函数包的美观 修改了函数名
    1. //------------------------------------------------------------------------
    2. // 简称: iBar
    3. // 名称:
    4. // 类别: 用户函数
    5. // 类型: 用户函数
    6. // 输出: 数值型
    7. //------------------------------------------------------------------------

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

    26. Vars
    27.         NumericSeries barCnt;
    28.         NumericSeries CurBar;
    29.         NumericSeries barCntSum;
    30.         NumericSeries OpenHT;
    31.         NumericSeries HighHT;
    32.         NumericSeries LowHT;
    33.         NumericSeries CloseHT;
    34.         NumericSeries VolHT;
    35.         NumericSeries OpenIntHT;
    36.         Numeric CurTime;
    37.         Numeric PreTime;
    38.         bool condition(false);
    39.         Numeric i;
    40. Begin
    41.         If (TimeFrame == 40320)                 // 月线
    42.         {
    43.                 CurTime = Month;
    44.                 PreTime = Month[1];
    45.         }
    46.         Else If (TimeFrame == 10080)                        // 周线
    47.         {
    48.                 CurTime = IntPart(DateDiff(19700105,Date)/7);
    49.                 PreTime = IntPart(DateDiff(19700105,Date[1])/7);
    50.         }
    51.         Else                                                                        // 其他时间周期
    52.         {
    53.                 CurTime = IntPart((DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);
    54.                 PreTime = IntPart((DateDiff(19700105,date[1])*1440 + Hour[1]*60 + Minute[1])/TimeFrame);
    55.         }
    56.         condition = CurTime != PreTime;

    57.         If (CurrentBar==0)                // 如果是第一根Bar, CurBar=0
    58.         {
    59.                 barCnt = 0;
    60.                 CurBar = 0;
    61.                 OpenHT = Open;
    62.                 HighHT = High;
    63.                 LowHT = Low;
    64.                 CloseHT = Close;
    65.                 VolHT = Vol;
    66.                 OpenIntHT = OpenInt;
    67.         }
    68.         Else
    69.         {
    70.                 If(Condition)               
    71.                 // 如果在目标周期下,属于另一根K线,则CurBar加1
    72.                 {
    73.                         barCnt = 1;
    74.                         CurBar = CurBar[1] + 1;
    75.                         OpenHT = Open;
    76.                         HighHT = High;
    77.                         LowHT = Low;
    78.                         VolHT = Vol;
    79.                 }Else
    80.                 // 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
    81.                 {
    82.                         barCnt = barCnt[1] + 1;
    83.                         CurBar = CurBar[1];
    84.                         OpenHT = OpenHT[1];
    85.                         HighHT = Max(HighHT[1],High);
    86.                         LowHT = Min(LowHT[1],Low);
    87.                         VolHT = VolHT[1] + Vol;
    88.                 }
    89.                 // 收盘价和持仓量总是取最新值
    90.                 CloseHT = Close;
    91.                 OpenIntHT = OpenInt;
    92.         }
    93.         
    94.         // 上面的程序,在每根小周期的K线上,记录了它所属的大时间周期下的开高低收等值的变化。
    95.         // 接下来,要把在大的时间周期级别上,属于同一根K线的开高低收这些数据,记录在这一组小周期K线的最后一根上。
    96.         barCntSum = barCnt ;
    97.         If(BarsBack == 0)
    98.         // 如果Bar偏移参数为0,则取每根小周期K线上保留的大时间周期截止到这根小周期K线为止的BAR数据
    99.         {
    100.                 barCntSum = 0 ;
    101.         }Else If(BarsBack == 1)
    102.         // 如果Bar偏移参数为1,则取大时间周期的上一根K线的BAr数据
    103.         {
    104.                 barCntSum = barCnt ;
    105.         }Else
    106.         // 如果BAR偏移参数为其他,则取大时间周期的指定偏移后的那根K线的BAR数据
    107.         {
    108.                 For i = 2 To BarsBack
    109.                 {
    110.                         barCntSum = barCntSum + barCnt[barCntSum];
    111.                 }
    112.         }

    113.         // 最后将相应的K线数据作为引用参数返回
    114.         oCurBar = CurBar;
    115.         oOpenHT = OpenHT[barCntSum];
    116.         oHighHT = HighHT[barCntSum];
    117.         oLowHT = LowHT[barCntSum];
    118.         oCloseHT = CloseHT[barCntSum];
    119.         oVolHT = VolHT[barCntSum];
    120.         oOpenIntHT = OpenIntHT[barCntSum];
    121.         Return barCnt;
    122. End
    复制代码

     

  • TB客服: iBar 参数太多 调用声明参数太麻烦 以下为简便写法
    1. //------------------------------------------------------------------------
    2. // 简称: inBar
    3. // 名称: 读书山林
    4. // 类别: 用户函数
    5. // 类型: 用户函数
    6. // 输出: 数值型
    7. //------------------------------------------------------------------------
    8. Params
    9.         Numeric TimeFrame(1440);        // 目标时间周期参数,参数说明参见MtBar
    10.         Numeric BarsBack(1);                // 目标时间周期BAR偏移参数,说明见MtBar函数
    11. Vars
    12.         NumericSeries mtBarCnt;
    13.         Numeric refCurBar;
    14.         Numeric refOpen;
    15.         Numeric refHigh;
    16.         Numeric refLow;
    17.         Numeric refClose;
    18.         Numeric refVol;
    19.         Numeric refOpenInt;
    20.         
    21.         Numeric SumValue(0);
    22.         Numeric i;
    23.         Numeric j(0);
    24. Begin
    25.         mtBarCnt=iBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);

    26.         Return mtBarCnt;
    27. End
    复制代码

     

  • 网友回复: 本帖最后由 读书山林 于 2015-5-21 02:19 编辑

    跨周期求和函数
    1. //------------------------------------------------------------------------
    2. // 简称: iSum
    3. // 名称: 跨周期求和函数 读书山林
    4. // 类别: 用户函数
    5. // 类型: 用户函数
    6. // 输出: 数值型
    7. //------------------------------------------------------------------------

    8. Params
    9.         NumericSeries iPrice(1);
    10.         NumericSeries BarCnt(0);
    11.         Numeric Length(10);
    12. Vars
    13.         NumericSeries SumValue(0);
    14.         Numeric i;
    15.         Numeric j(0);
    16. Begin
    17.        If(Length==0)
    18.        {
    19.             Return iPrice;           
    20.        }Else
    21.        {
    22.             j=0;
    23.             SumValue = 0;
    24.             For i = 1 to Length
    25.             {
    26.                 If (iPrice[j] <> InvalidNumeric)
    27.                 {
    28.                         SumValue = SumValue + iPrice[j];
    29.                         j = j + BarCnt[j];
    30.                 }
    31.                 else Break;
    32.             }
    33.        }
    34.         Return SumValue;
    35. End
    复制代码

     

  • 网友回复: 本帖最后由 读书山林 于 2015-5-9 00:28 编辑
    1. //------------------------------------------------------------------------
    2. // 简称: iMA
    3. // 名称: 跨周期求均值 读书山林
    4. // 类别: 用户函数
    5. // 类型: 用户函数
    6. // 输出: 数值型
    7. //------------------------------------------------------------------------
    8. Params
    9.         NumericSeries iPrice(1); //数据源必须为跨周期的值 否则不能返回正确值
    10.         NumericSeries mtBarCnt(1) ;  
    11.         Numeric Length(10);                           
    12. Vars
    13.         Numeric SumValue(0);
    14.         Numeric i;
    15.         Numeric oMA;      
    16. Begin
    17.         SumValue = iSum(iPrice,mtBarCnt,Length);
    18.         oMA = SumValue/Length;
    19.         Return oMA;
    20. End
    复制代码iMA  可求任意数据源

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容