等级: 免费版
- 注册:
- 2021-6-2
- 曾用名:
|
下面代码写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;
|
|