以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 求高低点,这是一个BUG吗?大神帮看看。 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=158246) |
-- 作者:jcyluck -- 发布时间:2017/9/25 22:37:35 -- 求高低点,这是一个BUG吗?大神帮看看。 用600698验证,日线,定位于2016-12-01,求前面三个金叉间的高点和死叉间的低点: 计算出的死叉低点分别为: SCL1:5.75 SCL2:4.98 SCL3:4.92 而SCL2是错误的,应为5.28,为什么计算的结果是4.98?同样的方法,SCL1和SCL3,及三个高点的计算都没有错误,让我不得不怀疑这是不是一个BUG. 求大神指点。 以下是公式代码: ------------------------------------------------------------------------------------------------- MA10:MA(C,10); MA30:=MA(C,30),NODRAW; JCH:=MA10>MA30 AND ALL(REF(MA30,1)>REF(MA10,1),3); SCH:=MA10<MA30 AND ALL(REF(MA10,1)>REF(MA30,1),3); DRAWICON(JCH,MA10,1); DRAWICON(SCH,MA10,2); SC1:=BARSLAST(SCH),NODRAW; JC1:=BARSLAST(JCH),NODRAW; {前第二次死叉位置} SC2:=IF(JC1>SC1,REF(BARSLAST(SCH),JC1)+JC1, REF(BARSLAST(SCH),SC1+1)+SC1+1),NODRAW; {前第二次金叉位置} JC2:=IF(JC1>SC1,REF(BARSLAST(JCH),JC1+1)+JC1+1, REF(BARSLAST(JCH),SC1)+SC1),NODRAW; {前第三次死叉位置} SC3:=IF(JC1>SC1,REF(BARSLAST(SCH),JC2)+JC2, REF(BARSLAST(SCH),SC2+1)+SC2+1),NODRAW; {前第三次金叉位置} JC3:=IF(JC1>SC1,REF(BARSLAST(JCH),JC2+1)+JC2+1, REF(BARSLAST(JCH),SC2)+SC2),NODRAW; {前第四次死叉位置} SC4:=IF(JC1>SC1,REF(BARSLAST(SCH),JC3)+JC3, REF(BARSLAST(SCH),SC3+1)+SC3+1),NODRAW; {前第四次金叉位置} JC4:=IF(JC1>SC1,REF(BARSLAST(JCH),JC3+1)+JC3+1, REF(BARSLAST(JCH),SC3)+SC3),NODRAW; {最近一个死叉产生的低点,考虑到死叉不跌的情况,所以加5个周期} CS_SCL1:=IF(JC1>SC1,SC2-JC1+5,SC1-JC1+5),NODRAW; SCL1:REF(LLV(L,CS_SCL1),JC1),NODRAW; {最近二个死叉产生的低点} CS_SCL2:=IF(JC1>SC1,SC3-JC2+5,SC2-JC2+5),NODRAW; SCL2:REF(LLV(L,CS_SCL2),JC2),NODRAW; {最近三个死叉产生的低点} CS_SCL3:=IF(JC1>SC1,SC4-JC3+5,SC3-JC3+5),NODRAW; SCL3:REF(LLV(L,CS_SCL3),JC3),NODRAW; {前一次金叉与死叉间的高点}; CS_JCH1:=IF(JC1>SC1,JC1-SC1+5,JC2-SC1+5),NODRAW; JCH1:REF(HHV(H,CS_JCH1),SC1),NODRAW; {前二次金叉与死叉间的高点}; CS_JCH2:=IF(JC1>SC1,JC2-SC2+5,JC3-SC2+5),NODRAW; JCH2:REF(HHV(H,CS_JCH2),SC2),NODRAW; {前三次金叉与死叉间的高点}; CS_JCH3:=IF(JC1>SC1,JC3-SC3+5,JC4-SC3+5),NODRAW; JCH3:REF(HHV(H,CS_JCH3),SC3),NODRAW; |
-- 作者:wenarm -- 发布时间:2017/9/26 11:01:40 -- SCL1:REF(LLV(L,CS_SCL1),JC1),NODRAW;
这种用法就是有问题,这个处理逻辑应该是先向前找jc1根k,然后再这根k上算LLV(L,CS_SCL1)的值.此时取得这根k上的CS_SCL1作为目前的因子项。 求得对是因为碰巧了。你可以在一个位置将上面的条件CS_SCL 和JC1都换成一个常数,然后跟踪数一下。就理解了 |
-- 作者:jcyluck -- 发布时间:2017/9/26 21:33:06 -- 这个处理逻辑应该是先向前找jc1根k,然后再这根k上算LLV(L,CS_SCL1)的值.此时取得这根k上的CS_SCL1作为目前的因子项。 首先谢谢答复,我现在不就是这样处理的吗?还是我理解错了?请再说明白一点,或是附个例子给我看一下,再次感谢!
|
-- 作者:wenarm -- 发布时间:2017/9/27 8:27:52 -- 以你上面的代码为例 CS_SCL2:=IF(JC1>SC1,SC3-JC2+5,SC2-JC2+5),NODRAW;
SCL2:REF(LLV(L,CS_SCL2),JC2),NODRAW;
在16.12.01那根k上时,CS_SCL2=14, JC2=71。而REF(LLV(L,CS_SCL2),JC2)的执行时,REF(XXX,JC2);找到前面第71根数据,也就是16.08.15那一天,然后取8.25日的CS_SCL2的值(在8.25日时CS_SCL2=35),作为LLV(L,CS_SCL2)的计算,也就是得到了8.25之前35天的最低价。(06.24是这35个周期范围内的最低价)
而你如果是定值带入到REF(LLV(L,定值),JC2),就不会有这种问题
[此贴子已经被作者于2017/9/27 8:29:04编辑过]
|