用DeepSeek编写的选股程序

360影视 国产动漫 2025-04-02 16:12 3

摘要:以下是一个基于当前指数状态进行选股的Python程序示例,结合技术指标和基本面数据筛选股票。程序分为四个部分:指数状态判断、选股策略、数据获取和筛选执行。

以下是一个基于当前指数状态进行选股的Python程序示例,结合技术指标和基本面数据筛选股票。程序分为四个部分:指数状态判断、选股策略、数据获取和筛选执行。

---

### 一、程序框架

```python

import pandas as pd

import numpy as np

import tushare as ts # 需安装tushare库(注册获取token)

from datetime import datetime, timedelta

# 初始化

ts.set_token('YOUR_API_TOKEN') # 替换为你的Tushare token

pro = ts.pro_api

# 全局参数

INDEX_CODE = '000001.SH' # 上证指数

START_DATE = (datetime.now - timedelta(days=365)).strftime('%Y%m%d')

END_DATE = datetime.now.strftime('%Y%m%d')

```

---

### 二、指数状态判断

```python

def get_index_status:

# 获取指数数据

df = pro.index_daily(ts_code=INDEX_CODE, start_date=START_DATE, end_date=END_DATE)

df = df.sort_values('trade_date').set_index('trade_date')

# 计算技术指标

df['20ma'] = df['close'].rolling(20).mean

df['60ma'] = df['close'].rolling(60).mean

# 判断趋势(金叉/死叉)

last_20ma = df['20ma'].iloc[-1]

last_60ma = df['60ma'].iloc[-1]

if last_20ma > last_60ma and df['close'].iloc[-1] > last_20ma:

return 'uptrend' # 上升趋势

elif last_20ma

return 'downtrend' # 下降趋势

else:

return 'consolidation' # 震荡

```

---

### 三、选股策略

```python

def select_stocks(market_status):

# 获取全A股列表(剔除ST和次新股)

stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code,name,industry,list_date')

stock_list = stock_list[~stock_list['name'].str.contains('ST')]

stock_list = stock_list[stock_list['list_date']

selected =

for ts_code in stock_list['ts_code']:

try:

# 获取个股数据

k_data = pro.daily(ts_code=ts_code, start_date=START_DATE, end_date=END_DATE)

k_data = k_data.sort_values('trade_date')

# 技术面筛选

close_prices = k_data['close'].values

vol = k_data['vol'].values

# 计算指标

ma20 = close_prices[-20:].mean

ma60 = close_prices[-60:].mean

rsi = compute_rsi(close_prices, 14) # 需自定义RSI计算函数

# 基本面筛选

fina = pro.fina_indicator(ts_code=ts_code, period='20230630') # 最新财报

pe = fina['pe'].values[0]

roe = fina['roe'].values[0]

# 根据市场状态应用不同策略

if market_status == 'uptrend':

if (close_prices[-1] > ma20 > ma60 and

rsi[-1]

vol[-1] > vol[-5:-1].mean and

roe > 15):

selected.append(ts_code)

elif market_status == 'downtrend':

if (ma20

close_prices[-1]/close_prices[-30] > 0.9 and # 抗跌

pe

fina['current_ratio'] > 2):

selected.append(ts_code)

except Exception as e:

continue

return stock_list[stock_list['ts_code'].isin(selected)]

```

---

### 四、执行与输出

```python

if __name__ == '__main__':

market_status = get_index_status

print(f"当前市场状态: {market_status}")

selected_stocks = select_stocks(market_status)

print("\n筛选结果(前20只):")

print(selected_stocks[['ts_code', 'name', 'industry']].head(20))

```

---

### 五、关键增强点

1. **数据增强**:

- 增加北向资金持股数据(`pro.hk_hold`)

- 添加机构调研数据(`pro.stk_surv`)

2. **策略优化**:

```python

# 动量因子改进

def momentum_score(close_prices):

return (close_prices[-1]/close_prices[-20] * 0.4 +

close_prices[-1]/close_prices[-60] * 0.6)

# 波动率过滤

def volatility_filter(close_prices):

returns = np.diff(np.log(close_prices))

return np.std(returns[-20:])

```

3. **风险控制**:

- 行业分散:每个行业不超过3只

- 市值平衡:大市值(>300亿)占比不低于50%

---

### 六、注意事项

1. 数据接口需要处理请求限制(Tushare Pro版有频次限制)

2. 财务数据需注意报告期滞后问题

3. 实际应用需增加止损/止盈逻辑

4. 建议结合宏观经济数据(GDP、CPI等)增强判断

---

这是一个基础框架,实际应用中需要根据市场变化持续优化策略参数,并建议使用更专业的回测框架(如backtrader)进行验证。

来源:向阳随笔

相关推荐