金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 145|回复: 1

请老师帮忙修改一下,谢谢!

[复制链接]

29

主题

92

帖子

92

积分

等级: 免费版

注册:
2021-6-2
曾用名:
发表于 2025-4-24 15:52 | 显示全部楼层 |阅读模式
下面代码写N 型结构的思路,
N 型结构通常指价格走势形成的类似字母" N "的形态,通常由三个关键点构成:第一个高点,回调
后的低点,然后再次上涨突破前高。这种形态常被视为持续形态,我需要定义 N 型结构的具体条件。通常, N 型结构包括以下几个步骤:
1.初始上涨阶段,形成第一个高点
( A 点)。
2.价格回调,形成一个低点( B
点),但不超过前低。
3.价格再次上涨,突破前高 A 点,
形成第二个高点( C 点)。
在编写代码时,需要识别这三个点。可能需要使用变量来记录每个阶段的高点和低点,并在满足条件
时进行标记。
接下来,需要考虑如何处理不同的时间周期和 K 线数量。可能需要使用循环或滑动窗口来查找历史数据中的这些点。此外,还需要处理信号的重绘题,避免在实时数据中出现闪烁。
然后,要编写具体的 PEL 代码。可能需要使用变量来跟踪最近的高点和低点,以及是否满足回调的条件。例如,当价格从高点 A 回调一定幅度后,再次突破 A 点时,触发N 型结构信号。
还需要考虑参数设置,比如回调的幅度、突破的确认条件等,用户可能需要调整这些参数以适应不同的市场情况。另外,用户可能希望在图表上绘制
这些结构,比如用线段连接 A 、B 、 C 点,或者在突破时显示箭头
标记。这需要使用绘图函数,如DRAWLINE 或 DRAWICON 。在实现过程中,需要注意 PEL 语言
的语法,比如变量声明、条件判断、循环结构等。同时,要确保代码的效率,避免过多的历史数据遍历导致性能问题。
可能的挑战包括正确识别回调阶段,避免误判,尤其是在震荡市场中。可能需要加入过滤条件,比如
成交量变化或其他指标确认,以提高信号的准性。
最后,测试代码在不同市场环境下的表现,确保能够正确识别 N 型结构,并根据需要进行优化。

请老师帮忙修改一下,谢谢!
//  N型结构识别系统
INPUT:
    SwingBars(5,2,20),       // 摆动确认周期
    RetracePct(0.382,0.1,0.8), // 回调比例
    BreakConfirm(3,1,5);     // 突破确认周期
VARIABLE:Stage =0;// 阶段标记 0:初始 1:A点确认 2:B点确认
VARIABLE:PointA_H =0;// A点高点
VARIABLE:PointA_L =0; // A点低点
VARIABLE:PointB_H=0;// B点高点
VARIABLE:PointB_L=0;// B点低点
VARIABLE:CurrentTrend=0; // 当前趋势方向
VARIABLE:LineID1=0;// 绘图对象ID
VARIABLE:LineID2=0;// 绘图对象ID
VARIABLE:LineID3 =0;// 绘图对象ID

// 初始化重置
IF BARPOS=1 THEN BEGIN
    Stage = 0;
    CurrentTrend = 0;
END;
// 阶段1:寻找初始趋势
IF Stage=0 THEN BEGIN
    // 确认趋势启动(突破前高)
    IF CLOSE>HHV(HIGH,SwingBars) THEN BEGIN
        PointA_H = HHV(HIGH,SwingBars);
        PointA_L = LLV(LOW,SwingBars);
        Stage = 1;
        CurrentTrend = 1;  // 上升趋势
        // 绘制A点
        LineID1 = DRAWTEXT(BARPOS=HHVBARS(HIGH,SwingBars),HIGH,'A',COLORRED);
    END;
   
    IF CLOSE<LLV(LOW,SwingBars) THEN BEGIN
        PointA_H = HHV(HIGH,SwingBars);
        PointA_L = LLV(LOW,SwingBars);
        Stage = 1;
        CurrentTrend = -1; // 下降趋势
        LineID1 = DRAWTEXT(BARPOS=LLVBARS(LOW,SwingBars),LOW,'A',COLORGREEN);
    END;
END;
// 阶段2:确认回调B点
IF Stage=1 THEN BEGIN
    IF CurrentTrend=1 THEN BEGIN // 上升趋势中的回调
        // 有效回调幅度=最高点*(1-RetracePct)
        ValidRetrace = PointA_H*(1-RetracePct);
        IF LOW<ValidRetrace THEN BEGIN
            PointB_L = LLV(LOW,SwingBars);
            PointB_H = HHV(HIGH,SwingBars);
            Stage = 2;
            // 绘制B点
            LineID2 = DRAWTEXT(BARPOS=LLVBARS(LOW,SwingBars),LOW,'B',COLORCYAN);
            // 绘制回调线段
            DRAWLINE(LineID1,PointA_H,LineID2,PointB_L,COLORLIGHTGRAY);
        END;
    END ELSE BEGIN // 下降趋势中的反弹
        ValidRetrace = PointA_L*(1+RetracePct);
        IF HIGH>ValidRetrace THEN BEGIN
            PointB_H = HHV(HIGH,SwingBars);
            PointB_L = LLV(LOW,SwingBars);
            Stage = 2;
            LineID2 = DRAWTEXT(BARPOS=HHVBARS(HIGH,SwingBars),HIGH,'B',COLORYELLOW);
            DRAWLINE(LineID1,PointA_L,LineID2,PointB_H,COLORLIGHTGRAY);
        END;
    END;
END;
// 阶段3:确认突破C点
IF Stage=2 THEN BEGIN
    IF CurrentTrend=1 THEN BEGIN // 上升N型
        // 突破A点且持续收盘在之上
        BreakCondition = EVERY(CLOSE>PointA_H,BreakConfirm);
        IF BreakCondition THEN BEGIN
            // 绘制C点
            LineID3 = DRAWTEXT(BARPOS=0,HIGH,'C',COLORMAGENTA);
            // 完成N型结构
            DRAWLINE(LineID2,PointB_L,LineID3,HIGH,COLORRED);
            Stage = 0; // 重置进入新循环
            
            // 生成买入信号
            DRAWTEXT_FIX(1,0,0,0,'N型突破确认',COLORRED);
            BUY(1,1,MARKET);
        END;
    END ELSE BEGIN // 下降N型
        BreakCondition = EVERY(CLOSE<PointA_L,BreakConfirm);
        IF BreakCondition THEN BEGIN
            LineID3 = DRAWTEXT(BARPOS=0,LOW,'C',COLORBLUE);
            DRAWLINE(LineID2,PointB_H,LineID3,LOW,COLORGREEN);
            Stage = 0;
            
            DRAWTEXT_FIX(1,0,0,0,'N型下破确认',COLORGREEN);
            SELLSHORT(1,1,MARKET);
        END;
    END;
END;
// 可视化增强
DRAWTEXT_FIX(1,0.2,0,0,'当前阶段:'+NUMTOSTR(Stage,0)),COLORWHITE;
DRAWTEXT_FIX(1,0.2,0.1,0,'趋势方向:'+IIFSTR(CurrentTrend=1,'上涨','下跌')),COLORWHITE;
// 清空过期绘图
IF BARSTATUS=2 AND NOT(Stage=2) THEN BEGIN
    DELETEDRAWOBJECT(LineID1);
    DELETEDRAWOBJECT(LineID2);
    DELETEDRAWOBJECT(LineID3);
END;
回复

使用道具 举报

38

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-4-24 16:01 | 显示全部楼层
//  N型结构识别系统
INPUT:
    SwingBars(5,2,20),       // 摆动确认周期
    RetracePct(0.382,0.1,0.8), // 回调比例
    BreakConfirm(3,1,5);     // 突破确认周期
VARIABLE:Stage =0;// 阶段标记 0:初始 1:A点确认 2:B点确认
VARIABLE:PointA_H =0;// A点高点
VARIABLE:PointA_L =0; // A点低点
VARIABLE:PointB_H=0;// B点高点
VARIABLE:PointB_L=0;// B点低点
VARIABLE:CurrentTrend=0; // 当前趋势方向
VARIABLE:LineID1=0;// 绘图对象ID
VARIABLE:LineID2=0;// 绘图对象ID
VARIABLE:LineID3 =0;// 绘图对象ID

// 初始化重置
IF BARPOS=1 THEN BEGIN
    Stage := 0;
    CurrentTrend := 0;
END;
// 阶段1:寻找初始趋势
temp:=HHV(HIGH,SwingBars);
temp1:=LLV(LOW,SwingBars);
temp2:=HHVBARS(HIGH,SwingBars);
temp3:=LLVBARS(LOW,SwingBars);
IF Stage=0 THEN BEGIN
    // 确认趋势启动(突破前高)
    IF CLOSE>temp THEN BEGIN
        PointA_H: = temp;
        PointA_L: = temp1;
        Stage := 1;
        CurrentTrend := 1;  // 上升趋势
        // 绘制A点
        DRAWTEXT(BARPOS=temp3,HIGH,'A',COLORRED);
    END;
   
    IF CLOSE<temp2 THEN BEGIN
        PointA_H := temp;
        PointA_L := temp2;
        Stage := 1;
        CurrentTrend = -1; // 下降趋势
        DRAWTEXT(BARPOS=temp3,LOW,'A',COLORGREEN);
    END;
END;
// 阶段2:确认回调B点
IF Stage=1 THEN BEGIN
    IF CurrentTrend=1 THEN BEGIN // 上升趋势中的回调
        // 有效回调幅度=最高点*(1-RetracePct)
        ValidRetrace := PointA_H*(1-RetracePct);
        IF LOW<ValidRetrace THEN BEGIN
            PointB_L := temp2;
            PointB_H := temp;
            Stage := 2;
            // 绘制B点
            DRAWTEXT(BARPOS=temp3,LOW,'B',COLORCYAN);
            // 绘制回调线段
            DRAWLINE(LineID1,PointA_H,LineID2,PointB_L,0);
        END;
    END ELSE BEGIN // 下降趋势中的反弹
        ValidRetrace = PointA_L*(1+RetracePct);
        IF HIGH>ValidRetrace THEN BEGIN
            PointB_H := temp;
            PointB_L := temp2;
            Stage := 2;
            DRAWTEXT(BARPOS=temp2,HIGH,'B',COLORYELLOW);
            DRAWLINE(LineID1,PointA_L,LineID2,PointB_H,0);
        END;
    END;
END;


temp5:=EVERY(CLOSE>PointA_H,BreakConfirm);
temp6:=EVERY(CLOSE<PointA_L,BreakConfirm);
// 阶段3:确认突破C点
IF Stage=2 THEN BEGIN
    IF CurrentTrend=1 THEN BEGIN // 上升N型
        // 突破A点且持续收盘在之上
        BreakCondition :=temp5;
        IF BreakCondition THEN BEGIN
            // 绘制C点
            DRAWTEXT(BARPOS=0,HIGH,'C',COLORMAGENTA);
            // 完成N型结构
            DRAWLINE(LineID2,PointB_L,LineID3,HIGH,COLORRED);
            Stage := 0; // 重置进入新循环
            
            // 生成买入信号
            DRAWTEXT(1,c,'N型突破确认',COLORRED);
            BUY(1,1,MARKET);
        END;
    END ELSE BEGIN // 下降N型
        BreakCondition := temp6;
        IF BreakCondition THEN BEGIN
            DRAWTEXT(BARPOS=0,LOW,'C',COLORBLUE);
            DRAWLINE(LineID2,PointB_H,LineID3,LOW,COLORGREEN);
            Stage := 0;
            
            DRAWTEXT(1,c,'N型下破确认',COLORGREEN);
            SELLSHORT(1,1,MARKET);
        END;
    END;
END;

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 00:39 , Processed in 0.162240 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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