未分类

聚宽小市值策略模板

'''像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 “聚宽小市值策略模板”

发表回复