金魔方缠论分笔公式(源码作者 benyip: zqbenye@163.com)
//逐根
#Run_By_Bar
#Run_Every_Bar
#NoDefaultOutput
#MainChart
//自定义
#define 上涨 1
#define 下跌 -1
#define 盘整 0
#Define 顶 1
#Define 底 -1
#Define 上破 2
#Define 下破 -2
#Define 废弃的顶 3
#Define 废弃的底 -3
#Define 分型右侧元素延伸 1
#Define 向上笔分型构造 5
#Define 向上笔延伸 6
#Define 向下笔分型构造 -5
#Define 向下笔延伸 -6
#Define 笔中的顶 7
#Define 笔中的底 -7
#Define 新笔周期 3
#Define 新笔 3
#Define 旧笔 4
#Define 最新完成K线位置 0
Input:
新笔标准(1);
VARIABLE:
新高(0),新低(0),笔状态(0),K线方向(0),TL_ID(0), //连续
K线类型(0), 分型区间上沿(0), 分型区间下沿(0), 笔尖(0), //离散
NumericSimple i(0),
NumericSimple 前笔高点位置(0),//顶位置
NumericSimple 前笔低点位置(0),//底位置
NumericSimple 今笔高点位置(0),//顶位置
NumericSimple 今笔低点位置(0),//底位置
NumericSimple 顶位置(0),//笔中分型顶
NumericSimple 底位置(0),//笔中分型底
NumericSimple 分型上沿(0),//分型区间上沿
NumericSimple 分型下沿(0),//分型区间下沿
NumericSimple 分型右侧元素(1),//分型右侧元素包含
NumericSimple 新K形成(0), //非包含
NumericSimple 找到符合K线(0), //特殊处理时标志
NumericSimple 笔计数(0); //计算一笔的非包含K线数
//******************************主程序******************************
//1.第一根K线处理
IF BARPOS=最新完成K线位置+1 THEN
BEGIN
前笔高点位置=最新完成K线位置;
前笔低点位置=最新完成K线位置;
今笔高点位置=最新完成K线位置;
今笔低点位置=最新完成K线位置;
顶位置=最新完成K线位置;
底位置=最新完成K线位置;
分型上沿=High[最新完成K线位置];
分型下沿=Low[最新完成K线位置];
新高[最新完成K线位置]=分型上沿;
新低[最新完成K线位置]=分型下沿;
K线方向[最新完成K线位置]=盘整;
笔状态[最新完成K线位置]=盘整;
Print('第一根K线处理');
Exit;
END;
前笔高点位置++;
前笔低点位置++;
今笔高点位置++;
今笔低点位置++;
顶位置++;
底位置++;
//2.K线处理
新K形成=True;
//2.1 K线方向
//2.1.1 上升K线
If High[最新完成K线位置]>新高[最新完成K线位置+1] And
Low[最新完成K线位置]>新低[最新完成K线位置+1] Then
Begin
K线方向[最新完成K线位置]=上涨;
顶位置=最新完成K线位置;
End Else Begin
//2.1.2 下降K线
If High[最新完成K线位置]新低[最新完成K线位置+1]) Or
(High[最新完成K线位置]=新高[今笔高点位置] Then
今笔高点位置=最新完成K线位置;
Default: Begin
//向下笔完成
If K线方向[最新完成K线位置+1]=下跌 And
笔状态[最新完成K线位置+1]=向下笔延伸 And
新低[最新完成K线位置+1]=新低[今笔低点位置] And
((笔计数>新笔 And 新笔标准=True And
(今笔高点位置-今笔低点位置)>新笔周期) Or
(笔计数>旧笔)) Then
Begin
K线类型[今笔低点位置]=底;
笔状态[最新完成K线位置]=向下笔分型构造;
笔计数=1;
笔尖[今笔低点位置]=新低[今笔低点位置];
前笔低点位置=今笔低点位置;
今笔高点位置=最新完成K线位置;
TL_ID[前笔高点位置]=Tl_New(Date[前笔高点位置],Time[前笔高点位置],笔尖[前笔高点位置],
Date[前笔低点位置],Time[前笔低点位置],笔尖[前笔低点位置]);
Tl_SetColor(TL_ID[前笔高点位置],COLORYELLOW);
Tl_SetStyle(TL_ID[前笔高点位置],3);
End Else Begin
找到符合K线=False;
If 新高[最新完成K线位置]>新高[前笔高点位置] Then
Begin
笔状态[最新完成K线位置]=向上笔延伸;
//向下笔区间大于向上笔区间的特殊情况
If 新低[今笔低点位置]新高[最新完成K线位置+1] And
Low[最新完成K线位置]>新低[最新完成K线位置+1]) Or
(High[最新完成K线位置]