<think>好的,我需要帮用户写一个通达信的选股公式,满足以下条件:
1. 向前第四天(即四天前)涨停。
2. 第三天(三天前)跳空高开。
3. 之后连续横盘三天,低点不跌破跳空缺口。
4. 今天收阴线。
首先,我需要明确每个条件如何转化为通达信的公式语言。通达信使用的是类似公式语言,有各种函数来获取历史数据,比如REF、HIGH、LOW、CLOSE、OPEN等。
第一步,处理四天前涨停的条件。涨停通常是指当日收盘价等于涨停价。不同市场和股票的涨停幅度可能不同,比如A股主板是10%,创业板和科创板可能不同。这里可能需要用户确认,但通常假设为10%。所以四天前的收盘价应该等于前一日收盘价的1.1倍。公式为:
涨停条件: C == REF(C,1) * 1.1; 但是这里要四天前,所以用REF函数,四天前的涨停应该是:
REF(C,4) == REF(REF(C,1),4) * 1.1; 或者更简单一点,REF(C,4) = REF(C,5) * 1.1。这可能更准确,因为四天前的收盘价相对于五天前的收盘价涨停了10%。
但可能要考虑ST股的情况,比如5%的涨停。但用户没说明,可能默认10%。
第二步,三天前跳空高开。跳空高开通常指当天的开盘价高于前一天的收盘价,并且形成缺口,即当天的最低价也高于前一天的最高价。所以三天前的开盘价要大于两天前的收盘价(即四天前的收盘价?或者两天前的收盘价?这里需要注意时间点。第三天是指三天前,即相对于今天来说,第三天是T-3,第四天是T-4。所以跳空高开发生在第三天(T-3),也就是相对于第四天(T-4)的收盘价而言。例如,T-3的开盘价要高于T-4的收盘价,并且最低价不低于T-4的最高价,从而形成缺口。但用户可能指的是T-3当天开盘高于T-4的收盘,并且之后三天横盘,缺口未被填补。所以跳空高开的条件应该是:
REF(OPEN,3) > REF(C,4) * 1.0,并且REF(LOW,3) > REF(HIGH,4)。即第三天(T-3)的开盘价高于T-4的收盘价,且当天的最低价不低于T-4的最高价,形成向上缺口。
接下来是连续横盘三天,即第三天(T-3)、第二天(T-2)、昨天(T-1)这三天的K线都在某个范围内波动,并且低点不低于跳空缺口的低点,也就是T-3的最低价(因为缺口形成后的最低价应该不低于缺口的下沿)。或者用户可能指的是缺口的下沿是T-4的最高价,而之后三天的低点都不跌破这个缺口的下沿,即T-3、T-2、T-1这三天的LOW都大于等于T-4的最高价。或者可能指的是跳空当天的缺口,即T-3的开盘价形成的缺口,其缺口下沿是T-4的最高价,因此之后三天的最低价都不低于T-4的最高价。
这里需要明确用户的意思。用户说的“跳空高开”应该是指T-3日开盘高于T-4日的收盘,并且形成缺口,即T-3的最低价高于T-4的最高价。因此,缺口的下沿是T-4的最高价。之后的三天横盘,即T-3、T-2、T-1这三天的低点都不低于缺口下沿(即T-4的最高价)。所以横盘三天的条件应该是:
REF(LOW,3) >= REF(HIGH,4) AND
REF(LOW,2) >= REF(HIGH,4) AND
REF(LOW,1) >= REF(HIGH,4);
同时,横盘可能还意味着这三天的波动幅度较小,比如最高价和最低价的差在一定范围内。但用户没有具体说明,可能只需要低点不跌破缺口即可,所以这部分可能不需要额外的幅度限制。
最后,今天(T日)收阴线,即今天的收盘价低于开盘价:C < OPEN。
现在将这些条件组合起来。需要注意日期的索引是否正确。例如,REF(X, N)表示N天前的X值。例如,今天(当前K线)是第0天,昨天是REF(CLOSE,1),三天前是REF(CLOSE,3)。
所以,具体分解:
条件一:四天前(T-4)涨停:
REF(C,4) >= REF(C,5) * 1.095; (这里使用9.5%以上,因为有时候涨停可能有小数点的误差,比如四舍五入)
条件二:三天前(T-3)跳空高开,即开盘价高于T-4的收盘价,并且最低价高于T-4的最高价:
REF(OPEN,3) > REF(C,4) AND REF(LOW,3) > REF(HIGH,4);
条件三:之后三天(T-3、T-2、T-1)的横盘,即这三天的低点都不低于T-4的最高价。注意这里可能需要明确,是否横盘的三天包括T-3日,因为T-3日已经跳空高开。根据用户描述,“连续横盘三天”应该是指跳空后的三天,即T-3之后的三天?或者可能用户的意思是从T-3开始的连续三天?或者可能用户的时间点有误,需要重新理清时间顺序。
用户的原话是:“向前第四天涨停,第三天跳空高开,连续横盘三天”。时间顺序应该是:
- 第四天(T-4):涨停
- 第三天(T-3):跳空高开
- 之后连续三天(T-2, T-1, T0)横盘?或者可能是T-3、T-2、T-1三天横盘?
但用户的描述可能有问题,因为如果第三天跳空高开,然后连续横盘三天,那么这三天应该是T-3之后的三天,也就是T-2、T-1、T0。但今天(T0)是最后一天,而用户要求今天收阴线,所以横盘的三天可能是指T-3、T-2、T-1这三天,而今天T0是收阴线。需要明确。
根据用户的问题,完整的时间线应该是:
- 第四天(T-4):涨停
- 第三天(T-3):跳空高开
- 接下来三天(T-3、T-2、T-1)连续横盘,且低点不跌破跳空缺口
- 今天(T0)收阴线
但这样的话,跳空高开是在T-3日,之后横盘三天即T-3、T-2、T-1,这可能不合理,因为T-3日当天已经跳空高开,可能形成大阳线,而横盘应该是之后的两天?或者用户可能希望的是跳空后的三天横盘,即T-2、T-1、T0,但今天T0需要收阴线,可能这不符合。需要再仔细分析。
可能用户的时间线是:
- T-4日:涨停
- T-3日:跳空高开(相对于T-4日的收盘)
- 接下来的三天(T-2、T-1、T0)横盘,且低点不跌破T-3日的跳空缺口(缺口下沿是T-4日的最高价)
- 今天(T0)收阴线
但这样,横盘的三天包括今天,而今天收阴线可能属于横盘的一部分。或者可能用户的意思是:
- T-4日涨停
- T-3日跳空高开,形成缺口
- 接下来的三天(T-3、T-2、T-1)横盘,缺口未被填补(即这三天的低点不低于缺口下沿)
- 今天(T0)收阴线
这似乎更合理,因为如果横盘是在跳空之后的三天,而今天是收阴线,那么横盘的三天可能指的是T-3、T-2、T-1。但这样的话,T-3日当天已经跳空高开,可能当天的波动较大,是否属于横盘?可能用户希望的是在跳空后的三天内,股价波动不大,形成横盘整理,且不跌破缺口。
这个时候,横盘的条件可能需要定义这三天的最高价和最低价波动幅度较小,比如每天的实体幅度较小,或者三天的最高价和最低价在一个区间内。但用户提到的是“连续横盘三天,且低点不跌破跳空缺口”,所以可能只要满足这三天的低点都不低于缺口下沿(即T-4的最高价),而横盘可能指这三天的波动幅度较小,比如振幅不大。或者用户可能仅指低点不跌破缺口,而不考虑振幅。
所以,条件三应该是:
三天(T-3、T-2、T-1)的最低价均不低于T-4日的最高价:
REF(LOW,3) >= REF(HIGH,4) AND
REF(LOW,2) >= REF(HIGH,4) AND
REF(LOW,1) >= REF(HIGH,4);
此外,横盘可能意味着这三天的股价波动较小,比如每天的收盘价在某个范围内。例如,这三天的收盘价相对于T-3日的收盘价波动不大,或者最高价和最低价的幅度较小。但用户没有具体说明,所以可能这部分可以忽略,或者需要加入一些条件,比如每天的涨幅在一定范围内。
例如,这三天的最高价和最低价的幅度不超过一定百分比,比如5%:
REF((HHV(HIGH,3) - LLV(LOW,3)) / LLV(LOW,3),1) <= 0.05;
但这里的时间范围可能需要调整,因为要检查的是T-3到T-1这三天的波动。或者使用HHV和LLV函数来计算这三天的最高和最低。
比如:
横盘条件: (HHV(REF(HIGH,3),3) - LLV(REF(LOW,3),3)) / LLV(REF(LOW,3),3) <= 0.05;
但可能写法有问题,需要重新考虑。
或者,对于T-3、T-2、T-1这三天的每一天,其最高价和最低价的振幅较小:
EVERY((HIGH - LOW)/LOW <= 0.03, 3);
但这里的EVERY函数可能需要用AND连接三天的条件:
REF((HIGH - LOW)/LOW <= 0.03,3) AND
REF((HIGH - LOW)/LOW <= 0.03,2) AND
REF((HIGH - LOW)/LOW <= 0.03,1);
这里的0.03是假设振幅3%以内,用户可能需要调整。但用户没有给出具体数值,所以可能这部分需要忽略,或者必须与用户确认。但根据用户的问题,可能只需要低点不跌破缺口,而横盘的定义可能用户认为只要缺口不补即可,所以可能不需要振幅限制,只满足低点不破即可。
最后,今天收阴线:CLOSE < OPEN。
综合以上条件,编写公式:
涨停条件: REF(C,4) / REF(C,5) >= 1.095; (涨停,考虑四天前的收盘相对于五天前的涨幅≥9.5%)
跳空高开: REF(OPEN,3) > REF(C,4) AND REF(LOW,3) > REF(HIGH,4);
缺口不破: REF(LOW,3) >= REF(HIGH,4) AND REF(LOW,2) >= REF(HIGH,4) AND REF(LOW,1) >= REF(HIGH,4);
今天阴线: C < O;
选股公式: 涨停条件 AND 跳空高开 AND 缺口不破 AND 今天阴线;
但需要注意,这里的缺口不破是否应该包括T-3日的最低价,因为T-3日已经跳空高开,所以当天的最低价已经高于T-4日的最高价,所以实际上,只要T-3、T-2、T-1这三天的LOW都不低于T-4的HIGH即可。而跳空高开条件中的REF(LOW,3) > REF(HIGH,4)已经保证了T-3日的最低价高于T-4的最高价,所以缺口不破中的REF(LOW,3) >= REF(HIGH,4)其实是重复的。因此,缺口不破的条件可能只需检查T-2和T-1的最低价是否不低于T-4的HIGH:
缺口不破: REF(LOW,2) >= REF(HIGH,4) AND REF(LOW,1) >= REF(HIGH,4);
因为T-3日的最低价已经满足在跳空条件中。
所以综合起来:
条件四天前涨停: REF(C,4) / REF(C,5) >= 1.095;
条件三天前跳空高开: REF(OPEN,3) > REF(C,4) AND REF(LOW,3) > REF(HIGH,4);
缺口未被填补: REF(LOW,2) >= REF(HIGH,4) AND REF(LOW,1) >= REF(HIGH,4);
今天阴线: C < O;
选股公式: 条件四天前涨停 AND 条件三天前跳空高开 AND 缺口未被填补 AND 今天阴线;
另外,关于涨停的判断,通达信中可能使用不同的方式,比如考虑ST股票的5%涨停,或者新股的不同规则。但一般情况下,可以简化为涨幅≥9.8%或接近涨停。例如:
涨停条件: (REF(C,4) - REF(C,5)) / REF(C,5) * 100 >= 9.8;
或者使用ZTPRICE函数,比如REF(C,4) = ZTPRICE(REF(C,5), 0.1); 但这个函数可能返回理论涨停价,但需要考虑四舍五入的问题。
不过为了兼容性,可能直接用涨幅大于9.8%更稳妥。
另外,关于横盘的三天,用户可能是指连续三天的小K线,比如实体较小,或者波动幅度小,但用户没有明确说明,所以可能无法加入这部分条件。如果用户需要,可能需要进一步询问。
现在把这些条件组合成通达信的公式:
{ 选股公式 }
T4涨停:= (REF(C,4) - REF(C,5))/REF(C,5)*100 >= 9.8;
T3跳空:= REF(O,3) > REF(C,4) AND REF(L,3) > REF(H,4);
缺口不破:= REF(L,2) >= REF(H,4) AND REF(L,1) >= REF(H,4);
今天阴线:= C < O;
选股条件: T4涨停 AND T3跳空 AND 缺口不破 AND 今天阴线;
但要注意,在通达信中,公式的周期是从当前K线开始计算的。例如,REF(C,4)表示四天前的收盘价。例如,如果今天是2023年10月10日(假设是交易日),那么REF(C,4)就是四天前的收盘价,比如如果是连续交易日,可能是2023年10月4日(假设中间没有节假日)。需要确保时间的正确性。
此外,测试该公式时,可能需要检查历史数据是否符合条件。例如,某股票在四天前涨停,三天前跳空高开且未回补缺口,之后两天的最低价不低于缺口,今天收阴线。
可能的潜在问题:
1. 跳空高开的判断是否正确,包括开盘价高于前日收盘,且最低价高于前日最高。
2. 缺口未被填补的条件是否遗漏了第三天(T-3)之后的两天,即T-2和T-1。
3. 涨停的判断是否准确,是否有考虑ST股的情况。
4. 今天收阴线是否指的是当前交易日,而公式是否在收盘后使用。
最终的通达信公式可能如下:
{ 选股公式:前第四天涨停,第三天跳空高开,缺口不破,今收阴 }
T4涨停:= (REF(CLOSE,4) - REF(CLOSE,5))/REF(CLOSE,5) >= 0.095; { 涨停9.5%以上 }
T3跳空:= REF(OPEN,3) > REF(CLOSE,4) AND REF(LOW,3) > REF(HIGH,4); { 第三天跳空高开 }
缺口不破:= EVERY(REF(LOW,2) >= REF(HIGH,4) AND REF(LOW,1) >= REF(HIGH,4), 1); { T-2和T-1的最低价不低于T-4的最高价 }
今天阴线:= CLOSE < OPEN;
选股条件: T4涨停 AND T3跳空 AND 缺口不破 AND 今天阴线;
或者更准确的条件:
缺口不破:= REF(LOW,2) >= REF(HIGH,4) AND REF(LOW,1) >= REF(HIGH,4);
因为EVERY函数可能在这里不适用,应该用两个独立的REF条件。
此外,用户可能需要调整涨停的幅度,比如用更精确的计算方式,比如ZTPRICE函数:
T4涨停:= REF(CLOSE,4) = ZTPRICE(REF(CLOSE,5), 0.1); { 假设是非ST股,10%涨停 }
但ZTPRICE返回的是理论涨停价,实际收盘价可能因为四舍五入略有差异,所以可以允许一定误差:
T4涨停:= ABS(REF(CLOSE,4) - ZTPRICE(REF(CLOSE,5), 0.1)) < 0.01; { 误差小于0.01元 }
这样更准确。
综合这些,最终的公式可能如下:
{ 通达信选股公式 }
T4涨停:= ABS(REF(C,4) - ZTPRICE(REF(C,5), 0.1)) < 0.01; { 四天前涨停 }
T3跳空:= REF(O,3) > REF(C,4) AND REF(L,3) > REF(H,4); { 三天前跳空高开不补 }
缺口不破:= REF(L,2) >= REF(H,4) AND REF(L,1) >= REF(H,4); { 之后两天的最低价不低于缺口 }
今阴线:= C < O; { 今天收阴 }
选股条件: T4涨停 AND T3跳空 AND 缺口不破 AND 今阴线;
需要注意的是,该公式可能需要在日线数据下运行,且用户需要确保数据完整,尤其是四天前的数据存在。此外,实际应用中可能需要根据市场情况调整涨停的判断方式,比如创业板或科创板20%的涨停,这时候需要调整ZTPRICE的参数为0.2。但用户没有说明市场类型,所以可能需要通用处理,或者用户自行调整。
最后,提醒用户公式可能需要进一步测试和优化。</think>以下是根据您的要求编写的通达信选股公式:
```plaintext
{ 通达信选股公式:前四天涨停,三天前跳空,缺口不破,今收阴 }
T4涨停:= ABS(REF(C,4) - ZTPRICE(REF(C,5), 0.1)) < 0.01; { 四天前涨停(10%涨停)}
T3跳空:= REF(O,3) > REF(C,4) AND REF(L,3) > REF(H,4); { 三天前跳空高开且不补缺口 }
缺口不破:= REF(L,2) >= REF(H,4) AND REF(L,1) >= REF(H,4); { 过去两天最低价不破缺口 }
今收阴:= C < O; { 今日收阴线 }
选股条件: T4涨停 AND T3跳空 AND 缺口不破 AND 今收阴;
```
### 公式说明:
1. **四天前涨停**
使用`ZTPRICE`函数精准计算涨停价,允许0.01元误差(应对价格四舍