欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 关于MACD的顶底背离

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有6907人关注过本帖树形打印复制链接

主题:关于MACD的顶底背离

帅哥哟,离线,有人找我吗?
sarz
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
关于MACD的顶底背离  发帖心情 Post By:2016/3/24 22:16:14    Post IP:113.90.202.28[只看该作者]

程序是逐K线模式下运行的。总体思路是:找到DIFF的拐点,再找拐点的最高/低价,再找出周期内diff的最大/小值,若此值不为拐点,则判读此极值时的价格和拐点价格是否形成顶底背离。写完之后发现某些背离没有判断出来,有可能是因为周期的设置局限了背离的判断,请各位前辈帮忙看看原因。
代码如下:

DIFF : EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  : EMA(DIFF,9);
MACD : 2*(DIFF-DEA), COLORSTICK;


//DIFF底背离:

//拐点到当前的周期数
BottumPointCount := BARSLAST( ( DIFF > REF(DIFF, 1) ) AND ( REF(DIFF, 2) > REF(DIFF, 1) ) );

//拐点最低价
BottumPointPrice := REF(LOW, BottumPointCount);

//拐点DIFF值
BottumPointDIFF := REF(DIFF, 1);

//周期内DIFF最小值
DIFFMin := LLV(DIFF, BottumPointCount + Term);

//DIFF最小值到当前的周期数
DIFFMinCount := LLVBARS(DIFF, BottumPointCount + Term);

//MACD最小值时的最低价
DIFFMinPrice := REF(LOW, DIFFMinCount);

//若周期内有小于拐点的DIFF且股价高于拐点最低价
BottumFlag : DIFFMinCount > BottumPointCount 
                AND DIFFMin < BottumPointDIFF 
                AND DIFFMinPrice > BottumPointPrice
                AND DIFF > REF(DIFF, 1)
                AND REF(DIFF, 2) > REF(DIFF, 1), COLORGREEN;


//DIFF顶背离:

//拐点到当前的周期数
TopPointCount := BARSLAST( ( DIFF < REF(DIFF, 1) ) AND ( REF(DIFF, 1) > REF(DIFF, 2) ) );

//拐点最高价
TopPointPrice := REF(HIGH, TopPointCount);

//拐点DIFF值
TopPointDIFF := REF(DIFF, 1);

//周期内DIFF最D大值
DIFFMax := HHV(DIFF, TopPointCount + Term);

//DIFF最大值到当前的周期数
DIFFMaxCount := HHVBARS(DIFF, TopPointCount + Term);

//DIFF最大值时的最高价
DIFFMaxPrice := REF(HIGH, DIFFMaxCount);

//若周期内有大于拐点的MACD,且股价低于拐点价,且当前点为拐点
TopFlag : DIFFMaxCount > TopPointCount 
                AND DIFFMax > TopPointDIFF
                AND DIFFMaxPrice < TopPointPrice
                AND DIFF < REF(DIFF, 1)
                AND REF(DIFF, 1) > REF(DIFF, 2), COLORYELLOW;


其中,周期Term:缺省30,最小10,最大60,步长为2

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2016/3/25 9:10:48    Post IP:58.246.57.26[只看该作者]

先问下拐点用户是如何定义的?有没有图片说明的?


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
sarz
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2016/3/25 10:52:59    Post IP:61.144.196.189[只看该作者]

只需要满足左右相邻各一根的diff值比中间的diff值高,则认为diff为底部拐点。顶部拐点同理。

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2016/3/25 10:59:02    Post IP:58.246.57.26[只看该作者]

高低拐点到现在的周期数需要加一,不加一就是拐点后面的第一根k线位置

BottumPointCount := BARSLAST( ( DIFF > REF(DIFF, 1) ) AND ( REF(DIFF, 2) > REF(DIFF, 1) ) )+1;
TopPointCount := BARSLAST( ( DIFF < REF(DIFF, 1) ) AND ( REF(DIFF, 1) > REF(DIFF, 2) ) )+1;

 

还有高低拐点的diff值你这样写我不明白是为什么
//拐点DIFF值
BottumPointDIFF := REF(DIFF, 1);
TopPointDIFF := REF(DIFF, 1);

组后这个周期内diff最小值是什么意思不明白,看不懂这个算法
//周期内DIFF最小值
DIFFMin := LLV(DIFF, BottumPointCount + Term);

[此贴子已经被作者于2016/3/25 10:59:52编辑过]


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
sarz
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2016/3/25 12:55:56    Post IP:61.144.196.189[只看该作者]

因为只有走完拐点后的一根K线才能确定该点为拐点,因为是仅刷最后一根K线模式,所以默认当前点为拐点的下一个K线。
DIFFMin := LLV(DIFF, BottumPointCount + Term);
这句的目的是,找到此拐点到前term周期内的diff最小值,若最小值不为此拐点,再去判断拥有diff最小值的这根K线的LOW与拐点的LOW是否形成底背离。

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2016/3/25 13:24:47    Post IP:58.246.57.26[只看该作者]

1.意思是以拐点之后的一根k线定义为拐点?

2找到此拐点到前term周期内的diff最小值.

不能这样写,要写成:

DIFFMin := ref(LLV(DIFF,  Term),bottumpointcount);


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
sarz
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2016/3/25 14:28:23    Post IP:61.144.196.189[只看该作者]

2找到此拐点到前term周期内的diff最小值.

不能这样写,要写成:

DIFFMin := ref(LLV(DIFF,  Term),bottumpointcount);

您说的这部分我明白了。

1.意思是以拐点之后的一根k线定义为拐点?
这个并不是说把拐点后的一根K线定义成拐点,而是说,在逐k线模式下,必须走完了拐点后的一根k线,才能确定这根点是拐点。

思路是:先找到diff的拐点(右边),再找到从拐点算起一定周期(term)内的diff最小值(左边),判断这两个值之间的价格最小值,若左边的最小值比右边的最小值大,则形成底背离。
老师您看这样是合理的吗?

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2016/3/25 14:30:29    Post IP:58.246.57.26[只看该作者]

那么拐点不是之后那一根,所以要按照我写的那样加个1,不然你的拐点是拐点之后的一根,而且我这样写也是在拐点之后一根k线确定拐点才成立的


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
sarz
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:31 积分:0 威望:0 精华:0 注册:2015/12/22 1:14:23
  发帖心情 Post By:2016/3/25 14:41:12    Post IP:61.144.196.189[只看该作者]

嗯,明白。谢谢老师,还想请教您,如果现在我想做些改动:
1.从找diff的拐点,去对比最低价,变成寻找价格的拐点,去对比diff值。
2.不仅需要寻找周期内价格最低点和当前拐点是否有背离,还要去寻找周期内每一个价格最低点的拐点和当前拐点是否有背离,这个循环应该加在哪?
另外,回复怎么插入图片啊?我上一张回复是有图片的,没显示,我是添加附件进去的。

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2016/3/25 14:56:08    Post IP:58.246.57.26[只看该作者]

DIFF : EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  : EMA(DIFF,9);
MACD : 2*(DIFF-DEA), COLORSTICK;


//DIFF底背离:

//拐点到当前的周期数
BottumPointCount := BARSLAST( ( close> REF(close, 1) ) AND ( REF(close, 2) > REF(close, 1) ) )+1;

//拐点最低价
BottumPointPrice := REF(diff, BottumPointCount);

//拐点DIFF值
BottumPointDIFF := REF(close, 1);

//周期内DIFF最小值
DIFFMin := ref(LLV(close, term),BottumPointCount );

//DIFF最小值到当前的周期数
DIFFMinCount :=ref( LLVBARS(close,term), BottumPointCount )+bottumpointcount;

//MACD最小值时的最低价
DIFFMinPrice := REF(diff, DIFFMinCount);

 

基本上是diff和close的对换,然后改掉一点原本错误的地方即可



金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
总数 27 1 2 3 下一页