设为首页收藏本站

 找回密码
 注册
楼主: 追涨杀跌
打印 上一主题 下一主题

跨周期数据转换函数以及跨周期技术指标调用的实现 [复制链接]

Rank: 2

精华
0
UID
190860
积分
64
帖子
50
主题
0
阅读权限
30
注册时间
2014-7-19
最后登录
2015-5-14
252#
发表于 2015-1-5 12:40:14 |只看该作者
追涨杀跌 发表于 2011-6-13 01:40
谢谢道勤的鼓励! 继续把其他几个常用指标的跨周期函数贴出来。
新建MtMacd函数,代码如下: ...

NumericRef  这种变量到底怎么用啊?实在是搞不懂。

使用道具 举报

Rank: 1

精华
0
UID
185065
积分
2
帖子
2
主题
0
阅读权限
10
注册时间
2014-4-17
最后登录
2014-12-18
251#
发表于 2014-11-28 22:07:55 |只看该作者
以跨周期为学习线索,慢慢啃。

使用道具 举报

Rank: 1

精华
0
UID
182602
积分
31
帖子
19
主题
10
阅读权限
10
注册时间
2014-3-16
最后登录
2015-8-3
250#
发表于 2014-11-28 15:07:43 |只看该作者
Else If (TimeFrame == 10080)                        // 周线
        {
                CurTime = IntPart(DateDiff(19700105,Date)/7);
                PreTime = IntPart(DateDiff(19700105,Date[1])/7);
想请教下老师,,Pretime里面的Data[1],为什么日期只往前挪了一天,周线就可以取前面一根呢?麻烦老师给讲下,谢谢。

使用道具 举报

Rank: 1

精华
0
UID
182602
积分
31
帖子
19
主题
10
阅读权限
10
注册时间
2014-3-16
最后登录
2015-8-3
249#
发表于 2014-11-27 23:38:24 |只看该作者
太牛了。。。膜拜追涨杀跌老师~~~~

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
248#
发表于 2014-11-24 14:10:09 |只看该作者
leonying 发表于 2014-11-24 13:26
请“追涨杀跌”老师或此论坛上的大牛指导下:如何在1m里跨周期显示3m的当前macd值,而不是跨周期显示前一 ...

将BtBar函数里的barback这个参数的值设为0即可。。

使用道具 举报

Rank: 1

精华
0
UID
190379
积分
3
帖子
3
主题
0
阅读权限
10
注册时间
2014-7-11
最后登录
2014-11-24
247#
发表于 2014-11-24 13:26:27 |只看该作者

请“追涨杀跌”老师或此论坛上的大牛指导下:如何在1m里跨周期显示3m的当前macd值,而不是跨周期显示前一个macd的值?请指导下。谢!

使用道具 举报

Rank: 2

精华
0
UID
194546
积分
65
帖子
47
主题
13
阅读权限
30
注册时间
2014-9-29
最后登录
2017-11-16
246#
发表于 2014-11-18 19:55:13 |只看该作者
很牛,很好很强大

使用道具 举报

Rank: 1

精华
0
UID
190379
积分
3
帖子
3
主题
0
阅读权限
10
注册时间
2014-7-11
最后登录
2014-11-24
245#
发表于 2014-11-4 11:10:23 |只看该作者
请问“追涨杀跌”老师,如何在1m里跨周期显示3m的当前macd值,而不是跨周期显示前一个macd的值?请指导下。谢!

使用道具 举报

Rank: 1

精华
0
UID
126091
积分
10
帖子
6
主题
3
阅读权限
10
注册时间
2011-1-1
最后登录
2014-11-30
244#
发表于 2014-11-2 22:49:18 |只看该作者
SAR 跨周期函数
  1. Params
  2.         Numeric TimeFrame(1440);    // 目标时间周期:月线=40320,周线=10080,日线=1440,4小时线=240
  3.                                 // 其他1小时内的周期等于相应的分钟数,如:1小时=60, 30分钟=30。
  4.                                 // 支持不规则分钟数,如3分钟,8分钟等。注:目标周期即是长时间框架的周期

  5.     Numeric BarsBack(1);    // 目标时间周期BAR偏移:
  6.                             // 1--表示将目标时间周期下的前1根K线数据作为与当前Bar对应的目标时间周期下的K线数据
  7.                             // 0--表示将目标时间周期下的截止到目前为止的数据转换为与当前BAR对应的目标时间周期下K线数据
  8.         Numeric AfStep(0.02);
  9.         Numeric AfLimit(0.2);
  10.         NumericRef oParOpen;
  11.         NumericRef oPosition;
  12. Vars
  13.         Numeric oCurBar;         // 目标时间周期下的Bar索引
  14.         Numeric oOPenHT;         // 目标时间周期下的开盘价
  15.         Numeric oHighHT;         // 目标时间周期下的最高价
  16.         Numeric oLowHT;          // 目标时间周期下的最低价
  17.         Numeric oCloseHT;        // 目标时间周期下的收盘价
  18.         Numeric oVolHT;          // 目标时间周期下的成交量
  19.         Numeric oOpenIntHT;      // 目标时间周期下的持仓量
  20.                 Numeric oTransition;
  21.                 Numeric oParClose;
  22.                 NumericSeries barCnt;
  23.         NumericSeries CurBar;
  24.         NumericSeries barCntSum;
  25.         NumericSeries OpenHT;
  26.         NumericSeries HighHT;
  27.         NumericSeries LowHT;
  28.         NumericSeries CloseHT;
  29.         NumericSeries VolHT;
  30.         NumericSeries OpenIntHT;
  31.         Numeric CurTime;
  32.         Numeric PreTime;
  33.         bool condition(false);
  34.         Numeric i;
  35.                
  36.        
  37.         NumericSeries Af(0);       
  38.         NumericSeries ParOpen(0);
  39.         NumericSeries Position(0);       
  40.         NumericSeries HHValue(0);
  41.         NumericSeries LLValue(0);
  42. Begin
  43.    
  44. //跨周期函数 -------------------------------------------------------------------------------
  45. If (TimeFrame == 40320)                 // 月线
  46.         {
  47.                 CurTime = Month;
  48.                 PreTime = Month[1];
  49.         }
  50.         Else If (TimeFrame == 10080)            // 周线
  51.         {
  52.                 CurTime = IntPart(DateDiff(19700105,Date)/7);
  53.                 PreTime = IntPart(DateDiff(19700105,Date[1])/7);
  54.         }
  55.         Else                                                                        // 其他时间周期
  56.         {
  57.                 CurTime = IntPart((DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);
  58.                 PreTime = IntPart((DateDiff(19700105,date[1])*1440 + Hour[1]*60 + Minute[1])/TimeFrame);
  59.         }
  60.         condition = CurTime!=PreTime;

  61.         If (CurrentBar==0)                // 如果是第一根Bar, CurBar=0
  62.         {
  63.                 barCnt = 0;
  64.                 CurBar = 0;
  65.                 OpenHT = Open;
  66.                 HighHT = High;
  67.                 LowHT = Low;
  68.                 CloseHT = Close;
  69.                 VolHT = Vol;
  70.                 OpenIntHT = OpenInt;
  71.         }
  72.         Else
  73.         {
  74.                 If(Condition)               
  75.                 // 如果在目标周期下,属于另一根K线,则CurBar加1
  76.                 {
  77.                         barCnt = 1;
  78.                         CurBar = CurBar[1] + 1;
  79.                         OpenHT = Open;
  80.                         HighHT = High;
  81.                         LowHT = Low;
  82.                         VolHT = Vol;
  83.                 }Else
  84.                 // 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
  85.                 {
  86.                         barCnt = barCnt[1] + 1;
  87.                         CurBar = CurBar[1];
  88.                         OpenHT = OpenHT[1];
  89.                         HighHT = Max(HighHT[1],High);
  90.                         LowHT = Min(LowHT[1],Low);
  91.                         VolHT = VolHT[1] + Vol;
  92.                 }

  93.                 // 收盘价和持仓量总是取最新值
  94.                 CloseHT = Close;
  95.                 OpenIntHT = OpenInt;
  96.         }

  97.         // 上面的程序,在每根小周期的K线上,记录了它所属的大时间周期下的开高低收等值的变化。
  98.         // 接下来,要把在大的时间周期级别上,属于同一根K线的开高低收这些数据,记录在这一组小周期K线的最后一根上。
  99.         barCntSum = barCnt ;

  100.         If(BarsBack == 0)          // 如果Bar偏移参数为0,则取每根小周期K线上保留的大时间周期截止到这根小周期K线为止的BAR数据
  101.         {
  102.             barCntSum = 0 ;
  103.         }Else If(BarsBack == 1)    // 如果Bar偏移参数为1,则取大时间周期的上一根K线的BAr数据
  104.         {
  105.                         barCntSum = barCnt ;
  106.         }Else                      // 如果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. //-------------------------------------------------------------------------------------------

  122. //SAR值算法------------------------------------------------------------------------------------------

  123.         If (curBar == 1 and Condition)
  124.         {
  125.                 Position = 1 ;
  126.                 oTransition = 1 ;
  127.                 Af = AfStep ;
  128.                 HHValue = HighHT[barCntSum] ;
  129.                 LLValue = LowHT[barCntSum] ;
  130.                 oParClose = LLValue ;
  131.                 ParOpen = oParClose + Af * ( HHValue - oParClose) ;
  132.                 If (ParOpen > LowHT[barCntSum])
  133.                 {
  134.                         ParOpen = LowHT[barCntSum] ;
  135.                 }
  136.         }Else If(CurBar>1 and condition)
  137.         {       
  138.                 oTransition = 0 ;       
  139.                 If (HighHT[barCntSum] > HHValue[barCntSum+BarCnt])
  140.                 {
  141.                         HHValue = HighHT[barCntSum];
  142.                 }Else
  143.                 {
  144.                         HHValue = HHValue[barCntSum+BarCnt];
  145.                 }
  146.                
  147.                 If (LowHT[barCntSum] < LLValue[barCntSum+BarCnt])
  148.                 {
  149.                         LLValue = LowHT[barCntSum];
  150.                 }Else
  151.                 {
  152.                         LLValue = LLValue[barCntSum+BarCnt];
  153.                 }
  154.                
  155.                 If ( Position[barCntSum+BarCnt] == 1)
  156.                 {
  157.                         If ( LowHT[barCntSum] <= ParOpen[barCntSum+BarCnt])
  158.                         {
  159.                                 Position = -1 ;
  160.                                 oTransition = -1 ;                               
  161.                                 oParClose = HHValue ;
  162.                                 HHValue = HighHT[barCntSum] ;
  163.                                 LLValue  = LowHT[barCntSum] ;
  164.        
  165.                                 Af = AfStep ;
  166.                                 ParOpen = oParClose + Af * ( LLValue - oParClose ) ;
  167.                                        
  168.                                 If (ParOpen < HighHT[barCntSum])
  169.                                 {
  170.                                         ParOpen = HighHT[barCntSum] ;
  171.                                 }
  172.                                
  173.                                 If (ParOpen < HighHT[barCntSum+BarCnt])
  174.                                 {
  175.                                         ParOpen = HighHT[barCntSum+BarCnt] ;
  176.                                 }
  177.                         }Else
  178.                         {
  179.                                 Position = Position[barCntSum+BarCnt];
  180.                                 oParClose = ParOpen[barCntSum+BarCnt] ;                                       
  181.                                 If (HHValue > HHValue[barCntSum+BarCnt] and Af[barCntSum+BarCnt] < AfLimit )
  182.                                 {
  183.                                         If(Af[barCntSum+BarCnt]+AfStep > AfLimit)
  184.                                         {
  185.                                                 Af = AfLimit ;
  186.                                         }Else
  187.                                         {
  188.                                                 Af = Af[barCntSum+BarCnt]+AfStep;
  189.                                         }                               
  190.                                        
  191.                                 }Else
  192.                                 {
  193.                                         Af = Af[barCntSum+BarCnt];
  194.                                 }       
  195.                                 ParOpen = oParClose + Af * ( HHValue - oParClose ) ;                               
  196.        
  197.                                 If (ParOpen > LowHT[barCntSum])
  198.                                 {
  199.                                         ParOpen = LowHT[barCntSum] ;
  200.                                 }
  201.                                
  202.                                 If (ParOpen > LowHT[barCntSum+BarCnt])
  203.                                 {
  204.                                         ParOpen = LowHT[barCntSum+BarCnt];
  205.                                 }
  206.                         }
  207.                 }Else
  208.                 {
  209.                         If (HighHT[barCntSum] >= ParOpen[barCntSum+BarCnt])
  210.                         {
  211.                                 Position = 1 ;
  212.                                 oTransition = 1 ;
  213.                                
  214.                                 oParClose = LLValue ;
  215.                                 HHValue = HighHT[barCntSum] ;
  216.                                 LLValue  = LowHT[barCntSum] ;
  217.                                
  218.                                 Af = AfStep ;
  219.                                 ParOpen = oParClose + Af * ( HHValue - oParClose) ;
  220.                                 If (ParOpen > LowHT[barCntSum])
  221.                                 {
  222.                                         ParOpen = LowHT[barCntSum] ;
  223.                                 }
  224.                                
  225.                                 If (ParOpen > LowHT[barCntSum+BarCnt])
  226.                                 {
  227.                                         ParOpen = LowHT[barCntSum+BarCnt];
  228.                                 }
  229.                         }Else
  230.                         {
  231.                                 Position = Position[barCntSum+BarCnt];
  232.                                 oParClose = ParOpen[barCntSum+BarCnt];
  233.                                        
  234.                                 If (LLValue < LLValue[barCntSum+BarCnt] And Af[barCntSum+BarCnt] < AfLimit )
  235.                                 {
  236.                                         If(Af[barCntSum+BarCnt]+AfStep > AfLimit)
  237.                                         {
  238.                                                 Af = AfLimit ;
  239.                                         }Else
  240.                                         {
  241.                                                 Af = Af[barCntSum+BarCnt]+AfStep;
  242.                                         }
  243.                                 }Else
  244.                                 {
  245.                                         Af = Af[barCntSum+BarCnt];
  246.                                 }
  247.                                 ParOpen = oParClose + Af * ( LLValue - oParClose ) ;
  248.        
  249.                                 If (ParOpen < HighHT[barCntSum])
  250.                                 {
  251.                                         ParOpen = HighHT[barCntSum] ;
  252.                                 }
  253.                                
  254.                                 If (ParOpen < HighHT[barCntSum+BarCnt])
  255.                                 {
  256.                                         ParOpen = HighHT[barCntSum+BarCnt] ;
  257.                                 }
  258.                         }
  259.                 }       
  260.         }       
  261.        
  262.         oParOpen = ParOpen;
  263.         oPosition = Position;
  264.         Return True;
  265. end
复制代码

使用道具 举报

Rank: 4

精华
0
UID
115197
积分
307
帖子
23
主题
9
阅读权限
50
注册时间
2013-1-28
最后登录
2018-8-6
243#
发表于 2014-10-27 22:45:26 |只看该作者

CMI跨周期函数

Params
        Numeric TimeFrame(1440);     // 目标时间周期参数,参数说明参见MtBar
        Numeric BarsBack(1);         // 目标时间周期BAR偏移参数,说明见MtBar函数
        Numeric Length(30);          // 均线周期
        NumericRef oCMI;             // 以目标时间周期下的K线数据计算出的移动平均线
Vars
        NumericSeries mtBarCnt;
        NumericSeries mtClose;
        NumericSeries mtHigh;
        NumericSeries mtLow;
        NumericSeries HighestValue;                              
        NumericSeries LowestValue;                  
        Numeric refCurBar;
        Numeric refOpen;
        Numeric refHigh;
        Numeric refLow;
        Numeric refClose;
        Numeric refVol;
        Numeric refOpenInt;
        Numeric Num(0);
        Numeric Denom(1);        
        Numeric i;
        Numeric j(0);
Begin
        mtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
        mtClose = refClose;
        mtHigh = refHigh;
        mtLow = refLow;
        HighestValue = mtHigh;
        LowestValue = mtLow;
        For i = 1 to Length - 1
        {
                j = j + mtBarCnt[j];
                If (mtHigh[j] == InvalidNumeric) HighestValue = InvalidNumeric;
                Else If ( mtHigh[j] > HighestValue) HighestValue = mtHigh[j];
                If (mtLow[j] == InvalidNumeric) LowestValue = InvalidNumeric;
                Else If ( mtLow[j] < LowestValue) LowestValue = mtLow[j];
        }               
                Denom = HighestValue - LowestValue;
                Num = mtClose[Length-1] - mtClose;
                Num = Abs(Num);
                oCMI = 0.0;
                If(Denom <> 0)
                {
                        oCMI = (Num / Denom) * 100;
                }
        Return mtBarCnt;
End

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-4 04:51

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部