本文依据网友的思路,给出BARSLAST函数的嵌套应用算法,为递进式算法需要提供我们的思路,请看留言: 网友的留言 网友留言的题目是:建立一个选股指标---MACD在0轴下实现两次金叉(相差一段时间,第二个比第一个底部抬高)。 网友补充的示意图: 思路示意图 思路步骤
用法:BARSLAST(X)---上一次X不为0到当下的周期数 例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1.1)表示上一个涨停板到当前的周期数
算法的建立 1. 引入系统已有指标MACD,做赋值处理,并删除MACD行 DIF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG); DEA:=EMA(DIF,MID); 2. 计算两次金叉发生的位置---本文重点:计算左侧金叉位置时,用到了REF函数,限定时间范围是发生在右侧金叉位置之前 WZ1:=CONST(BARSLAST(CROSS(DIF,DEA))); WZ2:=CONST(BARSLAST(REF(CROSS(DIF,DEA),WZ1+1)))+WZ1+1; 3.数据筛选的逻辑序列 a.最左侧第一次金叉发生之后,DIF与DEA一直处于MACD的0轴之下 EVERY(DIF<0,WZ2+1) EVERY(DEA<0,WZ2+1) b.右侧的第二次金叉,发生在当下 WZ1<=1 A c.变量调节,两次金叉发生的时间间隔,参数的选择依据使用者自己的需求 WZ2-WZ1>=间隔数; 数据筛选的完整代码 代码流程 DIF:=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG); DEA:=EMA(DIF,MID); WZ1:=CONST(BARSLAST(CROSS(DIF,DEA))); WZ2:=CONST(BARSLAST(REF(CROSS(DIF,DEA),WZ1+1)))+WZ1+1; EVERY(DIF<0,WZ2+1) AND EVERY(DEA<0,WZ2+1) AND WZ1<=1 AND WZ2-WZ1>=间隔数; |
|