//该模型模型不错,主要是一些高手提供出来给大家学习
// 文华财经免费白糖
ba:= barpos; // 当前k线位置(从1开始)
vol1:= ifelse(llv(vol,0)=0, 1, intpart(vol*100)); // 从头到尾遍历。只要出现 成交量=0时,返回1。否则,返回vol*100取整。
hc:=llv(ifelse(h-c=0, 1000, h-c), 0); // 从头到尾遍历,寻找最小的 最高价与 收盘价的距离。默认当最高价= 最低价时,返回1000。
cl:=llv(ifelse(c-l=0, 1000, abs(c-l)), 0); // 从头到尾遍历,寻找最小的收盘价与最低价距离。
co:=llv(ifelse(c-o=0, 1000, abs(c-o)), 0); // 从头到尾遍历,寻找最小的收盘价与 开盘价距离。
zxbd:=min(hc, min(cl, co)); // 找当前周期之前的最小的hc, cl, co。
dfx:= ref(l, 2)=llv(l,15) && ref(l,1)>ref(l,2) && l>ref(l,1) && ref(l,2)<=ref(l,3); // 是否上涨起点。原:“l>ref(l, 2)” 【参数】
gfx:= ref(h, 2)=hhv(h,9) && ref(h,1)<ref(h,2) && h<ref(h,1) && ref(h,2)>=ref(h,3); // 是否下跌起点。 原:“h<ref(h, 2)” 【参数】
dfxi:= valuewhen(dfx, ba); // 取上涨起点的k线位置。若是上涨起点,则返回k线位置。反之返回前一个上涨起点的k线位置。
gfxi:= valuewhen(gfx, ba); // 跟上面类似,取下跌起点k线位置。
ddp1:= valuewhen(dfx, ref(l, 2)); // 取上涨起点的最低值。
gdp1:= valuewhen(gfx, ref(h, 2)); // 取下跌起点的最高值。
ddp:= valuewhen(dfx && ddp1<>ref(ddp1, 1), ddp1); // 取当前的上涨起点最低值。实际等于ddp1。
gdp:= valuewhen(gfx && gdp1<>ref(gdp1, 1), gdp1); // 取当前的下跌起点最高值。实际等于gdp1。
dfx1i:= valuewhen(dfx, ref(dfxi, 1)); // 取上涨起点的前一个上涨起点的k线位置。
dfx1p:= valuewhen(dfx, ref(ddp, ba-dfx1i)); // 取上涨起点的前一个上涨起点的k线位置的最低值。原"dfx1p:= valuewhen(dfx, ref(ddp, ba-dfx1i+1));"。
gfx1i:= valuewhen(gfx, ref(gfxi, 1)); // 取下跌起点的前一个下跌起点的k线位置。
gfx1p:= valuewhen(gfx, ref(gdp,ba-gfx1i)); // 取下跌起点的前一下跌起点的k线位置的最高值。原"gfx1p:= valuewhen(gfx, ref(gdp,ba-gfx1i+1));"。
dfxp:= valuewhen(dfx && ddp<>ref(ddp,1), min(ddp, min(dfx1p, ref(ddp, 1)))); // 取当前上涨起点最低值、前一个上涨起点值、上一个周期最低值中的最低值。
gfxp:= valuewhen(gfx && gdp<>ref(gdp,1), max(gdp, max(gfx1p, ref(gdp, 1)))); // 取当前下跌起点最高值、前一个下跌起点值、上一个周期最高值中的最高值。
// ---------------------------------------抛物转向------------------------------------------
sa:= sar(4, 0.02, 0.2); // 抛物转向值 【参数】
dzz:= sa>0 && ref(sa, 1)<=0; // 抛物转向值是否上涨启动。原"sa>0 && not(ref(sa,1)>0) || ba=0"。
gzz:= sa<0 && ref(sa, 1)>=0; // 抛物转向值是否下跌启动。原"sa<0 && not(ref(sa,1)<0) || ba=0"。
dzzi:= valuewhen(dzz, ba); // 返回抛物转向值上涨的k线位置。
gzzi:= valuewhen(gzz, ba); // 返回抛物转向值下跌的k线位置。
dzz0i:= ifelse(
not(
valuewhen(
dfx && ref(sa, 2)<0 && ref(l, 2)=llv(l, ba-gzzi), // 原"ref(l, 2)=llv(l, ba-gzzi+1)"
ba-2)>=0
),
0,
valuewhen(
(dfx && ref(dzz, 2)=1)
|| (dfx && ref(sa, 2)<0 && ref(l, 2)=llv(l, ba-gzzi)), // 原"ref(l, 2)=llv(l, ba-gzzi+1)"
ba-2)
); // 确认dfxi-2位置上是否是最低点,找dfx的最低点。是:返回dfxi-2。否:返回上一个dzz0i。
gzz0i:= ifelse(
not(
valuewhen(
gfx && ref(sa, 2)>0 && ref(h, 2)=hhv(h, ba-dzzi+1), // 原"ref(h, 2)=hhv(h, ba-dzzi+1)"
ba-2)>=0),
0,
valuewhen(
(gfx && ref(gzz, 2)=1)
|| (gfx && ref(sa, 2)>0 && ref(h, 2)=hhv(h, ba-dzzi+1)), // 原"ref(h, 2)=hhv(h, ba-dzzi+1)"
ba-2)
); // 确认gfxi-2位置上是否是最高点,找gfx的最高点。是:返回gfxi-2。否:返回上一个gzz0i。
dd0i:= valuewhen(dzz || dzz0i=0, dzz0i); // 返回抛物转向上涨启动最低点。落后于dzz0i。
gd0i:= valuewhen(gzz || gzz0i=0, gzz0i); // 返回抛物转向下跌启动最高点。落后于gzz0i。
dzz0p:= valuewhen(dzz && dzzi-gzzi>3, llv(l, ba-gzz0i)); // 抛物转向上涨启动对应的最低点。原"llv(l, ba-gzz0i+1)"。 【参数】
gzz0p:= valuewhen(gzz && gzzi-dzzi>3, hhv(h, ba-dzz0i)); // 抛物转向下跌启动对应的最高点。原"hhv(h, ba-dzz0i+1)"。 【参数】
dd0p:= valuewhen(dzz, dzz0p); // 等于dzz0p。实际与dd0i并不是一一对应。
gd0p:= valuewhen(gzz, gzz0p); // 等于gzz0p。实际与gd0i并不是一一对应。
dd0rp:= valuewhen(dzz, ref(dd0p,1)); // dd0p前一个周期值。
gd0rp:= valuewhen(gzz, ref(gd0p,1)); // gd0p前一个周期值。
dzp:= valuewhen(dzz, min(dd0p, dd0rp)); // dd0p与dd0rp最小值。一路下来,抛物转向上涨启动的最低点。
gzp:= valuewhen(gzz, max(gd0p, gd0rp)); // gd0p与gd0rp最大值。一路下来,抛物转向下跌启动的最高点。
qsi:= ifelse(dzz0i=0, 0, valuewhen(dzz, ref(dzz0i, ba-gzzi))); // 上涨启动时,返回前面一个dzz0i。原"ref(dzz0i, ba-gzzi+1)"。
gqsi:= ifelse(gzz0i=0, 0, valuewhen(gzz, ref(gzz0i, ba-dzzi))); // 下跌启动时,返回前面一个gzz0i。原"ref(gzz0i, ba-dzzi+1)"。
szr:= ifelse(sa>0, 1, 0); // 是否在上涨。是:1;否:0。
xdr:= ifelse(sa<0, 1, 0); // 是否在下跌。是:1;否:0。
xdts2:= valuewhen(dzz && sum(xdr, dzzi-gzzi+1) > 3, sum(xdr, dzzi-gzzi+1)); // 抛物转向上涨启动 && 前面下跌超过3个单位时,统计前面下跌的周期。【参数】
szts2:= valuewhen(gzz && sum(szr, gzzi-dzzi+1) > 3, sum(szr, gzzi-dzzi+1)); // 抛物转向下跌启动 && 前面上涨超过3个单位时,统计前面上涨的周期。【参数】
xdts2i:= valuewhen(dzz && sum(xdr, dzzi-gzzi+1) > 3, ba); // 满足xdts2条件的上涨起点位置。
szts2i:= valuewhen(gzz && sum(szr, gzzi-dzzi+1) > 3, ba); // 满足szts2条件的下跌起点位置。
xdts1:= valuewhen(dzz && sum(szr, dzzi-ref(gzzi, ba-ref(dzzi, 2))+1) < 4, dzzi-ref(gzzi, ba-ref(dzzi, 2))); // 上涨启动 && 至前2个上涨周期的上涨小于4个单位时,返回这个时间跨度。【参数】
xdts1i:= valuewhen(dzz && sum(szr, dzzi-ref(gzzi, ba-ref(dzzi, 2))+1) < 4, ba); // xdts1的位置。 【参数】
xdts:= ifelse(dzz && sum(szr, dzzi-ref(gzzi, ba-ref(dzzi, 2))+1) < 4, xdts1, xdts2); // 上涨启动 && 至前2个上涨周期的上涨小于4个单位时,返回xsdts1。否则返回xdts2。 【参数】
szts1:= valuewhen(gzz && sum(xdr, gzzi-ref(dzzi, ba-ref(gzzi, 2))+1) < 4, gzzi-ref(dzzi, ba-ref(gzzi, 2))); // 下跌启动 && 至前2个下跌周期的下跌小于4个单位时,返回这个时间跨度。【参数】
szts1i:= valuewhen(gzz && sum(xdr, gzzi-ref(dzzi, ba-ref(gzzi, 2))+1) < 4, ba); // szts1的位置。 【参数】
szts:= ifelse(gzz && sum(xdr, gzzi-ref(dzzi, ba-ref(gzzi, 2))+1) < 4, szts1, szts2); // 下跌启动 && 至前2个上涨周期的上涨小于4个单位时,返回szts1。否则返回szts2。 【参数】
// dzz0i是在ba前2个单位,个人认为此判断条件不会成立(除了第一根k线外)。todo: 不理解。
dini:= ifelse(ba=dzz0i || ba-dzz0i=1, sum(l*vol1, ba-qsi+1) / sum(vol1, ba-qsi+1) , sum(l*vol1, ba-dzz0i+1) / sum(vol1, ba-dzz0i+1));
gini:= ifelse(ba=gzz0i || ba-gzz0i=1, sum(h*vol1, ba-gqsi+1) / sum(vol1, ba-gqsi+1), sum(h*vol1, ba-gzz0i+1) / sum(vol1, ba-gzz0i+1));
ddt0:= dfx && (ref(c, 2)<ref(dini, 2) || ref(c, 3)<ref(dini, 3));
ddt0i:= valuewhen(ddt0, dzz0i);
ddt01i:= valuewhen(ddt0, ref(ddt0i, 1));
dini0:= ifelse(ba=ddt0i || ba-ddt0i=1, sum(l*vol1, ba-ddt01i+1) / sum(vol1, ba-ddt01i+1), sum(l*vol1, ba-ddt0i+1) / sum(vol1, ba-ddt0i+1));
ddt00:= (dzz && szts<=xdts && dzzi-gzzi>3);
ddt00i:= ifelse(not(ddt00), 0, valuewhen(ddt00, dd0i));
dz00i:= valuewhen(dfx && (ref(c, 3)<ref(dini0, 3) || ref(c, 2)<ref(dini0, 2)), dzz0i);
dz0i:= max(ddt00i, dz00i);
dz0:= ifelse(ba=dz0i||ba-dz0i=1,(sum(l*vol1,ba-ref(dz0i,1)+1))/(sum(vol1,ba-ref(dz0i,1)+1)),(sum(l*vol1,ba-dz0i+1))/(sum (vol1,ba-dz0i+1)));
dz1i:= valuewhen(dfx&&(ref(c,3)<ref(dz0,3)||ref(c,2)<ref(dz0,2)),dzz0i);
dz1:= ifelse(ba=dz1i||ba-dz1i=1,(sum(l*vol1,ba-ref(dz1i,1)+1))/(sum(vol1,ba-ref(dz1i,1)+1)),(sum(l*vol1,ba-dz1i+1))/(sum (vol1,ba-dz1i+1)));
dz2i:= valuewhen(dfx&&(ref(c,3)<ref(dz1,3)||ref(c,2)<ref(dz1,2)),dzz0i);
dz2:= ifelse(ba=dz2i||ba-dz2i=1,(sum(l*vol1,ba-ref(dz2i,1)+1))/(sum(vol1,ba-ref(dz2i,1)+1)),(sum(l*vol1,ba-dz2i+1))/(sum (vol1,ba-dz2i+1)));
dz3i:= valuewhen(dfx&&(ref(c,3)<ref(dz2,3)||ref(c,2)<ref(dz2,2)),dzz0i);
dz3:= ifelse(ba=dz3i||ba-dz3i=1,(sum(l*vol1,ba-ref(dz3i,1)+1))/(sum(vol1,ba-ref(dz3i,1)+1)),(sum(l*vol1,ba-dz3i+1))/(sum (vol1,ba-dz3i+1)));
gdt0:= gfx&&(ref(c,2)>ref(gini,2)||ref(c,3)>ref(gini,3));
gdt0i:= valuewhen(gdt0,gzz0i);
gdt01i:= valuewhen(gdt0,ref(gdt0i,1));
gini0:= ifelse(ba=gdt0i||ba-gdt0i=1,sum(h*vol1,ba-gdt01i+1)/sum(vol1,ba-gdt01i+1),sum(h*vol1,ba-gdt0i+1)/sum(vol1,ba- gdt0i+1));
gdt00:= (gzz&&szts>=xdts&&gzzi-dzzi>3);
gdt00i:= ifelse(not(gdt00),0,valuewhen(gdt00,gd0i));
gz00i:= valuewhen(gfx&&(ref(c,3)>ref(gini0,3)||ref(c,2)>ref(gini0,2)),gzz0i);
gz0i:= max(gdt00i,gz00i);
gz0:= ifelse(ba=gz0i||ba-gz0i=1,(sum(h*vol1,ba-ref(gz0i,1)+1))/(sum(vol1,ba-ref(gz0i,1)+1)),(sum(h*vol1,ba-gz0i+1))/(sum (vol1,ba-gz0i+1)));
gz1i:= valuewhen(gfx&&(ref(c,3)>ref(gz0,3)||ref(c,2)>ref(gz0,2)),gzz0i);
gz1:= ifelse(ba=gz1i||ba-gz1i=1,(sum(h*vol1,ba-ref(gz1i,1)+1))/(sum(vol1,ba-ref(gz1i,1)+1)),(sum(h*vol1,ba-gz1i+1))/(sum (vol1,ba-gz1i+1)));
gz2i:= valuewhen(gfx&&(ref(c,3)>ref(gz1,3)||ref(c,2)>ref(gz1,2)),gzz0i);
gz2:= ifelse(ba=gz2i||ba-gz2i=1,(sum(h*vol1,ba-ref(gz2i,1)+1))/(sum(vol1,ba-ref(gz2i,1)+1)),(sum(h*vol1,ba-gz2i+1))/(sum (vol1,ba-gz2i+1)));
gz3i:= valuewhen(gfx&&(ref(c,3)>ref(gz2,3)||ref(c,2)>ref(gz2,2)),gzz0i);
gz3:= ifelse(ba=gz3i||ba-gz3i=1,(sum(h*vol1,ba-ref(gz3i,1)+1))/(sum(vol1,ba-ref(gz3i,1)+1)),(sum(h*vol1,ba-gz3i+1))/(sum (vol1,ba-gz3i+1)));
dd:= floor((dz3+zxbd)/zxbd)*zxbd-zxbd;
gd:= floor((gz3+zxbd)/zxbd)*zxbd;
gdw:= valuewhen(cross(c,gd),ba);
ddw:= valuewhen(cross(dd,c),ba);
dk:= ifelse(ddw>gdw,gd,dd);
dd1:= floor((dini+zxbd)/zxbd)*zxbd-zxbd;
gd1:= floor((gini+zxbd)/zxbd)*zxbd;
gdw11:= valuewhen(cross(c,gd1),ba);
ddw11:= valuewhen(cross(dd1,c),ba);
dkd:= ifelse(ddw11>gdw11,gd1,dd1);
dwd:= valuewhen(cross(c,dkd),ba);
gwd:= valuewhen(cross(dkd,c),ba);
gdw1:= valuewhen(cross(c,gfxp)||ba=0,ba);
ddw1:= valuewhen(cross(dfxp,c)||ba=0,ba);
dkp:= ifelse(ddw1>gdw1,gfxp,dfxp);
bzd:= max(dk,max(dkd,gfxp));
szd:= min(dk,min(dkd,dfxp));
dta:= cross(c,bzd);
kta:= cross(szd,c);
dtai:= valuewhen(dta||ba=0,ba);
ktai:= valuewhen(kta||ba=0,ba);
dtb:= c<dk&&c<dkd&&ref(cross(dkp,c),1)=1&&c>ref(dkp,2)&&dfx;
ktb:= c>dk&&c>dkd&&ref(cross(c,dkp),1)=1&&c<ref(dkp,2)&&gfx;
dtc:= c<dk&&c<dkd&&sum(l<dkp&&c>dkp,2)=2;
ktc:= c>dk&&c>dkd&&sum(h>dkp&&c<dkp,2)=2;
dtd:= c>dkd&&sum(c>dk,2)>=2&&sum(dkd=dk,ba-dwd+1)=ba-dwd&&dkd>dk&&ref(dkd=dk,1)=1;
ktd:= c<dkd&&sum(c<dk,2)>=2&&sum(dkd=dk,ba-gwd+1)=ba-gwd&&dkd<dk&&ref(dkd=dk,1)=1;
dte:= cross(c,dk)&&sum(dk=dkd,ba-ref(dwd,1)+1)=ba-ref(dwd,1)+1;
kte:= cross(dk,c)&&sum(dk=dkd,ba-ref(gwd,1)+1)=ba-ref(gwd,1)+1;
dtf:= cross(c,dk)&&sum(cross(c,gfxp),ba-1)=0;
ktf:= cross(dk,c)&&sum(cross(dfxp,c),ba-1)=0;
ktg:= c>dk&&cross(dkd,c)&&sum(c>dk&&c>dkp&&l<dkd&&c>dkd&&o=l,ba-dwd+1)>=1;
dtg0:= c>dk&&cross(c,dkd)&&sum(ktg,ba-gwd+1)>=1;
kth:= ref(sum(dk=dkd,2)=2&&cross(dk,c)&&isup,1)=1&&c<ref(c,1);
dtj:= c>dkp&&c<dk&&cross(c,dkd)&&sum(c<dk&&l<dkp&&c>dkp&&isup,ba-gwd+1)>=1;
ktj0:= c<dk&&cross(dkd,c)&&sum(dtj,ba-dwd+1)>=1;
dtk:= c<dk&&cross(c,dkd)&&sum(cross(dkp,c),ba-gwd+1)>=1&&isup&&l>ref(h,1)&&sum(l<dk&&c>dk,ba-gwd+1)>=1;
ktk0:= c<dk&&cross(dkd,c)&&sum(dtk,ba-dwd+1)>=1;
ktl:= cross(dkd,c)&&sum(cross(c,dkp)&&c>dkd&&dkd>dk,ba-dwd+1);
ktm:= cross(dkd,c)&&sum(sum(l<dkd&&c>dkd,2)=2,ba-dwd+1)>=1&&sum(cross(c,dkp)||cross(c,dk),ba-dwd+1)=0;
dtl:= cross(c,dkd)&&o-l<0.5&&sum(cross(dk,c)&&dk<>dkd,ba-gwd+1);
dt1:= dta || dtc || dtb || dtd || dte || dtf || dtg0 || dtj || dtk || dtl;
kt1:= kta || ktc || ktb || ktd || kte || ktf || ktg || kth || ktj0 || ktk0 || ktl || ktm;
dti:= valuewhen(dt1 || ba=0, ba);
kti:= valuewhen(kt1 || ba=0, ba);
ref(dti<=kti,1)=1&&dti>kti,bpk;
ref(dti>=kti,1)=1&&dti<kti,spk;
上一指标公式:CCI多空交易模型[文华财经]公式 多空源码指标源码
下一指标公式:ATR资金管理模型[文华财经]公式 资金管理源码指标源码
☉ 好公式网发布的指标公式主要用于软件技术面分析,仅供参考,勿用于实际操作,据此操作风险自负!
☉ 解压密码:www.goodgongshi.com 就是好公式网域名,希望大家看清楚,切勿输错。
☉ tnc和tni格式指标公式,仅可以用通达信软件引入使用,例如可以用通达信软件引入使用指标公式;
☉ tne格式指标公式,仅可以用通达信软件公式编辑器5.0版导入,高版本兼容低版本;
☉ fnc格式指标公式,可以用大智慧软件新一代高速行情分析系统股票软件使用,少部分可以用分析家软件引入使用;
☉ alg格式指标公式,仅仅可以用飞狐交易师软件引入使用;exp格式指标公式,仅可以用大智慧经典版软件引入使用;
☉ hxf格式指标公式,仅可以用同花顺软件引入使用。
☉ 如果您发现下载软件链接错误,请联系管理员报告错误。
☉ 好公式网欢迎各位网友帮忙宣传转发本站网址,有您的支持,我们会做得更好!
☉ 本文经典白糖程序化交易模型[文华财经]公式 白糖公式指标源码仅供学习研究。