Joinquant 指数10大持仓等比买入
Joinquant 指数10大持仓等比买入
1源码
import randomdef initialize(context): set_option('use_real_price', True) g.index_code = '399324.XSHE' set_benchmark(g.index_code) log.set_level('order', 'error') run_daily(check_stocks, 'open') #选股 # run_daily(check_stocks, 'open') #交易def process_initialize(context): #持仓股数 g.choicenum = 10 g.stocks = [] #持仓时间 g.check_stocks_refresh_rate = 100 #是否随机选股 g.is_random = False # 选股频率计数器 g.check_stocks_days = 0 #是否再平衡 g.is_rebalance = True ## 股票筛选def check_stocks(context): if g.check_stocks_days%g.check_stocks_refresh_rate != 0: # 计数器加一 g.check_stocks_days += 1 return # all_index_stocks all_index_stocks = get_index_stocks(g.index_code) df = get_fundamentals(query( valuation ).filter( # 这里不能使用 in 操作, 要使用in_()函数 valuation.code.in_(all_index_stocks) ), date=context.current_dt.strftime("%Y-%m-%d")) df = df.sort_values('market_cap', ascending=False) # stock pool g.stocks = df[0:g.choicenum]['code'].values log.info(g.stocks) if g.is_random is True: g.stocks = random.sample(all_index_stocks, g.choicenum) # 计数器归一 g.check_stocks_days = 1 trade_stocks(context) return # def before_trading_start(context): def handle_data(context, data): pass def trade_stocks(context): # clear non-choice for stock in context.portfolio.positions.keys(): if not stock in g.stocks: order_target(stock, 0); # poistion management position = context.portfolio.total_value / g.choicenum for stock in g.stocks: log.info(stock) order_target_value(stock, position) # buy #因为停牌原因,有些会没买进,所以把剩余的现金追加买入可以买入的 target_buy_value = context.portfolio.available_cash / len(context.portfolio.positions) for stock in context.portfolio.positions.keys(): order_value(stock, target_buy_value) #end
2.回测结果
Joinquant回测跟Quantopian差不多。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~