金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2700|回复: 41

MACD背离问题

[复制链接]

6

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
发表于 2025-5-15 23:08 | 显示全部楼层 |阅读模式
在红堆1中的某一天选股,
要求:
1 选股日的MACD值定义为:MACD1 对应的K线为K1 对应的DIFF为DIFF1
2 从选股日开始向前找到红堆2(红堆2和红堆1只能相隔一个绿堆1),将红堆2中的MACD最大值定义为MACD2  对应的K线为K2 对应的DIFF为DIFF2
3 K1的收盘价>K2的收盘价 且 MACD1<MACD2 且 DIFF1<DIFF2





补充内容 (2025-5-15 23:09):
问题: 如何写选股公式  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

6

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-15 23:13 | 显示全部楼层
我自己写了一个绿柱的底背离公式,但是无法选出想要的股票。麻烦技术大神帮忙看看我的代码哪里错了? 也顺便帮忙写一下上面的红柱隔堆顶背离的筛选公式

{ 参数设置:历史数据周期 }
N:=250;

DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
MACD:=(DIF-DEA)*2;

当前绿柱:=MACD<0;

{===== 堆结构定义 =====}
{ 当前绿堆S绿1 }
S绿1_开始:=BARSLAST(CROSS(0,MACD));  { 最后一次MACD下穿0轴的位置 }

{ 前红堆S红1 }
红堆候选:=BARSLAST(CROSS(MACD,0));  
S红1_开始:=IF(红堆候选 < S绿1_开始, 红堆候选 + 1, 0);  { +1修正交叉点偏移 }
{ 验证红堆后无绿柱直到S绿1开始 }
红堆有效:=COUNT(CROSS(0,MACD),S红1_开始)=0;  
S红1_开始:=IF(红堆有效, S红1_开始, 0);

{ 前绿堆S绿2 }
绿堆候选:=BARSLAST(CROSS(0,REF(MACD,S红1_开始))) + S红1_开始 + 1;  
{ 验证绿堆后无红柱直到S红1开始 }
绿堆有效:=COUNT(CROSS(MACD,0),绿堆候选)=0;  
S绿2_开始:=IF(绿堆有效 AND 绿堆候选 < S红1_开始, 绿堆候选, 0);

{===== 堆结构验证 =====}
有效结构:=
  S绿2_开始 < S红1_开始 AND
  S红1_开始 < S绿1_开始 AND
  S绿2_开始 > 0;

{===== 计算S绿2极值 =====}
S绿2_区间长度:=S红1_开始 - S绿2_开始 + 1;
S绿2_极值:=LLV(REF(MACD,S绿2_开始),S绿2_区间长度);
S绿2_极值位置:=S绿2_开始 + LLVBARS(REF(MACD,S绿2_开始),S绿2_区间长度);
K2_收盘:=REF(CLOSE,S绿2_极值位置);

{===== 选股条件 =====}
条件1:=CLOSE < K2_收盘;
条件2:=ABS(S绿2_极值)>ABS(MACD);

选股:当前绿柱 AND 有效结构 AND 条件1 AND 条件2;
回复

使用道具 举报

42

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-16 09:23 | 显示全部楼层
//中间变量
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  :=EMA(DIFF,9);
MACD :=2*(DIFF-DEA);
cond1:macd>0;
macd1_h:=hhv(macd,barslast(cross(macd,0)));
close1_h:=hhv(close,barslast(cross(macd,0)));

macd2_h:=ref(macd1_h,barslast(cross(0,macd))+1);
close2_h:=ref(close1_h,barslast(cross(0,macd))+1);

cond:cond1 and MACD1_H<MACD2_H and CLOSE1_H>CLOSE2_H;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-16 10:45 | 显示全部楼层
技术008 发表于 2025-5-16 09:23
//中间变量
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  :=EMA(DIFF,9);

您好 这里没有加入DIFF值的背离  
回复

使用道具 举报

42

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-16 10:48 | 显示全部楼层
//中间变量
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  :=EMA(DIFF,9);
MACD :=2*(DIFF-DEA);
cond1:macd>0;
macd1_h:=hhv(macd,barslast(cross(macd,0)));
close1_h:=hhv(close,barslast(cross(macd,0)));
diff1_h:=hhv(diff,barslast(cross(macd,0)));
macd2_h:=ref(macd1_h,barslast(cross(0,macd))+1);
close2_h:=ref(close1_h,barslast(cross(0,macd))+1);
diff2_h:=ref(diff1_h,barslast(cross(0,macd))+1);
cond:cond1 and MACD1_H<MACD2_H and CLOSE1_H>CLOSE2_H and diff1_h>diff2_h;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-16 11:15 | 显示全部楼层
技术008 发表于 2025-5-16 10:48
//中间变量
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  :=EMA(DIFF,9);

macd1_h:=hhv(macd,barslast(cross(macd,0)));
close1_h:=hhv(close,barslast(cross(macd,0)));
diff1_h:=hhv(diff,barslast(cross(macd,0)));
以上3行是求MACD/收盘价/DIFF 从MACD最近一次上穿0轴到选股日期间的最大值吗?  我的本意是用选股日当日的MACD/收盘价/DIFF 和红堆2中的MACD的最大值和对应的收盘价以及DIFF相比较,不需要求红堆1中的极值。
回复

使用道具 举报

42

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-16 11:19 | 显示全部楼层
那你就把最后比较那改下就好

cond:cond1 and macd<MACD2_H and CLOSE>CLOSE2_H and diff>diff2_h;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

6

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-16 11:26 | 显示全部楼层
技术008 发表于 2025-5-16 11:19
那你就把最后比较那改下就好

cond:cond1 and macdCLOSE2_H and diff>diff2_h;

谢谢您的指导
回复

使用道具 举报

6

主题

43

帖子

43

积分

Rank: 1

等级: 新手上路

注册:
2025-5-14
曾用名:
 楼主| 发表于 2025-5-16 15:57 | 显示全部楼层
技术008 发表于 2025-5-16 11:19
那你就把最后比较那改下就好

cond:cond1 and macdCLOSE2_H and diff>diff2_h;

macd2_h := ref(macd1_h, barslast(cross(0,macd)) +1)
这行句子我有点不太理解请问这个+1 是什么意思?
回复

使用道具 举报

42

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-5-16 15:59 | 显示全部楼层
上一次死叉距离现在周期数,再加1就是红柱最后一根到现在位置

然后ref就是找到红柱最后一个的位置
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-7-3 15:10 , Processed in 0.105357 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表