设为首页收藏本站

 找回密码
 注册
楼主: x3yc
打印 上一主题 下一主题

请教:关于跨周期求MACD值的问题 [复制链接]

Rank: 4

精华
0
UID
1285
积分
278
帖子
54
主题
6
阅读权限
50
注册时间
2008-3-7
最后登录
2014-12-29
21#
发表于 2009-1-5 21:37:51 |只看该作者
非常感谢各位前辈,我想到的一些问题已经由各位都提出来了!

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
4576
积分
184
帖子
19
主题
3
阅读权限
40
注册时间
2009-6-7
最后登录
2012-1-11
22#
发表于 2009-7-27 16:07:45 |只看该作者
原帖由 nopain 于 2008-4-8 21:26 发表
日线中调用周线MACD数据的代码。

1、新建用户函数WeekXAverage,返回值为数值型,代码如下:

//------------------------------------------------------------------------
// 简称: WeekXAverage
// 名称: 日线转化周 ...

这个用户函数,如果改成5分钟调用30分钟,如何改这个用户函数,改哪些地方?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
23#
发表于 2009-7-27 17:16:01 |只看该作者
5分钟调用30分钟MACD值的算法

1、新建一个用户函数,命名为HalfHourXAverage,返回值为数值型。代码如下:
  1. Params
  2.         NumericSeries Price(10);
  3.         Numeric Length(10);
  4. Vars
  5.         NumericSeries HalfHourNo;
  6.         NumericSeries MinsIndex;
  7.         BoolSeries First30Min(True);
  8.         Numeric sFcactor;
  9.         NumericSeries XAvgValue;
  10. Begin
  11.         If(CurrentBar == 0)
  12.         {
  13.                 First30Min = True;
  14.         }Else
  15.         {
  16.                 First30Min = First30Min[1];
  17.                 If(First30Min && (Minute/30)==0)
  18.                 {
  19.                         First30Min = False;
  20.                 }
  21.         }

  22.         HalfHourNo = Date*100 + Hour*2+IntPart(Minute/30);
  23.         If(HalfHourNo!=HalfHourNo[1])
  24.         {
  25.                 MinsIndex = 1;
  26.         }Else
  27.         {
  28.                 MinsIndex = MinsIndex[1] + 1;
  29.         }

  30.         sFcactor = 2 / ( Length + 1 );
  31.         if (First30Min)
  32.         {
  33.                 XAvgValue = Price;
  34.         }else
  35.         {
  36.                 XAvgValue = XAvgValue[MinsIndex] + sFcactor * ( Price - XAvgValue[MinsIndex] ) ;
  37.         }
  38.   
  39.         Return XAvgValue;
  40. End
复制代码
2、新建一个技术指标,假设为test。代码如下:
  1. Params
  2.         Numeric FastLength(12);
  3.         Numeric SlowLength(26);
  4.         Numeric MACDLength(9);
  5. Vars
  6.         NumericSeries MACDValue;
  7.         NumericSeries AvgMACD;
  8.         NumericSeries MACDDiff;
  9.        
  10. Begin
  11.         MACDValue = HalfHourXAverage( Close, FastLength ) - HalfHourXAverage( Close, SlowLength );
  12.         AvgMACD = HalfHourXAverage(MACDValue,MACDLength);
  13.         MACDDiff = MACDValue - AvgMACD;
  14.        
  15.         PlotNumeric("MACDValue",MACDValue);
  16.         PlotNumeric("AvgMACD",AvgMACD);
  17.         If (MACDDiff >= 0)       
  18.                 PlotNumeric("MACDDiff",MACDDiff,Red);
  19.         Else
  20.                 PlotNumeric("MACDDiff",MACDDiff,Green);
  21.         PlotNumeric("零线",0);          

  22. End
复制代码

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
4576
积分
184
帖子
19
主题
3
阅读权限
40
注册时间
2009-6-7
最后登录
2012-1-11
24#
发表于 2009-7-27 18:02:23 |只看该作者
非常感谢nopain兄!

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
4576
积分
184
帖子
19
主题
3
阅读权限
40
注册时间
2009-6-7
最后登录
2012-1-11
25#
发表于 2009-7-28 21:46:42 |只看该作者
上面的用户函数是XAverage,如何改成SMA,假设权重为8,不知道我改的对不对
Params
        NumericSeries Price(10);
        Numeric Length(10);
Vars
        NumericSeries HalfHourNo;
        NumericSeries MinsIndex;
        BoolSeries First30Min(True);
        Numeric sFcactor;
         NumericSeries SMAAvgValue;
Begin
        If(CurrentBar == 0)
        {
                First30Min = True;
        }Else
        {
                First30Min = First30Min[1];
                If(First30Min && (Minute/30)==0)
                {
                        First30Min = False;
                }

        }

        HalfHourNo = Date*100 + Hour*2+IntPart(Minute/30);

If(HalfHourNo!=HalfHourNo[1])
        {
                MinsIndex = 1;
        }Else
        {
                MinsIndex = MinsIndex[1] + 1;
        }

        sFcactor = 8 /Length ;
        if (First30Min)
        {
                SMAAvgValue = Price;
        }else
        {
                SMAAvgValue = SMAAvgValue[MinsIndex] + sFcactor * ( Price - SMAAvgValue[MinsIndex] *2) ;
        }
  
        Return SMAAvgValue;
End

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
26#
发表于 2009-7-28 22:02:21 |只看该作者

回复 25# TTOP 的帖子

这可不一样,算法需要重写。采取什么样的均线并无本质区别,不要纠结于这个。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
4576
积分
184
帖子
19
主题
3
阅读权限
40
注册时间
2009-6-7
最后登录
2012-1-11
27#
发表于 2009-7-28 22:19:28 |只看该作者
EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)
则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。
例如:EMA(CLOSE,30)表示求30日指数平滑均价


SMA(X,N,M),求X的N日移动平均,M为权重。
算法: 若Y=SMA(X,N,M)
则 Y=[M*X+(N-M)*Y')/N,其中Y'表示上一周期Y值,N必须大于M。
例如:SMA(CLOSE,30,1)表示求30日移动平均价

这是大智慧给的算法,不知道TB的具体算法是否一样
能否给写一下5M调用30M的SMA用户函数

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
28#
发表于 2009-7-29 09:40:32 |只看该作者

回复 27# TTOP 的帖子

SMA在我们TB里算法是一样的

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
4576
积分
184
帖子
19
主题
3
阅读权限
40
注册时间
2009-6-7
最后登录
2012-1-11
29#
发表于 2009-7-30 19:03:51 |只看该作者
5M调用30M SMA用户函数,nopain兄看看对不对,
Params
        NumericSeries Price(10);
        Numeric Length(10);
        Numeric Weight(1);
Vars
        NumericSeries HalfHourNo;
        NumericSeries MinsIndex;
        BoolSeries First30Min(True);
        NumericSeries SMAValue;
Begin
        If(CurrentBar == 0)
        {
                First30Min = True;
        }Else
        {
                First30Min = First30Min[1];
                If(First30Min && (Minute/30)==0)
                {
                        First30Min = False;
                }

        }

        HalfHourNo = Date*100 + Hour*2+IntPart(Minute/30);
        If(HalfHourNo!=HalfHourNo[1])
        {
                MinsIndex = 1;
        }Else
        {
                MinsIndex = MinsIndex[1] + 1;
        }

      
        if (First30Min)
        {
                SMAValue = Summation(Price, Length)/Length;
        }else
        {
                SMAValue = (SMAValue[MinsIndex]*(Length-Weight)+Price*Weight)/Length;
        }
  
        Return SMAValue;
End

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
30#
发表于 2009-7-31 11:57:15 |只看该作者
应该是要求当时的N个周期30分钟价格的平均值。但不好取的情况,直接用5分钟的N周期平均代替也无妨
误差很小。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-4 07:44

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部