```
def initialize(context):
run_daily(period, time="every_bar")
g.stocksnum = 10
g.period = 7
g.days = 0
def stock_filter(stock_list, del_paused, del_st, del_delist, del_hl):
current_data = get_current_data()
if del_paused: # 删除停牌
stock_list = [stock for stock in stock_list if not current_data[stock].paused]
if del_st: # 删除ST
stock_list = [stock for stock in stock_list if not current_data[stock].is_st]
if del_delist: # 删除退市
stock_list = [stock for stock in stock_list if not '退' in current_data[stock].name]
if del_hl: # 删除涨停
stock_list = [stock for stock in stock_list if not current_data[stock].day_open >= current_data[stock].high_limit]
return stock_list
def period(context):
if g.days % g.period == 0:
stocks_pool = get_index_stocks("000001.XSHG") + get_index_stocks("399106.XSHE")
filtered_pool = stock_filter(stocks_pool, True, True, True, True)
qy = query(valuation.code).filter(valuation.code.in_(filtered_pool)).order_by(valuation.market_cap.asc()).limit(g.stocksnum)
long_data = get_fundamentals(qy)
long_list = list(long_data["code"])
for stock in context.portfolio.positions:
cost = context.portfolio.positions[stock].avg_cost
price = context.portfolio.positions[stock].price
ret = price / cost - 1
if stock not in long_list:
order_target(stock, 0)
else:
if ret > 0.5:
order_target(stock, 0)
print("触发止盈")
elif ret < -0.1:
order_target(stock, 0)
print("触发止损")
position_per_stock = context.portfolio.cash / g.stocksnum
for stock in long_list:
order_value(stock, position_per_stock)
g.days += 1
```
2020-12-09