以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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编辑过]