
等级: 新手上路
- 注册:
- 2025-2-17
- 曾用名:
|

楼主 |
发表于 2025-2-17 11:59
|
显示全部楼层
// 系统声明
INPUT: N(5,1,100); // 分型检测周期
VARIABLE: Top1=0,Top2=0,Top3=0,Bottom1=0,Bottom2=0,Bottom3=0;
VARIABLE: Top1Bar=0,Top2Bar=0,Top3Bar=0,Bottom1Bar=0,Bottom2Bar=0,Bottom3Bar=0;
VARIABLE: WedgeType="";
// 顶分型检测函数(无参数,符合PEL规范)
FUNCTION IsTopFractal()
BEGIN
IsTopFractal := 0;
IF BARPOS > N THEN // 确保足够的历史数据
BEGIN
// 检测5K线顶分型(中心K线为当前K线-2)
IF HIGH[2] > HIGH[4] AND
HIGH[2] > HIGH[3] AND
HIGH[2] > HIGH[1] AND
HIGH[2] > HIGH[0] THEN
BEGIN
IsTopFractal := 1;
END;
END;
END;
// 底分型检测函数(无参数,符合PEL规范)
FUNCTION IsBottomFractal()
BEGIN
IsBottomFractal := 0;
IF BARPOS > N THEN
BEGIN
// 检测5K线底分型(中心K线为当前K线-2)
IF LOW[2] < LOW[4] AND
LOW[2] < LOW[3] AND
LOW[2] < LOW[1] AND
LOW[2] < LOW[0] THEN
BEGIN
IsBottomFractal := 1;
END;
END;
END;
// 主程序
BEGIN
// 逆向遍历K线(从最新到最旧)
FOR i = BARCOUNT-1 DOWNTO N DO
BEGIN
// 当前K线索引处理
REF(C, 0); // 同步K线位置
IF IsTopFractal() THEN
BEGIN
// 更新顶分型序列
Top3 := Top2;
Top2 := Top1;
Top1 := HIGH[2];
Top3Bar := Top2Bar;
Top2Bar := Top1Bar;
Top1Bar := BARPOS[2]; // 记录分型位置
END;
IF IsBottomFractal() THEN
BEGIN
// 更新底分型序列
Bottom3 := Bottom2;
Bottom2 := Bottom1;
Bottom1 := LOW[2];
Bottom3Bar := Bottom2Bar;
Bottom2Bar := Bottom1Bar;
Bottom1Bar := BARPOS[2]; // 记录分型位置
END;
END;
// 楔形形态判断
// 看跌楔形(收敛下降)
IF Top1 < Top2 AND Top2 < Top3 AND
Bottom1 < Bottom2 AND Bottom2 < Bottom3 AND
MAX(Bottom1,MAX(Bottom2,Bottom3)) < MIN(Top1,MIN(Top2,Top3)) THEN
BEGIN
WedgeType := "看跌楔形";
DRAWTEXT(BARPOS=Top1Bar, HIGH[Top1Bar], "↙", COLORRED);
DRAWTEXT(BARPOS=Top2Bar, HIGH[Top2Bar], "↙", COLORRED);
DRAWTEXT(BARPOS=Top3Bar, HIGH[Top3Bar], "↙", COLORRED);
DRAWTEXT(BARPOS=Bottom1Bar, LOW[Bottom1Bar], "↖", COLORBLUE);
DRAWTEXT(BARPOS=Bottom2Bar, LOW[Bottom2Bar], "↖", COLORBLUE);
DRAWTEXT(BARPOS=Bottom3Bar, LOW[Bottom3Bar], "↖", COLORBLUE);
END;
// 看涨楔形(收敛上升)
IF Bottom1 > Bottom2 AND Bottom2 > Bottom3 AND
Top1 > Top2 AND Top2 > Top3 AND
MIN(Top1,MIN(Top2,Top3)) > MAX(Bottom1,MAX(Bottom2,Bottom3)) THEN
BEGIN
WedgeType := "看涨楔形";
DRAWTEXT(BARPOS=Bottom1Bar, LOW[Bottom1Bar], "↘", COLORGREEN);
DRAWTEXT(BARPOS=Bottom2Bar, LOW[Bottom2Bar], "↘", COLORGREEN);
DRAWTEXT(BARPOS=Bottom3Bar, LOW[Bottom3Bar], "↘", COLORGREEN);
DRAWTEXT(BARPOS=Top1Bar, HIGH[Top1Bar], "↗", COLORYELLOW);
DRAWTEXT(BARPOS=Top2Bar, HIGH[Top2Bar], "↗", COLORYELLOW);
DRAWTEXT(BARPOS=Top3Bar, HIGH[Top3Bar], "↗", COLORYELLOW);
END;
// 输出结果
IF WedgeType <> "" THEN
MESSAGE("形态识别成功!当前形态:" + WedgeType +
"\n顶分型序列:" + NUMTOSTR(Top3,2) + "→" + NUMTOSTR(Top2,2) + "→" + NUMTOSTR(Top1,2) +
"\n底分型序列:" + NUMTOSTR(Bottom3,2) + "→" + NUMTOSTR(Bottom2,2) + "→" + NUMTOSTR(Bottom1,2));
END; |
|