
等级: 新手上路
- 注册:
- 2025-5-14
- 曾用名:
|

楼主 |
发表于 2025-5-15 23:13
|
显示全部楼层
我自己写了一个绿柱的底背离公式,但是无法选出想要的股票。麻烦技术大神帮忙看看我的代码哪里错了? 也顺便帮忙写一下上面的红柱隔堆顶背离的筛选公式
{ 参数设置:历史数据周期 }
N:=250;
DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
MACD:=(DIF-DEA)*2;
当前绿柱:=MACD<0;
{===== 堆结构定义 =====}
{ 当前绿堆S绿1 }
S绿1_开始:=BARSLAST(CROSS(0,MACD)); { 最后一次MACD下穿0轴的位置 }
{ 前红堆S红1 }
红堆候选:=BARSLAST(CROSS(MACD,0));
S红1_开始:=IF(红堆候选 < S绿1_开始, 红堆候选 + 1, 0); { +1修正交叉点偏移 }
{ 验证红堆后无绿柱直到S绿1开始 }
红堆有效:=COUNT(CROSS(0,MACD),S红1_开始)=0;
S红1_开始:=IF(红堆有效, S红1_开始, 0);
{ 前绿堆S绿2 }
绿堆候选:=BARSLAST(CROSS(0,REF(MACD,S红1_开始))) + S红1_开始 + 1;
{ 验证绿堆后无红柱直到S红1开始 }
绿堆有效:=COUNT(CROSS(MACD,0),绿堆候选)=0;
S绿2_开始:=IF(绿堆有效 AND 绿堆候选 < S红1_开始, 绿堆候选, 0);
{===== 堆结构验证 =====}
有效结构:=
S绿2_开始 < S红1_开始 AND
S红1_开始 < S绿1_开始 AND
S绿2_开始 > 0;
{===== 计算S绿2极值 =====}
S绿2_区间长度:=S红1_开始 - S绿2_开始 + 1;
S绿2_极值:=LLV(REF(MACD,S绿2_开始),S绿2_区间长度);
S绿2_极值位置:=S绿2_开始 + LLVBARS(REF(MACD,S绿2_开始),S绿2_区间长度);
K2_收盘:=REF(CLOSE,S绿2_极值位置);
{===== 选股条件 =====}
条件1:=CLOSE < K2_收盘;
条件2:=ABS(S绿2_极值)>ABS(MACD);
选股:当前绿柱 AND 有效结构 AND 条件1 AND 条件2; |
|