这段代码:
```python
def select_stocks(context):
date = context.previous_date
startdate=date-datetime.timedelta(g.nday)
trade_days=get_trade_days(startdate,date)
total_df=pd.DataFrame()
for day in trade_days:
q = query(finance.STK_EL_TOP_ACTIVATE).filter(finance.STK_EL_TOP_ACTIVATE.day == day)
df = finance.run_query(q)
df['net'] = df.buy - df.sell
df = df.sort_values(by = ['net'] , axis = 0, ascending = False)
df = df[(df.link_id != 310003 ) & (df.link_id != 310004 )]
total_df=pd.concat((total_df,df))
```
完全可以写的更简明,更高效:
```python
def select_stocks(context):
trade_days = get_trade_days(end_date=context.previous_date, count=g.nday)
q = query(
finance.STK_EL_TOP_ACTIVATE.day,
finance.STK_EL_TOP_ACTIVATE.code,
finance.STK_EL_TOP_ACTIVATE.buy,
finance.STK_EL_TOP_ACTIVATE.sell
).filter(
finance.STK_EL_TOP_ACTIVATE.day.between(trade_days[0], trade_days[-1]),
finance.STK_EL_TOP_ACTIVATE.link_id.in_([310001, 310002]),
)
df = finance.run_query(q)
#
df['net'] = (df.buy - df.sell) / 100000000
```
这样,不用循环交易日,不用对查询结果再过滤,不用DataFrame合并。
另外,`query(finance.STK_EL_TOP_ACTIVATE)`的全字段查询也不是个好习惯,需要哪几个字段,就取那几个字段,返回的查询结果就小,速度会快。
2021-04-10