设为首页收藏本站

 找回密码
 注册
查看: 62400|回复: 14
打印 上一主题 下一主题

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

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
1#
发表于 2008-4-7 11:22:55 |显示全部楼层
您上面的程序和直接用1分钟的Close没什么区别,如果想要完全精确的周线的MACD数据,需要自行实现XAverage函数对周线数据的调用。
下贴可以提供一些参考,具体实现比这个还要复杂:
http://www.tradeblazer.net/forum/thread-1996-1-1.html

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2008-4-7 12:09:00 |显示全部楼层
等晚上有空我来写

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
3#
发表于 2008-4-8 21:26:26 |显示全部楼层
日线中调用周线MACD数据的代码。

1、新建用户函数WeekXAverage,返回值为数值型,代码如下:
  1. //------------------------------------------------------------------------
  2. // 简称: WeekXAverage
  3. // 名称: 日线转化周线的指数平均
  4. // 类别: 用户函数
  5. // 类型: 用户函数
  6. // 输出: 数值型
  7. //------------------------------------------------------------------------

  8. Params
  9.         NumericSeries Price(10);
  10.         Numeric Length(10);
  11. Vars
  12.         NumericSeries WeeksNo;
  13.         NumericSeries WeekDays;
  14.         BoolSeries FirstWeek(True);
  15.         Numeric sFcactor;
  16.         NumericSeries XAvgValue;
  17. Begin
  18.         If(CurrentBar == 0)
  19.         {
  20.                 FirstWeek = True;
  21.         }Else
  22.         {
  23.                 FirstWeek = FirstWeek[1];
  24.                 If(FirstWeek &&  Weekday==1)
  25.                 {
  26.                         FirstWeek = False;
  27.                 }
  28.         }
  29.        
  30.         WeeksNo = IntPart(DateDiff(19700105,Date)/7);
  31.         If(WeeksNo!=WeeksNo[1])
  32.         {
  33.                 WeekDays = 1;
  34.         }Else
  35.         {
  36.                 WeekDays = WeekDays[1] + 1;
  37.         }

  38.         sFcactor = 2 / ( Length + 1 );
  39.         if (FirstWeek)
  40.         {
  41.                 XAvgValue = Price;
  42.         }else
  43.         {
  44.                 XAvgValue = XAvgValue[WeekDays] + sFcactor * ( Price - XAvgValue[WeekDays] ) ;
  45.         }       
  46.     Return XAvgValue;
  47. End

  48. //------------------------------------------------------------------------
  49. // 编译版本        GS2004.06.12
  50. // 用户版本        2008/04/08 20:23
  51. // 版权所有        nopain
  52. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  53. //                        每一版本的TrabeBlazer公式修改和重写的权利
  54. //------------------------------------------------------------------------
复制代码

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2008-4-8 21:27:58 |显示全部楼层
2、新建技术指标WeekMACD,代码如下:
  1. //------------------------------------------------------------------------
  2. // 简称: WeekMACD
  3. // 名称: 周线MACD
  4. // 类别: 技术指标
  5. // 类型: 其它类
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.         Numeric FastLength(12);
  10.         Numeric SlowLength(26);
  11.         Numeric MACDLength(9);
  12. Vars
  13.         NumericSeries MACDValue;
  14.         Numeric AvgMACD;
  15.         Numeric MACDDiff;
  16. Begin
  17.         MACDValue = WeekXAverage( Close, FastLength ) - WeekXAverage( Close, SlowLength ) ;       
  18.         AvgMACD = WeekXAverage(MACDValue,MACDLength);
  19.         MACDDiff = MACDValue - AvgMACD;
  20.         PlotNumeric("MACD",MACDValue);
  21.         PlotNumeric("MACDAvg",AvgMACD);
  22.         If (MACDDiff >= 0)       
  23.                 PlotNumeric("MACDDiff",MACDDiff,Red);
  24.         Else
  25.                 PlotNumeric("MACDDiff",MACDDiff,Green);
  26.         PlotNumeric("零线",0);          
  27. End

  28. //------------------------------------------------------------------------
  29. // 编译版本        GS2004.06.12
  30. // 用户版本        2008/04/08 20:20
  31. // 版权所有        nopain
  32. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  33. //                        每一版本的TrabeBlazer公式修改和重写的权利
  34. //------------------------------------------------------------------------
复制代码

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2008-4-8 21:33:19 |显示全部楼层
3、您可以建一个周线图,插入标准的MACD指标,然后新建一个日线图,插入WeekMACD指标。
为了让两个图的数据完全相等,周线的数据应该要大于120,日线的数据应该要大于(120*5=600)。否则会出现精度误差,这是因为指数平均的最大回溯周期大概是在120左右

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
6#
发表于 2008-4-9 11:05:14 |显示全部楼层
1、Price就是您想要计算的数据源,例子里面是Close,也可以是其他任何的序列变量值。
2、Length是求指数平均的周期

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
7#
发表于 2008-5-16 09:00:13 |显示全部楼层
原帖由 szzsh 于 2008-5-16 00:50 发表
Price(10)和Length(10)
请问为什么里面参数定义为10??一星期5根K线,是不是应该定义为5啊??


10只是默认参数,具体值取决于调用时传入的参数

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
8#
发表于 2008-5-16 09:09:39 |显示全部楼层
原帖由 szzsh 于 2008-5-16 01:16 发表
如果5分钟周期提取30分钟周期MACD值呢??该怎么改??谢谢


您可以参考下面的帖子:
http://www.tradeblazer.net/forum/viewthread.php?tid=2037

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
9#
发表于 2008-11-26 09:55:12 |显示全部楼层
当然做得到,比较麻烦,您可以根据例子自行实现。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
10#
发表于 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
复制代码

使用道具 举报

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

bottom

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

GMT+8, 2024-5-22 20:24

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部