这篇文章主要向股民分享了通达信中可免费实现类似付费软件“暗盘资金”功能的“暗流蓄力指标”,具体内容如下:
### 核心逻辑与条件
- **量价暗语**:成交量达20日均量的1.5-3倍,股价却不涨,体现主力压价吸筹。
- **资金暗流**:OBV能量潮指标突破5日均线且持续创新高,表明大资金流入。
- **成本控制**:股价被压制在20日布林通道中轨附近,主力控盘明显。
- **其他条件**:股票连续20天被60日均线压制,制造弱势假象;当日换手率高于前一日,验证资金进场。
### 指标优势
- **零成本高价值**:通达信免费,与某付费软件逻辑、信号相同,可省上千费用。
- **无未来函数**:数据为实时价格和成交量,无滞后参数,盘中可验证信号,避免“信号闪烁”。
- **操作极简**:副图直接显示信号,盘中预警可自动跳出符合条件股票,比付费软件高效。
### 模型价值
- 提前提示主力吸筹结束、股价将涨的信号,避免踏空。
- 通过量能、OBV、通道指标验证主力动作,助散户不被洗盘震下车。
- 要求股价在中长期低位,避开高位主力出货陷阱,杜绝接盘风险。
### 操作提醒
- 信号出现后观察1-3天,放量突破60日线则确定性增加,跌破20日布林下轨需谨慎。
- 强调免费工具需结合严格纪律,同时提醒指标仅为技术分析工具,不保证盈利,股市有风险。
# ### 暗资金选股法
# ### 说明:
# 1. **数据来源**:使用tushare获取股票数据,需先注册并获取token(免费版有调用限制)。
# 2. **指标实现**:
# - 严格按照文中逻辑计算成交量、OBV、布林通道、60日均线压制、换手率等条件。
# - 部分指标做了简化处理(如用成交量代替换手率,实际可使用`turnover`字段)。
# 3. **使用方法**:替换`tushare_token`后运行,会输出符合条件的股票代码及日期。
# 4. **风险提示**:文中提到“指标仅为分析工具,不保证盈利”,实际使用需结合自身判断,股市有风险。
# 如果需要更精准的指标计算(如通达信原版公式),可根据通达信的指标源码进一步调整参数。
import tushare as ts
import pandas as pd
import numpy as np
import datetime
# 设置tushare token(需替换为自己的token)
ts.set_token('你的tushare_token')
pro = ts.pro_api()
# 获取当前日期及历史日期
today = datetime.datetime.now().strftime('%Y%m%d')
# 计算60天前的日期(用于获取足够数据)
start_date = (datetime.datetime.now() - datetime.timedelta(days=120)).strftime('%Y%m%d')
# 获取所有A股股票代码
stock_basic = pro.stock_basic(exchange='', list_status='L', fields='ts_code')
ts_codes = stock_basic['ts_code'].tolist()
# 存储符合条件的股票
selected_stocks = []
# 遍历股票池(可根据需要限制数量,避免请求过多)
for ts_code in ts_codes[:500]: # 测试时取前500只,实际可去掉[:500]
try:
# 获取日线数据
df = ts.pro_bar(ts_code=ts_code, adj='qfq', start_date=start_date, end_date=today)
if df is None or len(df) < 60:
continue # 数据不足跳过
# 按日期升序排列
df = df.sort_values('trade_date').reset_index(drop=True)
df['trade_date'] = pd.to_datetime(df['trade_date'])
# 计算指标
# 1. 20日均量
df['vol_20'] = df['vol'].rolling(window=20).mean()
# 2. 当日成交量是否为20日均量的1.5-3倍
df['vol_condition'] = (df['vol'] >= 1.5 * df['vol_20']) & (df['vol'] <= 3 * df['vol_20'])
# 3. OBV能量潮指标
df['obv'] = np.where(df['close'] > df['close'].shift(1), df['vol'],
np.where(df['close'] < df['close'].shift(1), -df['vol'], 0)).cumsum()
df['obv_5'] = df['obv'].rolling(window=5).mean()
# OBV突破5日均线且创新高
df['obv_condition'] = (df['obv'] > df['obv_5']) & (df['obv'] == df['obv'].rolling(window=20).max())
# 4. 20日布林通道(中轨为20日均线,上轨=中轨+1.5倍标准差,下轨=中轨-1.5倍标准差)
df['ma20'] = df['close'].rolling(window=20).mean()
df['std20'] = df['close'].rolling(window=20).std()
df['boll_mid'] = df['ma20']
# 股价在中轨附近(这里简化为中轨上下1.5倍标准差范围内,即布林带内)
df['boll_condition'] = (df['close'] >= df['boll_mid'] - 1.5 * df['std20']) & (df['close'] <= df['boll_mid'] + 1.5 * df['std20'])
# 5. 连续20天被60日均线压制
df['ma60'] = df['close'].rolling(window=60).mean()
# 最近20天收盘价均低于60日均线
df['ma60_condition'] = df['close'].rolling(window=20).apply(lambda x: all(x < df['ma60'].iloc[-1]))
# 6. 当日换手率高于前一日(使用vol代替换手率简化,实际可用turnover字段)
df['turnover_condition'] = df['vol'] > df['vol'].shift(1)
# 筛选最后一天符合所有条件的股票
last_day = df.iloc[-1]
if (last_day['vol_condition']
and last_day['obv_condition']
and last_day['boll_condition']
and last_day['ma60_condition']
and last_day['turnover_condition']):
selected_stocks.append({
'ts_code': ts_code,
'trade_date': last_day['trade_date'].strftime('%Y-%m-%d')
})
print(f"符合条件的股票:{ts_code}")
except Exception as e:
print(f"处理股票{ts_code}时出错:{e}")
print("\n选股结果:")
print(pd.DataFrame(selected_stocks))