原文策略源码如下:
市值轮动策略
def initialize(context):
“”“初始化函数”""
# 持有最小市值股票数
g.stocksnum = 10
# 轮动频率
g.period = 10
# 记录策略进行到第几天
g.days = 0
# 周期循环daily
run_daily(daily,time='every_bar')
def daily(context):
“”“交易函数”""
# 每运行一天加一
g.days += 1
# 判断策略进行天数是否能被轮动频率整除余1
if g.days % g.period != 1:
return
# 获取当前时间
date=context.current_dt.strftime("%Y-%m-%d")
# 获取上证指数和深证综指的成分股代码并连接,即为全A股市场所有股票
# 这里股票池不放在全局中是因为总有新发型股票出现,所以要动态获取股票池
scu = get_index_stocks('000001.XSHG') + get_index_stocks('399106.XSHE')
# 选出在scu内的股票的股票代码,并按照当前时间市值从小到大排序
df = get_fundamentals(query(
valuation.code,
valuation.market_cap
).filter(
valuation.code.in_(scu)
).order_by(
valuation.market_cap.asc()
), date=date
)
# 取出前g.stocksnum名的股票代码,并转成list类型,buyli