西南航空 行李托运:指标编写小常识,小技巧--金死叉之间的最大值求法

来源:百度文库 编辑:九乡新闻网 时间:2024/05/05 12:33:12
金死叉之间的最大值求法:
  A1:=CROSS("MACD.MACD",0);
  A2:=BARSLAST(A1);
  A3:=HHVBARS("MACD.MACD" ,A2+1);
  A4:=BACKSET(REF(A3>=1,1) AND "MACD.MACD"<0,A3);
  A5:=BACKSET(REF(A4=0,1) AND A4=1,2);
  高值:IF(FILTER(A5,2),"MACD.MACD",0);
  DRAWICON(高值>0,高值,4);
  
金死叉之间的最小值求法:
  B1:=CROSS(0,"MACD.MACD");
  B2:=BARSLAST(B1);
  B3:=LLVBARS("MACD.MACD" ,B2+1);
  B4:=BACKSET(REF(B3>=1,1) AND "MACD.MACD">0,B3);
  B5:=BACKSET(REF(B4=0,1) AND B4=1,2);
  低值:IF(FILTER(B5,2),"MACD.MACD",0);
  DRAWICON(低值<0,低值,5);


时间周期线(主图叠加)  
  INPUT:N(5,5,100);//参数定义
  ZIG(1,N);//高点
  FF:=PEAKBARS(1,N,1);
  FF:=IF(FF<6,PEAKBARS(1,N,2),FF);
  BARST:=SYSPARAM(1);
  VARIABLE:ZQ[序列数据量/2]:=1.236;
  ZQ[2]:=1.309;
  ZQ[3]:=1382;
  ZQ[4]:=1.5;
  ZQ[5]:=1.618;
  ZQ[6]:=1.746;
  ZQ[7]:=2;
  ZQ[8]:=2.618;
  ZQ[9]:=3;
  ZQ[10]:=3.236;
  ZQ[11]:=4.236;
  ZQ[12]:=5.236;//周期线间隔比例,可另行定义
  TJ:=FF[BARST]=BARST-BARPOS;
  FOR I=1 TO 12 DO TJ:=TJ OR BARPOS-BARST=ROUND((ZQ-1)*FF[BARST]+0.5);
  VERTLINE(TJ),POINTDOT,COLORMAGENTA;
  
  必须打开十字光标才可以正常使用。自动寻找高点,可另加参数,改成高低点两用。
  
  公式含义:当K线与高点的时间间隔为十字光标与高点的时间间隔的等于指定比例时,显示竖线。即所谓的时间预测,如果您有好的测试方法,可以仿此代码编制。
  
  这段代码,进行适当的改造,可以向未来延伸,有兴趣的可以自行研究(提示:使用SHIFT函数)。


向前赋值函数的高级用法
  
  问题:如何在最后一根K线的前第6天,作上标记?
  
  1、先建立一个名为BACKSET-TEST的公式,代码如下:
  
  ISLASTBAR{该周期是否最后一个周期。最后一个周期返回值为1,其余为0}
  
  观察指标线的图形,正如注释所述,最后一天显示为1,这个1我们可理解为信号(条件)成立。其余时间,指标的数值为0,可理解为信号(条件)不成立。
  
  2、巧用BACKSET()函数:
  
  1BACDSET(X,N)注释:向前赋值,若X非0则把当前周期及前N-1周期的数值设置为1;
  
  2示例:把信号向前移。
  
  TJ1:=ISLASTBAR;{最后一天的条件}
  TJ2:BACKSET(TJ1,6);
  
  观察TJ2指标线图,发现最后6天的TJ2信号都是1,即一个高度为1的矩形。公式中,还无法判断哪天是倒数第6天。
  
  3、显然倒数第6天,是上面矩形的前沿,如何在公式中,表达这个矩形的前沿?
  容易想到的办法:
  
  1倒数第6天的当天,TJ2为1,更早的1天TJ2=0,因此可以编出如下代码:
  
  TJ1:=ISLASTBAR;{最后一天的条件}
  TJ2:=BACKSET(TJ1,6);
  TJ3:TJ2 AND REF(TJ2,1)=0;
  
  2倒数第6天的当天,TJ2为1,更早的1天TJ2=0,即当天TJ2比早一天的TJ2更大,因此可以编出如下代码:
  
  TJ1:=ISLASTBAR;{最后一天的条件}
  TJ2:=BACKSET(TJ1,6);
  TJ3:TJ2>REF(TJ2,1);
  
  3倒数第6天的当天,TJ2为1,更早的1天TJ2=0,可以想像为TJ2指标线上穿了一条高度为0.5的水平线,因此可以编出如下代码:
  
  TJ1:=ISLASTBAR;{最后一天的条件}
  TJ2:=BACKSET(TJ1,6);
  TJ3:CROSS(TJ2,0.5);
  
  4巧用FILTER()过滤函数,FILTER(X,N),若X非0,可以让X保持当天的值不变,且过滤其后N个周期使之数值为0。
  
  TJ1:=ISLASTBAR;{最后一天的条件}
  TJ2:=BACKSET(TJ1,6);
  TJ3:FILTER(TJ2,5);{第1次的TJ2保持为1不变,其后的5个周期过滤为0}
  
  这样就初步找到了4种方法,可以标记倒数第6天,若想用图标来标记的话,代码例举如下:
  
  TJ1:=ISLASTBAR;{最后一天的条件}
  TJ2:=BACKSET(TJ1,6);
  TJ3:=TJ2>REF(TJ2,1);
  DRAWICON(TJ3,L,1);