本文依据网友的思路,给出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>=间隔数;
联系客服