-- 作者:cq2698
-- 发布时间:2017/11/9 8:34:57
-- [求助]找不到求帮忙
此主题相关图片如下:qq图片20171109082300.png
//逐根 #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(-1), //连续 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); //计算一笔的非包含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[顶位置]; 笔[顶位置]=笔尖[顶位置]; 今笔高点位置=顶位置; 今笔低点位置=最新完成K线位置; 前笔高点位置=顶位置; 前笔低点位置=底位置; End Else Begin //3.1.2 上涨K线 If 新K形成 And K线方向[最新完成K线位置]=上涨 Then Begin K线类型[底位置]=底; 笔状态[最新完成K线位置]=向下笔分型构造; 笔计数=1; 笔尖[底位置]=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 向上笔完成 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 //3.2.3.2 向上笔完成前 //突破向下笔的低点 找到符合K线=False; If 新低[最新完成K线位置]<新低[前笔低点位置] Then Begin 笔状态[最新完成K线位置]=向下笔延伸; //向上笔区间大于向下笔区间的特殊情况 If 新高[今笔高点位置]>新高[前笔高点位置] 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 向下笔分型构造: Begin If 新高[最新完成K线位置]>分型区间上沿[前笔低点位置] Then Begin 笔状态[最新完成K线位置]=向上笔延伸; 今笔高点位置=最新完成K线位置; End Else begin If High[最新完成K线位置]=分型区间上沿[前笔低点位置] Then 今笔高点位置=最新完成K线位置; end; End Case 向上笔延伸: If 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 新低[今笔低点位置]<新低[前笔低点位置] 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;
|