# 导入函数库
from jqdata import *
# 初始化函数,设定基准等等
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
#定义用于市值筛选的query对象
g.q = query(valuation.code,valuation.market_cap).filter(valuation.market_cap.between(20,30)).order_by(valuation.market_cap.asc())
# 定义持仓数量
g.N = 10
# 每月运行一次
run_monthly(trade, 1)def trade(context):
#筛选初市值在20-30亿之间的股票并按市值升序排序
df = get_fundamentals(g.q)
buylist =list(df['code'])
#过滤停牌股票
buylist = filter_paused_stock(buylist)
#选择其中市值最小的10只
buylist = buylist[:g.N]
#持仓股卖出,如果持仓股在备选股中则不用卖
for security in context.portfolio.positions:
if security not in buylist:
order_target_value(security, 0)
#备选股买入,如果备选股在持仓股中则不用买
buylist=[i for i in buylist if i not in context.portfolio.positions]
if len(buylist)>0:
#每只股资金
cash = context.portfolio.available_cash/len(buylist)
## 买入股票
for security in buylist:
order_value(security, cash)
# 过滤停牌股票
def filter_paused_stock(stock_list):
current_data = get_current_data()
return [stock for stock in stock_list if not current_data[stock].paused]