以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- [求助]如何转换成金字塔公式。 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=97021) |
|
-- 作者:系统使用者 -- 发布时间:2016/5/4 12:59:05 -- [求助]如何转换成金字塔公式。 下面是以前金魔方的分笔公式,如何转成金字塔的。 //逐根 #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,0,1,1), 缺口处理(1,0,1,1), 限制高低(1,0,1,1); VARIABLE: 新高(0),新低(0),笔状态(0),K线方向(0), //连续 K线类型(0), 分型区间上沿(0), 分型区间下沿(0), 笔尖(Invalid), //离散 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), //成笔条件 NumericSimple 缺口(0), //分型有缺口 NumericSimple 笔计数(0); //计算一笔的非包含K线数 //******************************主程序****************************** //1.第一根K线处理 笔:笔尖,LineDot,ColorYellow; 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] And Low[最新完成K线位置]<新低[最新完成K线位置+1] Then Begin K线方向[最新完成K线位置]=下跌; 底位置=最新完成K线位置; End Else Begin //2.1.3 包含K线,保持原方向 K线方向[最新完成K线位置]=K线方向[最新完成K线位置+1]; 新K形成=False; End; End; //2.2 非包含处理序列K线 If 新K形成=False Then Begin If K线方向[最新完成K线位置]=下跌 Then Begin 新高[最新完成K线位置]=Min(High[最新完成K线位置],新高[最新完成K线位置+1]); If Low[最新完成K线位置]<=新低[最新完成K线位置+1] Then Begin 新低[最新完成K线位置]=Low[最新完成K线位置]; 底位置=最新完成K线位置; 分型下沿=Low[最新完成K线位置]; If 分型右侧元素=分型右侧元素延伸 Then 分型区间下沿[顶位置]=Min(分型区间下沿[顶位置],新低[最新完成K线位置]); End Else 新低[最新完成K线位置]=新低[最新完成K线位置+1]; End Else Begin If High[最新完成K线位置]>=新高[最新完成K线位置+1] Then Begin 新高[最新完成K线位置]=High[最新完成K线位置]; 顶位置=最新完成K线位置; 分型上沿=High[最新完成K线位置]; If 分型右侧元素=分型右侧元素延伸 Then 分型区间上沿[底位置]=Max(分型区间上沿[底位置],新高[最新完成K线位置]); End Else 新高[最新完成K线位置]=新高[最新完成K线位置+1]; If K线方向[最新完成K线位置]=上涨 Then 新低[最新完成K线位置]=Max(Low[最新完成K线位置],新低[最新完成K线位置+1]); Else Begin If Low[最新完成K线位置]<=新低[最新完成K线位置+1] Then Begin 新低[最新完成K线位置]=Low[最新完成K线位置]; 底位置=最新完成K线位置; 分型下沿=Low[最新完成K线位置]; If 分型右侧元素=分型右侧元素延伸 Then 分型区间下沿[顶位置]=Min(分型区间下沿[顶位置],新低[最新完成K线位置]); End Else 新低[最新完成K线位置]=新低[最新完成K线位置+1]; End; End; End Else Begin 新高[最新完成K线位置]=High[最新完成K线位置]; 新低[最新完成K线位置]=Low[最新完成K线位置]; If K线方向[最新完成K线位置]=下跌 And (K线方向[最新完成K线位置+1]=上涨 Or K线方向[最新完成K线位置+1]=盘整) Then Begin 分型区间上沿[顶位置]=分型上沿; 分型区间下沿[顶位置]=Min(分型下沿,新低[最新完成K线位置]); 分型下沿=新低[最新完成K线位置]; K线类型[顶位置]=笔中的顶; 分型右侧元素=True; End Else Begin If K线方向[最新完成K线位置]=上涨 And (K线方向[最新完成K线位置+1]=下跌 Or K线方向[最新完成K线位置+1]=盘整) Then Begin 分型区间下沿[底位置]=分型下沿; 分型区间上沿[底位置]=Max(分型上沿,新高[最新完成K线位置]); 分型上沿=新高[最新完成K线位置]; K线类型[底位置]=笔中的底; 分型右侧元素=True; End Else Begin 分型右侧元素=False; If K线方向[最新完成K线位置]=下跌 Then Begin 分型上沿=新高[最新完成K线位置+1]; 分型下沿=新低[最新完成K线位置]; End Else Begin 分型上沿=新高[最新完成K线位置]; 分型下沿=新低[最新完成K线位置+1]; End; End; End; 笔计数++; End; //3.笔处理 笔状态[最新完成K线位置]=笔状态[最新完成K线位置+1]; //3.1 盘整K线 If K线方向[最新完成K线位置+1]=盘整 Then Begin //3.1.1 下跌K线 If 新K形成 And K线方向[最新完成K线位置]=下跌 Then Begin K线类型[顶位置]=顶; 笔状态[最新完成K线位置]=向上笔分型构造; 笔计数=1; 笔尖[顶位置]=High[顶位置]; 笔[顶位置]=High[顶位置]; 今笔高点位置=顶位置; 今笔低点位置=最新完成K线位置; 前笔高点位置=顶位置; 前笔低点位置=底位置; End Else Begin //3.1.2 上涨K线 If 新K形成 And K线方向[最新完成K线位置]=上涨 Then Begin K线类型[底位置]=底; 笔状态[最新完成K线位置]=向下笔分型构造; 笔计数=1; 笔尖[底位置]=Low[底位置]; 笔[底位置]=Low[底位置]; 今笔低点位置=底位置; 今笔高点位置=最新完成K线位置; 前笔高点位置=顶位置; 前笔低点位置=底位置; End; End; End; //3.2 下跌K线 If K线方向[最新完成K线位置]=下跌 Then Begin Switch (笔状态[最新完成K线位置+1]) Begin //3.2.1 向下笔延伸 Case 向上笔分型构造: If 新低[最新完成K线位置]<分型区间下沿[前笔高点位置] Then Begin 笔状态[最新完成K线位置]=向下笔延伸; 今笔低点位置=最新完成K线位置; End Else If Low[最新完成K线位置]=分型区间下沿[前笔高点位置] Then 今笔低点位置=最新完成K线位置; //3.2.2 向下笔继续延伸 Case 向下笔延伸: If Low[最新完成K线位置]<=新低[今笔低点位置] Then 今笔低点位置=最新完成K线位置; //3.2.3 向下笔分型构造或向上笔延伸 Default: Begin //3.2.3.1 向上笔完成 成笔条件=K线方向[最新完成K线位置+1]=上涨 And 笔状态[最新完成K线位置+1]=向上笔延伸 And 新高[最新完成K线位置+1]=新高[今笔高点位置] And ((笔计数>新笔 And 新笔标准=True And (今笔低点位置-今笔高点位置)>新笔周期) Or (笔计数>旧笔)); If 成笔条件 Or (缺口处理 And 缺口) Then Begin K线类型[今笔高点位置]=顶; 笔状态[最新完成K线位置]=向上笔分型构造; 笔计数=1; 笔尖[今笔高点位置]=新高[今笔高点位置]; 笔[今笔高点位置]=新高[今笔高点位置]; 前笔高点位置=今笔高点位置; 今笔低点位置=最新完成K线位置; // TL_ID[前笔低点位置]=Tl_New(Date[前笔低点位置],Time[前笔低点位置],新低[前笔低点位置], // Date[前笔高点位置],Time[前笔高点位置],笔尖[前笔高点位置]); // Tl_SetColor(TL_ID[前笔低点位置],ColorYellow); // Tl_SetStyle(TL_ID[前笔低点位置],3); If 缺口处理 Then Begin If 分型区间下沿[今笔高点位置]=笔尖[前笔低点位置] then 分型区间下沿[今笔高点位置]=新低[今笔低点位置]; If High[今笔低点位置]<新低[前笔低点位置] Then 缺口=True; Else 缺口=False; End; 成笔条件=False; End Else Begin //3.2.3.2 向上笔完成前 //突破向下笔的低点 找到符合K线=False; If 新低[最新完成K线位置]<新低[前笔低点位置] Then Begin 笔状态[最新完成K线位置]=向下笔延伸; //向上笔区间大于向下笔区间的特殊情况 If 新高[今笔高点位置]>新高[前笔高点位置] And 限制高低=True Then Begin K线类型[最新完成K线位置]=下破; K线类型[前笔低点位置]=废弃的底; K线类型[前笔高点位置]=废弃的顶; 笔尖[前笔低点位置]=Invalid; 笔尖[前笔高点位置]=Invalid; 笔[前笔低点位置]=Invalid; 笔[前笔高点位置]=Invalid; // If TL_ID[前笔高点位置]<>-1 Then // Tl_Delete(TL_ID[前笔高点位置]); //查找合适的笔尖 i=前笔高点位置+1; While i<DataCount Do Begin //查找符合的顶或底 If K线类型[i]=顶 Then Begin If 笔尖[i]>=新高[今笔高点位置] Then Begin 找到符合K线=True; Break; End Else Begin K线类型[i]=废弃的顶; 笔尖[i]=Invalid; 笔[i]=Invalid; // Tl_Delete(TL_ID[i]); End; End Else Begin If K线类型[i]=底 Then Begin 前笔低点位置=i; If 笔尖[i]<=新低[今笔低点位置] Then Begin 找到符合K线=True; Break; End Else Begin K线类型[i]=废弃的底; 笔尖[i]=Invalid; 笔[i]=Invalid; // Tl_Delete(TL_ID[i]); End; End; End; i++; End; //找到向下笔或找不到符合的笔 If (找到符合K线=True And K线类型[i]=底) Or 找到符合K线=False Then Begin 前笔高点位置=今笔高点位置; K线类型[今笔高点位置]=顶; 笔尖[今笔高点位置]=新高[今笔高点位置]; 笔[今笔高点位置]=新高[今笔高点位置]; 笔计数=0; // If 找到符合K线=True Then // Tl_SetEnd(TL_ID[i],Date[前笔高点位置],Time[前笔高点位置],笔尖[前笔高点位置]); i=今笔高点位置-1; While i>=最新完成K线位置 Do Begin If (High[i]>新高[i+1] And Low[i]>新低[i+1]) Or (High[i]<新高[i+1] And Low[i]<新低[i+1]) Then 笔计数++; i--; End; If 笔计数<2 Or (笔计数>1 And 新低[最新完成K线位置]>=分型区间下沿[今笔高点位置]) Then 笔状态[最新完成K线位置]=向上笔分型构造; End Else If 找到符合K线=True And K线类型[i]=顶 Then Begin 今笔高点位置=i; 前笔高点位置=i; 笔计数=旧笔; // Tl_Delete(TL_ID[前笔高点位置]); End; End Else Begin i=前笔高点位置; 找到符合K线=True; K线类型[前笔低点位置]=废弃的底; 笔尖[前笔低点位置]=Invalid; 笔[前笔低点位置]=Invalid; // If TL_ID[前笔高点位置]<>-1 Then // Tl_Delete(TL_ID[前笔高点位置]); 今笔高点位置=前笔高点位置; 笔计数=旧笔; End; //查找前笔低点 If 找到符合K线=True And K线类型[i]=顶 Then Begin i++; While i<DataCount Do Begin If 找到符合K线=True And K线类型[i]=底 Then Begin 前笔低点位置=i; Break; End; i++; End; End; 今笔低点位置=最新完成K线位置; End; End; End End; End; //3.3 上涨K线 If K线方向[最新完成K线位置]=上涨 Then Begin Switch(笔状态[最新完成K线位置+1]) Begin Case 向下笔分型构造: If 新高[最新完成K线位置]>分型区间上沿[前笔低点位置] Then Begin 笔状态[最新完成K线位置]=向上笔延伸; 今笔高点位置=最新完成K线位置; End Else If High[最新完成K线位置]=分型区间上沿[前笔低点位置] Then 今笔高点位置=最新完成K线位置; Case 向上笔延伸: If High[最新完成K线位置]>=新高[今笔高点位置] Then 今笔高点位置=最新完成K线位置; Default: Begin //向下笔完成 成笔条件=K线方向[最新完成K线位置+1]=下跌 And 笔状态[最新完成K线位置+1]=向下笔延伸 And 新低[最新完成K线位置+1]=新低[今笔低点位置] And ((笔计数>新笔 And 新笔标准=True And (今笔高点位置-今笔低点位置)>新笔周期) Or (笔计数>旧笔)); If 成笔条件 Or (缺口处理 And 缺口) Then Begin K线类型[今笔低点位置]=底; 笔状态[最新完成K线位置]=向下笔分型构造; 笔计数=1; 笔尖[今笔低点位置]=新低[今笔低点位置]; 笔[今笔低点位置]=新低[今笔低点位置]; 前笔低点位置=今笔低点位置; 今笔高点位置=最新完成K线位置; // TL_ID[前笔高点位置]=Tl_New(Date[前笔高点位置],Time[前笔高点位置],新高[前笔高点位置], // Date[前笔低点位置],Time[前笔低点位置],笔尖[前笔低点位置]); // Tl_SetColor(TL_ID[前笔高点位置],COLORYELLOW); // Tl_SetStyle(TL_ID[前笔高点位置],3); If 缺口处理 Then Begin If 分型区间上沿[今笔低点位置]=笔尖[前笔高点位置] Then 分型区间上沿[今笔低点位置]=新高[今笔高点位置]; If Low[今笔高点位置]>新高[前笔高点位置] Then 缺口=True; Else 缺口=False; End; 成笔条件=False; End Else Begin 找到符合K线=False; If 新高[最新完成K线位置]>新高[前笔高点位置] Then Begin 笔状态[最新完成K线位置]=向上笔延伸; //向下笔区间大于向上笔区间的特殊情况 If 新低[今笔低点位置]<新低[前笔低点位置] And 限制高低=True Then Begin K线类型[最新完成K线位置]=上破; K线类型[前笔低点位置]=废弃的底; K线类型[前笔高点位置]=废弃的顶; 笔尖[前笔低点位置]=Invalid; 笔尖[前笔高点位置]=Invalid; 笔[前笔低点位置]=Invalid; 笔[前笔高点位置]=Invalid; // If TL_ID[前笔低点位置]<>-1 Then // Tl_Delete(TL_ID[前笔低点位置]); //查找合适的笔尖 i=前笔低点位置+1; While i<DataCount Do Begin //查找符合的顶或底 If K线类型[i]=顶 Then Begin 前笔高点位置=i; If 笔尖[i]>=新高[今笔高点位置] Then Begin 找到符合K线=True; Break; End Else Begin K线类型[i]=废弃的顶; 笔尖[i]=Invalid; 笔[i]=Invalid; // Tl_Delete(TL_ID[i]); End; End Else Begin If K线类型[i]=底 Then Begin If 笔尖[i]<=新低[今笔低点位置] Then Begin 找到符合K线=True; Break; End Else Begin K线类型[i]=废弃的底; 笔尖[i]=Invalid; 笔[i]=Invalid; // Tl_Delete(TL_ID[i]); End; End; End; i++; End; //找到向上笔或找不到符合的笔 If (找到符合K线=True And K线类型[i]=顶) Or 找到符合K线=False Then Begin 前笔低点位置=今笔低点位置; K线类型[今笔低点位置]=底; 笔尖[今笔低点位置]=新低[今笔低点位置]; 笔[今笔低点位置]=新低[今笔低点位置]; 笔计数=0; // If 找到符合K线=True Then // Tl_SetEnd(TL_ID[i],Date[前笔低点位置],Time[前笔低点位置],笔尖[前笔低点位置]); i=今笔低点位置-1; While i>=最新完成K线位置 Do Begin If (High[i]>新高[i+1] And Low[i]>新低[i+1]) Or (High[i]<新高[i+1] And Low[i]<新低[i+1]) Then 笔计数++; i--; End; If 笔计数<2 Or (笔计数>1 And 新高[最新完成K线位置]<=分型区间上沿[今笔低点位置]) Then 笔状态[最新完成K线位置]=向下笔分型构造; End Else If 找到符合K线=True And K线类型[i]=底 Then Begin 今笔低点位置=i; 前笔低点位置=i; 笔计数=旧笔; // Tl_Delete(TL_ID[前笔低点位置]); End; End Else Begin i=前笔低点位置; 找到符合K线=True; K线类型[前笔高点位置]=废弃的顶; 笔尖[前笔高点位置]=Invalid; 笔[前笔高点位置]=Invalid; // If TL_ID[前笔低点位置]<>-1 Then // Tl_Delete(TL_ID[前笔低点位置]); 今笔低点位置=前笔低点位置; 笔计数=旧笔; End; //查找前笔高点 If 找到符合K线=True And K线类型[i]=底 Then Begin i++; While i<DataCount Do Begin If 找到符合K线=True And K线类型[i]=顶 Then Begin 前笔高点位置=i; Break; End; i++; End; End; 今笔高点位置=最新完成K线位置; End; End; End End; End; |
|
-- 作者:jinzhe -- 发布时间:2016/5/4 13:19:33 -- BARPOS=最新完成K线位置+1 看了开头,这个是什么意思? |
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 14:29:58 --
|
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 14:30:02 --
|
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 14:30:02 --
|
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 14:30:09 --
|
|
-- 作者:jinzhe -- 发布时间:2016/5/5 14:31:47 -- 那这一段的逻辑是什么? 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;
|
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 20:17:23 -- 第一根K线处理 |
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 20:18:59 -- ARPOS=最新完成K线位置+1,当下K线的后一K线 |
|
-- 作者:系统使用者 -- 发布时间:2016/5/5 20:22:33 -- //自定义 #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 输入: 新笔标准(1,0,1,1), 缺口处理(1,0,1,1), 限制高低(1,0,1,1); 变量: 新高(0),新低(0),笔状态(0),K线方向(0), //连续 K线类型(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), //成笔条件 NumericSimple 缺口(0), //分型有缺口 NumericSimple 笔计数(0); //计算一笔的非包含K线数 //******************************主程序****************************** //1.第一根K线处理 笔:笔尖,短虚线,ColorYellow; 如果 数据位置=最新完成K线位置+1 那么 开始 前笔高点位置=最新完成K线位置; 前笔低点位置=最新完成K线位置; 今笔高点位置=最新完成K线位置; 今笔低点位置=最新完成K线位置; 顶位置=最新完成K线位置; 底位置=最新完成K线位置; 分型上沿=最高价[最新完成K线位置]; 分型下沿=最低价[最新完成K线位置]; 新高[最新完成K线位置]=分型上沿; 新低[最新完成K线位置]=分型下沿; K线方向[最新完成K线位置]=盘整; 笔状态[最新完成K线位置]=盘整; 输出日志(\'第一根K线处理\'); 退出; 结束; 前笔高点位置++; 前笔低点位置++; 今笔高点位置++; 今笔低点位置++; 顶位置++; 底位置++; //2.K线处理 新K形成=真; //2.1 K线方向 //2.1.1 上升K线 如果 最高价[最新完成K线位置]>新高[最新完成K线位置+1] 而且 最低价[最新完成K线位置]>新低[最新完成K线位置+1] 那么 开始 K线方向[最新完成K线位置]=上涨; 顶位置=最新完成K线位置; 结束 否则 开始 //2.1.2 下降K线 如果 最高价[最新完成K线位置]<新高[最新完成K线位置+1] 而且 最低价[最新完成K线位置]<新低[最新完成K线位置+1] 那么 开始 K线方向[最新完成K线位置]=下跌; 底位置=最新完成K线位置; 结束 否则 开始 //2.1.3 包含K线,保持原方向 K线方向[最新完成K线位置]=K线方向[最新完成K线位置+1]; 新K形成=假; 结束; 结束; //2.2 非包含处理序列K线 如果 新K形成=假 那么 开始 如果 K线方向[最新完成K线位置]=下跌 那么 开始 新高[最新完成K线位置]=最小值(最高价[最新完成K线位置],新高[最新完成K线位置+1]); 如果 最低价[最新完成K线位置]<=新低[最新完成K线位置+1] 那么 开始 新低[最新完成K线位置]=最低价[最新完成K线位置]; 底位置=最新完成K线位置; 分型下沿=最低价[最新完成K线位置]; 如果 分型右侧元素=分型右侧元素延伸 那么 分型区间下沿[顶位置]=最小值(分型区间下沿[顶位置],新低[最新完成K线位置]); 结束 否则 新低[最新完成K线位置]=新低[最新完成K线位置+1]; 结束 否则 开始 如果 最高价[最新完成K线位置]>=新高[最新完成K线位置+1] 那么 开始 新高[最新完成K线位置]=最高价[最新完成K线位置]; 顶位置=最新完成K线位置; 分型上沿=最高价[最新完成K线位置]; 如果 分型右侧元素=分型右侧元素延伸 那么 分型区间上沿[底位置]=最大值(分型区间上沿[底位置],新高[最新完成K线位置]); 结束 否则 新高[最新完成K线位置]=新高[最新完成K线位置+1]; 如果 K线方向[最新完成K线位置]=上涨 那么 新低[最新完成K线位置]=最大值(最低价[最新完成K线位置],新低[最新完成K线位置+1]); 否则 开始 如果 最低价[最新完成K线位置]<=新低[最新完成K线位置+1] 那么 开始 新低[最新完成K线位置]=最低价[最新完成K线位置]; 底位置=最新完成K线位置; 分型下沿=最低价[最新完成K线位置]; 如果 分型右侧元素=分型右侧元素延伸 那么 分型区间下沿[顶位置]=最小值(分型区间下沿[顶位置],新低[最新完成K线位置]); 结束 否则 新低[最新完成K线位置]=新低[最新完成K线位置+1]; 结束; 结束; 结束 否则 开始 新高[最新完成K线位置]=最高价[最新完成K线位置]; 新低[最新完成K线位置]=最低价[最新完成K线位置]; 如果 K线方向[最新完成K线位置]=下跌 而且 (K线方向[最新完成K线位置+1]=上涨 或者 K线方向[最新完成K线位置+1]=盘整) 那么 开始 分型区间上沿[顶位置]=分型上沿; 分型区间下沿[顶位置]=最小值(分型下沿,新低[最新完成K线位置]); 分型下沿=新低[最新完成K线位置]; K线类型[顶位置]=笔中的顶; 分型右侧元素=真; 结束 否则 开始 如果 K线方向[最新完成K线位置]=上涨 而且 (K线方向[最新完成K线位置+1]=下跌 或者 K线方向[最新完成K线位置+1]=盘整) 那么 开始 分型区间下沿[底位置]=分型下沿; 分型区间上沿[底位置]=最大值(分型上沿,新高[最新完成K线位置]); 分型上沿=新高[最新完成K线位置]; K线类型[底位置]=笔中的底; 分型右侧元素=真; 结束 否则 开始 分型右侧元素=假; 如果 K线方向[最新完成K线位置]=下跌 那么 开始 分型上沿=新高[最新完成K线位置+1]; 分型下沿=新低[最新完成K线位置]; 结束 否则 开始 分型上沿=新高[最新完成K线位置]; 分型下沿=新低[最新完成K线位置+1]; 结束; 结束; 结束; 笔计数++; 结束; |