Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共13 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:如何取到macd上两个峰值

1楼
popypopy 发表于:2020/11/6 16:00:04
下面这段代码能取到上一个macd峰值,但是我还需要取到上上一个macd峰值,请大神帮忙看看该怎么写:
diff:=ema(close,12)-ema(close,26);
dea:=ema(diff,9);
macd:=(diff-dea)*2;
a:=barslast(filter(diff=hhv(diff,barslast(diff<dea)),barslast(diff<dea)));
tt:=a+1;
ztt:=ref(tt,tt)+tt;
kk:=ref(diff,ztt-1);
msgout(1,STKNAME()&'macd前高:'&numtostr(kk,3));
2楼
FireScript 发表于:2020/11/6 16:13:13
你这个峰值是怎么定义的?  从你这个代码去理解的话,思路不是很明确。 你用文字描述下你这个思路我看下吧。
3楼
popypopy 发表于:2020/11/6 21:03:20
每一次diff金叉dea然后再死叉dea就构成一次diff大于dea的区间,在该区间内最大的diff值就是我需要取到的的峰值,如下面截图中红圈标注的位置就构成了若干个峰值。我需要取到当前周期之前的上两个diff的峰值,并且获取到峰值所属的bar距离现在的周期。

图片点击可在新窗口打开查看此主题相关图片如下:wx20201106-205840@2xsde.png
图片点击可在新窗口打开查看


4楼
FireScript 发表于:2020/11/9 8:54:55
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  :=EMA(DIFF,M);
MACD1 :2*(DIFF-DEA), COLORSTICK;
macdjc:=cross(diff,dea),NODRAW;//macd金叉
macdsc:=cross(dea,diff),NODRAW;

DRAWICON(macdjc,h,1);
DRAWICON(macdsc,l,1);
M1:=SUMBARS(macdsc,1);//最近一次死叉位置
M2:=SUMBARS(macdsc,2);


maxValue1:ref(HHV(diff,BARSLAST(macdjc)+2),M1-1);//最近一次金叉到死叉之间diff最大值
maxValue2:ref(HHV(diff,BARSLAST(macdjc)+2),M2-1);//上上一次金叉到死叉之间diff最大值
maxValue3:HHV(diff,BARSLAST(macdjc)+2);//如果当前是macd红柱,则最近一次最大值用这个取



recentHigh1:=ref(HHVBARS(diff,BARSLAST(macdjc)+2),M1-1);
recentHigh2:=ref(HHVBARS(diff,BARSLAST(macdjc)+2),M2-1);
recentHigh3:=HHVBARS(diff,BARSLAST(macdjc)+2);


len1:recentHigh1+M1-1;//最近一次金叉到死叉之间的diff最大值到当前的位置
len2:recentHigh2+M2-1;//上上一次金叉到死叉之间的diff最大值到当前的位置
len3:recentHigh3;

这里的统计要分情况。
如果当前是绿柱:
len1,len2 分别是2次最大值距离现在的位置
maxValue1,maxValue2 分别是2次的最大值


如果当前是红柱,把当前的红柱统计在内的话。

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看
也就是从金叉位置到光标位置就是第一个diff最大值所在位置。

那么:
len2,len3 分别是2次最大值距离现在的位置
maxValue2,maxValue3 分别是2次的最大值




5楼
popypopy 发表于:2020/11/9 12:45:45
收到,多谢多谢!
6楼
popypopy 发表于:2021/1/27 3:00:49
遇到一个新的难题,识别连续两次或三次的顶背离的公式该怎么写?
我用macd的两个峰值和相对应位置的close值可以判断是否是顶背离,例如:
顶背离:=maxValue1<maxValue2 and ref(close,len1)>ref(close,len2);

但是下面的代码却不能每次都命中连续顶背离都情况:
Jcount:=count(顶背离,sumbars(macdsc,3));
连续顶背离:=顶背离 AND macdsc and COUNT(Jcount=2,21)=1;
7楼
FireScript 发表于:2021/1/27 9:17:18
 你的思路大致是怎样的?顶背离的代码能理解,但是就是你连续顶背离的判断方式我从你代码没推测出来。
8楼
popypopy 发表于:2021/1/27 16:38:58
大致思路就取前n个macd死叉位置起到当前时间内判断出现了几次顶背离,并且两个顶背离是相连的。
例如:
前5个死叉位置是60,在当前时间到前60个周期内,判断出现了2次顶背离,一次在第5个死叉位置,一次在第3个死叉位置,这两次顶背离中间隔着一个非顶背离的第4个死叉,就不算是连续顶背离;但如果是第3和第4个死叉的位置都命中了顶背离,则判断是在第4个死叉位置属于连续顶背离
9楼
FireScript 发表于:2021/1/28 9:35:19
 顶背离:maxValue1<maxValue2 and ref(close,len1)>ref(close,len2) and macdsc;

连续背离:顶背离 and ref(顶背离,M2-1);//M2是前面定义的一个变量
DRAWICON(顶背离,h,1);
DRAWICON(连续背离,l,2);

这样试下呢。
效果如下:

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看
10楼
popypopy 发表于:2021/2/1 10:17:11
连续顶背离的识别按您讲的方法可以识别了,还有一个问题,如何过滤掉像下图红圈位置标注的持续时间只有2天的macd金叉?这种噪音会干扰指标的判断

图片点击可在新窗口打开查看此主题相关图片如下:20210201-dx1ddd.png
图片点击可在新窗口打开查看

共13 条记录, 每页显示 10 条, 页签: [1] [2]


Powered By Dvbbs Version 8.3.0
Processed in 1.17188 s, 3 queries.