-- 作者:lizhi
-- 发布时间:2018/4/9 18:25:46
-- [分享]茎叶图(直方图)代码分享
RUNMODE:0;//逐K线计算模式 INPUT:CYC(30,1,120,1);//统计期间 VARIABLE:ARR_COUNT[7]=0;//统计期间内的价格区间数组 //价格区间1内的期间价格经过次数 VAR1:=0; VAR2:=0;// VAR3:=0;// VAR4:=0;// VAR5:=0;// VAR6:=0;// VAR7:=0;//价格区间7内的期间价格经过次数
K线数:BARPOS,NODRAW,COLORYELLOW; H_TEMP:=REF(HHV(H,CYC),1),COLORWHITE;// L_TEMP:=REF(LLV(L,CYC),1),COLORWHITE;// //计算价格区间划分线 IF BARPOS>CYC THEN BEGIN MAXH:=H_TEMP; MINL:=L_TEMP; END
RANG:=(MAXH-MINL)/7;//区间间隔值 L6:=MINL+6*RANG,LINEDOT;//区间分割线六 L5:=MINL+5*RANG,LINEDOT;//区间分割线五 L4:=MINL+4*RANG,LINEDOT;//区间分割线四 L3:=MINL+3*RANG,LINEDOT;//区间分割线三 L2:=MINL+2*RANG,LINEDOT;//区间分割线二 L1:=MINL+RANG,LINEDOT;//区间分割线一
//次数:统计价格区间包含经过价格的次数 FOR I=1 TO CYC DO BEGIN IF H[BARPOS-I]<L1 OR L[BARPOS-I]<L1 THEN VAR1:=VAR1+1;//区间一 IF L[BARPOS-I]>=L1 AND L[BARPOS-I]<L2 THEN VAR2:=VAR2+1;//区间二 IF L[BARPOS-I]>=L2 AND L[BARPOS-I]<L3 THEN VAR3:=VAR3+1;//区间三 IF L[BARPOS-I]>=L3 AND L[BARPOS-I]<L4 THEN VAR4:=VAR4+1;//区间四 IF L[BARPOS-I]>=L4 AND L[BARPOS-I]<L5 THEN VAR5:=VAR5+1;//区间五 IF L[BARPOS-I]>=L5 AND L[BARPOS-I]<L6 THEN VAR6:=VAR6+1;//区间六 IF L[BARPOS-I]>=L6 OR H[BARPOS-I]>=L6 THEN VAR7:=VAR7+1;//区间七 END //把次数写入数组 ARR_COUNT[1]:=VAR1; ARR_COUNT[2]:=VAR2; ARR_COUNT[3]:=VAR3; ARR_COUNT[4]:=VAR4; ARR_COUNT[5]:=VAR5; ARR_COUNT[6]:=VAR6; ARR_COUNT[7]:=VAR7; //显示次数到图表进行检查验证 A1:ARR_COUNT[1],COLORRED,NODRAW; A2:ARR_COUNT[2],COLORYELLOW,NODRAW; A3:ARR_COUNT[3],COLORRED,NODRAW; A4:ARR_COUNT[4],COLORYELLOW,NODRAW; A5:ARR_COUNT[5],COLORRED,NODRAW; A6:ARR_COUNT[6],COLORYELLOW,NODRAW; A7:ARR_COUNT[7],COLORRED,NODRAW;
统计大 ARGE(ARR_COUNT,7,1),COLORYELLOW,NODRAW; 统计小:SMALL(ARR_COUNT,7,1),COLORRED,NODRAW; //=================求出最大值及其索引号、轴心线==================== TEMP_MAX:=0; FOR J=1 TO 7 DO BEGIN IF ARR_COUNT[J]>TEMP_MAX THEN BEGIN TEMP_MAX:=ARR_COUNT[J];//求出次数中的最大值 SY_MAX:J,COLORYELLOW;//求出最大值的索引号 END END //索引号对应的轴线值 IF SY_MAX=7 THEN PRICE_MAX:=(MAXH+L6)/2;// IF SY_MAX=6 THEN PRICE_MAX:=(L5+L6)/2;// IF SY_MAX=5 THEN PRICE_MAX:=(L4+L5)/2;// IF SY_MAX=4 THEN PRICE_MAX:=(L3+L4)/2;// IF SY_MAX=3 THEN PRICE_MAX:=(L2+L3)/2;// IF SY_MAX=2 THEN PRICE_MAX:=(L1+L2)/2;// IF SY_MAX=1 THEN PRICE_MAX:=(L1+MINL)/2;//
IF BARPOS>CYC THEN 轴心线 RICE_MAX,COLORYELLOW;//轴心线值 //=================求出最小值及其索引号、趋势线==================== TEMP_MIN:=30; FOR K=1 TO 7 DO BEGIN IF ARR_COUNT[K]<=TEMP_MIN THEN BEGIN TEMP_MIN:=ARR_COUNT[K];// SY_MIN:K,COLORYELLOW;//求出最大值的索引号 END END
IF SY_MIN=7 THEN PRICE_MIN:=(MAXH+L6)/2;// IF SY_MIN=6 THEN PRICE_MIN:=(L5+L6)/2;// IF SY_MIN=5 THEN PRICE_MIN:=(L4+L5)/2;// IF SY_MIN=4 THEN PRICE_MIN:=(L3+L4)/2;// IF SY_MIN=3 THEN PRICE_MIN:=(L2+L3)/2;// IF SY_MIN=2 THEN PRICE_MIN:=(L1+L2)/2;// IF SY_MIN=1 THEN PRICE_MIN:=(L1+MINL)/2;//
//IF BARPOS>CYC THEN 趋势线 RICE_MIN,COLORRED;//趋势线 //===================计算标准差==================================== CC:C,LINETHICK0; NN:O,LINETHICK0; SS:=0; FOR X=1 TO CYC DO BEGIN NN[BARPOS-X]:=(CC[BARPOS-X]-轴心线[BARPOS])^2; END FOR Y=1 TO CYC DO BEGIN SS:=NN[BARPOS-Y]+SS; END BZC SS/(CYC-1))^0.5,COLORWHITE,LINETHICK0;
UPLINE:轴心线+2*BZC,COLORWHITE;//布林线上轨 DOWNLINE:轴心线-2*BZC,COLORRED;//布林线下轨
|