
等级: 新手上路
- 注册:
- 2025-1-30
- 曾用名:
|
//@Name=ChanLun_Ultimate
//@Title=缠论终极版
INPUT:
KXNum(NumericSimple, 200, 50, 5000, 50, "分析K线数量"),
MinFormPeriod(NumericSimple, 3, 1, 20, 1, "分型最小形成周期"),
ShowBiZZ(BooleanSimple, True, 0, 1, 1, "显示笔中枢");
VARIABLE:
// K线处理
MergedHigh[5000](0),
MergedLow[5000](0),
UpDownFlag(0),
// 分型系统
TopList[5000](0),
BottomList[5000](0),
ValidTop[5000](0),
ValidBottom[5000](0),
TopFormPeriod[5000](0),
BottomFormPeriod[5000](0),
TopStartBar(-1),
BottomStartBar(-1),
// 笔系统
BiHigh[1000](0),
BiLow[1000](0),
BiStartBar[1000](0),
BiEndBar[1000](0),
BiCount(0),
LastTop(0),
LastBottom(0),
// 中枢系统
ZZTop[200](0),
ZZBot[200](0),
ZZStartBar[200](0),
ZZEndBar[200](0),
ZZCount(0),
BiZZTop[500](0),
BiZZBot[500](0),
BiZZStartBar[500](0),
BiZZEndBar[500](0),
BiZZCount(0);
//======================================================================
// 初始化首根K线
//======================================================================
MergedHigh[0] = HIGH[0];
MergedLow[0] = LOW[0];
//======================================================================
// K线包含处理(Bar索引从1开始)
//======================================================================
FOR i = 1 TO KXNum-1 BEGIN
// 方向判断(严格比较收盘价)
IF CLOSE[i] > CLOSE[i-1] THEN UpDownFlag = 1;
IF CLOSE[i] < CLOSE[i-1] THEN UpDownFlag = -1;
// 处理包含关系
IF (HIGH[i] <= MergedHigh[i-1] AND LOW[i] >= MergedLow[i-1]) OR
(HIGH[i] >= MergedHigh[i-1] AND LOW[i] <= MergedLow[i-1]) THEN
BEGIN
MergedHigh[i] = IIF(UpDownFlag == 1,
MAX(HIGH[i], MergedHigh[i-1]),
MIN(HIGH[i], MergedHigh[i-1]));
MergedLow[i] = IIF(UpDownFlag == 1,
MAX(LOW[i], MergedLow[i-1]),
MIN(LOW[i], MergedLow[i-1]));
END
ELSE BEGIN
MergedHigh[i] = HIGH[i];
MergedLow[i] = LOW[i];
END;
END;
//======================================================================
// 分型识别(Bar索引从2开始)
//======================================================================
FOR i = 2 TO KXNum-1 BEGIN
// 顶分型(中间K线最高)
IF MergedHigh[i-1] > MergedHigh[i] AND
MergedHigh[i-1] > MergedHigh[i-2] THEN
BEGIN
IF TopStartBar == -1 THEN TopStartBar = i-2;
IF MergedLow[i-1] > MergedLow[i-2] THEN BEGIN
TopList[i-1] = 1;
TopFormPeriod[i-1] = (i-1) - TopStartBar + 1;
TopStartBar = -1;
END;
END ELSE TopStartBar = -1;
// 底分型(中间K线最低)
IF MergedLow[i-1] < MergedLow[i] AND
MergedLow[i-1] < MergedLow[i-2] THEN
BEGIN
IF BottomStartBar == -1 THEN BottomStartBar = i-2;
IF MergedHigh[i-1] < MergedHigh[i-2] THEN BEGIN
BottomList[i-1] = 1;
BottomFormPeriod[i-1] = (i-1) - BottomStartBar + 1;
BottomStartBar = -1;
END;
END ELSE BottomStartBar = -1;
END;
//======================================================================
// 有效分型过滤
//======================================================================
FOR i = 1 TO KXNum-1 BEGIN
// 顶分型过滤
IF TopList[i] == 1 THEN BEGIN
ValidTop[i] = IIF((MergedHigh[i] > REF(MergedHigh, 1)) AND
(TopFormPeriod[i] >= MinFormPeriod), 1, 0);
IF ValidTop[i] == 1 THEN
DRAWTEXT(Barpos[i], MergedHigh[i]*1.002,
STR('顶(', TopFormPeriod[i], ')'), COLORRED, 12);
END;
// 底分型过滤
IF BottomList[i] == 1 THEN BEGIN
ValidBottom[i] = IIF((MergedLow[i] < REF(MergedLow, 1)) AND
(BottomFormPeriod[i] >= MinFormPeriod), 1, 0);
IF ValidBottom[i] == 1 THEN
DRAWTEXT(Barpos[i], MergedLow[i]*0.998,
STR('底(', BottomFormPeriod[i], ')'), COLORGREEN, 12);
END;
END;
//======================================================================
// 笔识别与绘制
//======================================================================
FOR i = 1 TO KXNum-1 BEGIN
// 上涨笔(底->顶)
IF ValidTop[i] == 1 AND LastBottom > 0 THEN BEGIN
IF BiCount < 999 THEN BEGIN
BiHigh[BiCount] = MergedHigh[i];
BiLow[BiCount] = MergedLow[LastBottom];
BiStartBar[BiCount] = LastBottom;
BiEndBar[BiCount] = i;
DRAWLINE(Barpos[LastBottom], MergedLow[LastBottom],
Barpos[i], MergedHigh[i], COLORRED, 1, 1);
BiCount = BiCount + 1;
END;
LastTop = i;
END;
// 下跌笔(顶->底)
IF ValidBottom[i] == 1 AND LastTop > 0 THEN BEGIN
IF BiCount < 999 THEN BEGIN
BiHigh[BiCount] = MergedHigh[LastTop];
BiLow[BiCount] = MergedLow[i];
BiStartBar[BiCount] = LastTop;
BiEndBar[BiCount] = i;
DRAWLINE(Barpos[LastTop], MergedHigh[LastTop],
Barpos[i], MergedLow[i], COLORGREEN, 1, 1);
|
|