AttributeError: type object 'StockValuation' has no attribute 'is_st'
时间: 2023-06-23 11:37:43 浏览: 197
非常抱歉,最新版的聚宽 SDK 中,`StockValuation` 没有 `is_st` 这一属性了。你可以使用 `get_extras` 函数来获取是否是 ST 股票的信息,具体代码如下:
```python
# 导入所需库
import jqdata
# 初始化函数,设定基准等等
def initialize(context):
# 设定股票池
g.stocks = get_stock_pool()
# 设置手续费与滑点
set_commission(slippage=Slippage(), commission=Commission())
# 定义股票池函数
def get_stock_pool():
# 获取所有A股股票
stocks = list(get_all_securities(['stock']).index)
# 过滤掉ST股票和上市时间不足一年的股票
q = query(
valuation.code
).filter(
valuation.code.in_(stocks),
# 上市时间超过一年
valuation.list_date < (context.current_dt - datetime.timedelta(days=365))
)
df = get_fundamentals(q)
# 获取是否是ST股票的信息
is_st = get_extras('is_st', df.index, count=1, start_date=context.current_dt)
is_st = is_st.iloc[0]
# 过滤掉ST股票
stocks = [s for s in df.index if not is_st[s]]
# 返回剩余股票
return stocks
# 定义选择股票函数
def select_stocks(context):
# 获取当日集合竞价涨跌幅前50%的股票
q = query(
valuation.code
).filter(
valuation.code.in_(g.stocks),
# 当日集合竞价涨跌幅前50%
valuation.change_pct > 0
).order_by(
valuation.change_pct.desc()
).limit(
len(g.stocks) // 2
)
stocks = [s for s in get_fundamentals(q).iloc[:,0]]
# 返回选出的股票
return stocks
# 定义调仓函数
def rebalance(context):
# 清空现有持仓
for stock in context.portfolio.positions:
order_target(stock, 0)
# 选择新的股票
stocks = select_stocks(context)
# 平均分配资金买入选中的股票
if stocks:
weight = 1.0 / len(stocks)
for stock in stocks:
order_target_percent(stock, weight)
```
这个示例代码中,我们使用了 `get_extras` 函数来获取是否是 ST 股票的信息,过滤掉了 ST 股票。然后,在 `initialize()` 函数中,我们调用了 `get_stock_pool()` 函数来设定股票池。接着,在 `select_stocks()` 函数中,我们获取当日集合竞价涨跌幅前50%的股票,作为选股结果。最后,在 `rebalance()` 函数中,我们清空现有持仓,然后买入选中的股票,让资金平均分配到每个股票的头寸上。
阅读全文