以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 求助关于通达信改金字塔主图模型 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=171830) |
-- 作者:ly0794012132 -- 发布时间:2019/8/28 10:54:45 -- 求助关于通达信改金字塔主图模型 DIF:=12; DEA:=26; MID:=9; VAR1:=CLOSE-LOW; VAR2:=HIGH-LOW; VAR3:=CLOSE-HIGH; VAR4:=IF(HIGH>LOW,(VAR1/VAR2+VAR3/VAR2)*VOL,0); HPTP:=SUM(VAR4,10)/10000, COLORSTICK; TKXL:=(DIF-DEA)*2; XVYO:=UPNDAY(TKXL,1); // 本句可以用TKXL>REF(TKXL,1);代替连涨这里改过了 G:=MA(C,5);D:=MA(C,10); HH:=REF(H,5)=HHV(H,11); LL:=REF(L,5)=LLV(L,11); STICKLINE(V/REF(V,1)>2,OPEN,CLOSE,1,0),COLOR00FFFF; FG01:=BACKSET(HH,6)>BACKSET(HH,5); FD01:=BACKSET(LL,6)>BACKSET(LL,5); FG02:=IF(BARSLAST(FG01)=BARSLAST(FD01) AND G>D,FG01, IF(BARSLAST(FD01)>BARSLAST(FG01),FG01,0)); FD02:=IF(BARSLAST(FG01)=BARSLAST(FD01) AND D>G,FD01, IF(BARSLAST(FG01)>BARSLAST(FD01),FD01,0)); FG0:=FG02 AND H=HHV(H,BARSLAST(FD02)); FD0:=FD02 AND L=LLV(L,BARSLAST(FG02)); GQ:=L>REF(H,1) AND DAY!=REF(DAY,1); DQ:=H<REF(L,1) AND DAY!=REF(DAY,1); FGH:=REF(H,BARSLAST(FG0)); FGL:=REF(L,BARSLAST(FG0)); FGH1:=REF(H,BARSLAST(FG0)+1); FGL1:=REF(L,BARSLAST(FG0)+1); FGH2:=REF(H,BARSLAST(FG0)+2); FGL2:=REF(L,BARSLAST(FG0)+2); FDH:=REF(H,BARSLAST(FD0)); FDL:=REF(L,BARSLAST(FD0)); FDH1:=REF(H,BARSLAST(FD0)+1); FDL1:=REF(L,BARSLAST(FD0)+1); FDH2:=REF(H,BARSLAST(FD0)+2); FDL2:=REF(L,BARSLAST(FD0)+2); FGZL:=IF(FGH1<FGL,FGL,IF(FGL<=FGL1,FGL2,FGL1)); FDZH:=IF(FDL1>FDH,FDH,IF(FDH>=FDH1,FDH2,FDH1)); FG1:=FGH>FDZH AND FG0; FD1:=FDL<FGZL AND FD0; FG:=FG1 AND FGH>FDH AND FGL>FDL AND FGL1>FDL; FD:=FD1 AND FDL<FGL AND FDH<FGH AND FDH1<FGH; BH0:=(H<=REF(H,1) AND L>=REF(L,1)) OR (H>=REF(H,1) AND L<=REF(L,1)); BHG:=COUNT(BH0,BARSLAST(FD0)); BHD:=COUNT(BH0,BARSLAST(FG0)); BGQ:=COUNT(GQ,BARSLAST(FD0)); BDQ:=COUNT(DQ,BARSLAST(FG0)); BK0:=IF(BHG>0,BHG+2,IF(BHD,BHD+2,3)); BK:=IF(BGQ,BK0-BGQ,IF(BDQ,BK0-BDQ,BK0)); G1X:=(FG AND BARSLAST(FD)>BK); D1X:=(FD AND BARSLAST(FG)>BK); G1:=(FG0 AND REF(H,BARSLAST(FG0))>=REF(H,BARSLAST(G1X)) AND BARSLAST(D1X)>BARSLAST(G1X)) OR (FG1 AND COUNT(GQ,BARSLAST(FD1))>0 AND REF(H,BARSLAST(FG1))>REF(H,BARSLAST(G1X))); D1:=(FD0 AND REF(L,BARSLAST(FD0))<=REF(L,BARSLAST(D1X)) AND BARSLAST(G1X)>BARSLAST(D1X)) OR (FD1 AND COUNT(DQ,BARSLAST(FG1))>0 AND REF(L,BARSLAST(FD1))<REF(H,BARSLAST(D1X))); G1H:=IF(BARSLAST(D1)>BARSLAST(G1),REF(H,BARSLAST(G1)),REF(H,BARSLAST(D1))); D1L:=IF(BARSLAST(G1)>BARSLAST(D1),REF(L,BARSLAST(D1)),REF(L,BARSLAST(G1))); G2:=G1 AND H=HHV(G1H,BARSLAST(D1)+1) AND H>REF(H,1) AND BARSLAST(D1)>BARSLAST(G1); D2:=D1 AND L=LLV(D1L,BARSLAST(G1)+1) AND L<REF(L,1) AND BARSLAST(G1)>BARSLAST(D1); G3:=G2 OR (FG0 AND REF(H,BARSLAST(FG0))>REF(H,BARSLAST(G2)) AND BARSLAST(D2)>BARSLAST(G2)); D3:=D2 OR (FD0 AND REF(L,BARSLAST(FD0))<REF(L,BARSLAST(D2)) AND BARSLAST(G2)>BARSLAST(D2)); GPB:=IF(G1X,H,DRAWNULL),CIRCLEDOT,COLORYELLOW; DPB:=IF(D1X,L,DRAWNULL),CIRCLEDOT,COLORYELLOW; NN:=G3;UU:=D3; 趋势向上:DRAWLINE(UU,L,NN,H,0),COLORYELLOW,DOTLINE; 趋势向下:DRAWLINE(NN,H,UU,L,0),COLORWHITE,DOTLINE; 找顶线:DRAWLINE(NN,H,REF(NN,1),REF(H,1),1),COLORGREEN; // 本句好像是没有输出值,改写到,更改 ‘’找顶线:=UU; 找底线:DRAWLINE(UU,L,REF(UU,1),REF(L,1),1),COLORRED; DRAWNUMBER(UU,L*0.998,L); DRAWNUMBER(NN,H*1.01,H); XG:CROSS(C,找顶线) AND 找顶线>0 AND HPTP AND XVYO,NODRAW; DRAWICON(XG,LOW,1); 其他地方不知道哪里出了问题,原本应当是下面这样,不过我改完之后有几个问题:第一,画线不是始终显示在主图图表上,只有在缩放到某一个大小时能显示出来,一旦K线缩放比例变了,线就消失了,第二个问题,显示出来的线,都是无限延长,并没有消失,也就是N周期前的线也会显示到今天,而不是随着新的线的出现而停止。
下图为正常显示(在通达信里)
改写后在金字塔中的样子(放大或者缩小时间可以在某一个比例看到线,一旦缩放,就消失了)
放大到某一比例后出现了线,但是,线的长度不会随着新的找顶或者找底线出现而中断,而是一直显示到最后一根K线。 实在是找不到哪里有问题了,希望论坛大佬能够帮忙看下!非常感谢! |
-- 作者:FireScript -- 发布时间:2019/8/28 11:31:44 -- 1.缩放的问题 是因为K线图无法把超出范围的地方所绘制的线输出出来了。意思就是满足绘图条件的K必须在K线视野范围内。 。 2. 延长的问题好像是因为没设置这个延伸的参数: 找顶线:DRAWLINE(NN,H,REF(NN,1),REF(H,1),1),COLORGREEN; // 本句好像是没有输出值,改写到,更改 ‘’找顶线:=UU; 找底线:DRAWLINE(UU,L,REF(UU,1),REF(L,1),1),COLORRED; 参数改成0应该就可以了。你绘制线条的地方不多。但是这2个没有改参数的
|
-- 作者:ly0794012132 -- 发布时间:2019/8/28 11:59:23 -- 回复:(FireScript) 1.缩放的问题 是因为K线图... 非常感谢回复~但是更该DRAWLINE函数之后,还是有问题,数字能显示出来了,画线也可以显示出来了,不过只能维持往后一个周期的。
线很短,而且到下一个K线就消失了,没有延长
|
-- 作者:FireScript -- 发布时间:2019/8/28 13:28:44 -- 按照这个画线的条件的确是只会维持一个周期。 开始条件是UU 结束条件是REF(UU,1) 那这样就会直接第二个周期就结束了。 通达信里面实现的效果是怎样的?就算延长的话,也肯定有个结束点的吧。我看了它的函数说明,好像也没办法指定延长的周期的。
|
-- 作者:ly0794012132 -- 发布时间:2019/8/28 14:58:59 -- 回复:(FireScript)按照这个画线的条件的确是只会维... 我改成延长的了,不过发现中间有些变量输出来的值和通达信不太一样。问题应该出在了中间某个代码上。 |
-- 作者:FireScript -- 发布时间:2019/8/28 16:33:39 -- 虽然代码语法上有很多通用的,但是毕竟是不同软件,底层的实现很难保证会有有一样的效果的。所以有些代码看上去一样,实际效果上很难规避差异,这个希望能理解。 具体代码输出值差异只能你那边先定位出来,我们这边没办法把整个代码逻辑都理一遍,等定位到具体代码时候我们这边看下能否进行一些修改以达到接近的效果。 |
-- 作者:ly0794012132 -- 发布时间:2019/8/28 16:56:58 -- 回复:(FireScript)虽然代码语法上有很多通用的,但... 版主你好,我刚才一点一点对了一下所有参数,BHG:=COUNT(BH0,BARSLAST(FD0));这句话往上的所有判断结果都是一样,参数从BHG开始就不一样了,下面是两个软件的截图。
金字塔的截图
通达信截图
从图上来开一点毛病都没有,但是BHG:=COUNT(BH0,BARSLAST(FD0)); 这句话调用了FD0参数,然后调用BH0参数,结果,金字塔的数据出现了异常 如下图
BHG:=COUNT(BH0,BARSLAST(FD0)); 问题出在了这句上面。 麻烦版主帮忙看一下。 |
-- 作者:FireScript -- 发布时间:2019/8/28 17:15:05 -- 不对啊。我这边对比了下2个软件这个值是一样的啊。 金字塔: 通达信: 是不是数据量差异导致的呢?你把数据量都扩大点试下呢。
|
-- 作者:FireScript -- 发布时间:2019/8/28 17:18:06 -- 前面几个K我也移动过去看了下,也是一样的。 |
-- 作者:ly0794012132 -- 发布时间:2019/8/28 17:21:22 -- 回复:(FireScript)虽然代码语法上有很多通用的,但... 统计满足条件的周期数.
这个是通达信的COUNT函数的解释~ |