'''像stocksnum那样用全局变量的方式建立period变量
用一个变量记录策略运行天数
用取余运算配合if判断语句判断是否又经过period天
'''
def initialize(context):
run_daily(period, time='every_bar')
# 设定好要交易的股票数量
g.stocksnum = 7
# 设定交易周期
g.period = 13
# 纪录策略进行天数
g.days = 0
def period(context):
# 判断策略进行天数能否被整除余1,这样就算进行了一个周期
if g.days % g.period == 0:
# 找出市值排名最小的前stocksnum只股票
# 获取当天的股票列表
scu = get_all_securities(date=context.current_dt).index.tolist()
# 选出scu内的市值排名最小的前stocksnum只股票
q = query(valuation.code
).filter(
valuation.code.in_(scu)
).order_by(
valuation.market_cap.asc()
).limit(g.stocksnum)
df = get_fundamentals(q)
# 选取股票代码并转换为list
buylist = list(df['code'])
# 对已持有的股票,如果不在表单中,卖出
for stock in context.portfolio.positions:
if stock not in buylist:
order_target(stock, 0) # 将该股票的持仓调整为0
# 买入要买入的股票,买入金额可为可用资金的stocksnum分之一
# 将资金分为stocksnum份
position_per_stk = context.portfolio.cash / g.stocksnum
# 用position_per_stk大小的g.stocksnum份资金去买buylist中的股票
for stock in buylist:
order_value(stock, position_per_stk)
# 策略进行天数+1
g.days += 1
1 thought on “聚宽小市值策略模板”