程序化指标破茧成蝶选股公式源码
发布日期: 2025-07-14 | 阅读量:5
低点周期 := 60;
{ 最近一次60周期内的最低点位置 }
最近低点位置 := BARSLAST(CLOSE = LLV(CLOSE, 低点周期));
{ 判断最近低点在1~60之间,且当日涨幅超过4.3% }
信号A := BETWEEN(最近低点位置, 1, 低点周期) AND CLOSE / REF(CLOSE, 1) > 1.043;
{ 确保该信号A在最近低点范围内是首次出现 }
信号B := 信号A AND COUNT(信号A, 最近低点位置) = 1;
{ 从信号B出发,再次寻找最近一次的最低点位置 }
再次低点位置 := BARSLAST(CLOSE = LLV(CLOSE, BARSLAST(信号B)));
{ 定义信号C:满足上涨条件且非无意义K线 }
信号C := 再次低点位置 = 1 AND CLOSE > REF(CLOSE, 再次低点位置) AND HIGH > LOW;
{ 统计信号C在上一信号B周期内出现的次数,并记录其历史位置 }
信号C出现次数 := COUNT(信号C, BARSLAST(信号B));
位置1 := BARSLAST(信号C AND 信号C出现次数 = 1);
位置2 := BARSLAST(信号C AND 信号C出现次数 = 2);
位置3 := BARSLAST(信号C AND 信号C出现次数 = 3);
{ 取最近三次信号C出现时的收盘价最大值 }
参考价1 := MAX(REF(CLOSE, 位置1), REF(CLOSE, 位置2));
参考价2 := MAX(参考价1, REF(CLOSE, 位置3));
{ 根据信号C出现次数分别取值,未出现则为0 }
参考价3 := IF(信号C出现次数 = 1, REF(CLOSE, 位置1), 0);
参考价4 := IF(信号C出现次数 = 2, 参考价1, 0);
参考价5 := IF(信号C出现次数 = 3, 参考价2, 0);
{ 汇总参考价 }
参考价总和 := CONST(参考价3 + 参考价4 + 参考价5);
{ 当前收盘价满足条件:突破参考价 且 涨幅大于4.3% }
突破信号 := CLOSE >= 参考价总和 AND CLOSE / REF(CLOSE, 1) > 1.043;
{ 最终选股条件:在信号B周期内,突破信号首次出现 }
XG: COUNT(突破信号, BARSLAST(信号B)) = 1 AND 突破信号;

指标公式逻辑介绍
低点周期 := 60;
{ 最近一次60周期内的最低点位置 }
最近低点位置 := BARSLAST(CLOSE = LLV(CLOSE, 低点周期));
{ 判断最近低点在1~60之间,且当日涨幅超过4.3% }
信号A := BETWEEN(最近低点位置, 1, 低点周期) AND CLOSE / REF(CLOSE, 1) > 1.043;
{ 确保该信号A在最近低点范围内是首次出现 }
信号B := 信号A AND COUNT(信号A, 最近低点位置) = 1;
{ 从信号B出发,再次寻找最近一次的最低点位置 }
再次低点位置 := BARSLAST(CLOSE = LLV(CLOSE, BARSLAST(信号B)));
{ 定义信号C:满足上涨条件且非无意义K线 }
信号C := 再次低点位置 = 1 AND CLOSE > REF(CLOSE, 再次低点位置) AND HIGH > LOW;
{ 统计信号C在上一信号B周期内出现的次数,并记录其历史位置 }
信号C出现次数 := COUNT(信号C, BARSLAST(信号B));
位置1 := BARSLAST(信号C AND 信号C出现次数 = 1);
位置2 := BARSLAST(信号C AND 信号C出现次数 = 2);
位置3 := BARSLAST(信号C AND 信号C出现次数 = 3);
{ 取最近三次信号C出现时的收盘价最大值 }
参考价1 := MAX(REF(CLOSE, 位置1), REF(CLOSE, 位置2));
参考价2 := MAX(参考价1, REF(CLOSE, 位置3));
{ 根据信号C出现次数分别取值,未出现则为0 }
参考价3 := IF(信号C出现次数 = 1, REF(CLOSE, 位置1), 0);
参考价4 := IF(信号C出现次数 = 2, 参考价1, 0);
参考价5 := IF(信号C出现次数 = 3, 参考价2, 0);
{ 汇总参考价 }
参考价总和 := CONST(参考价3 + 参考价4 + 参考价5);
{ 当前收盘价满足条件:突破参考价 且 涨幅大于4.3% }
突破信号 := CLOSE >= 参考价总和 AND CLOSE / REF(CLOSE, 1) > 1.043;
{ 最终选股条件:在信号B周期内,突破信号首次出现 }
XG: COUNT(突破信号, BARSLAST(信号B)) = 1 AND 突破信号;