量化交易策略三:银行股轮动策略 Dear 丶 2021-09-28 06:42 482阅读 0赞 ### 量化交易策略三:银行股轮动策略 ### * * 主要思想方法 * 代码 ## 主要思想方法 ## 始终持有沪深300银行指数成分股中市净率最低的股份制银行,每周检查一次, 如果发现有新的股份制银行市净率低于原有的股票,则予以换仓。 ## 代码 ## ''' 始终持有沪深300银行指数成分股中市净率最低的股份制银行,每周检查一次, 如果发现有新的股份制银行市净率低于原有的股票,则予以换仓。 ''' ## 初始化函数,设定要操作的股票、基准等等 def initialize(context): # 设定沪深300银行指数作为基准 set_benchmark('399951.XSHE') # True为开启动态复权模式,使用真实价格交易 set_option('use_real_price', True) # 设定成交量比例 set_option('order_volume_ratio', 1) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(open_tax=0, close_tax=0.001, \ open_commission=0.0003, close_commission=0.0003,\ close_today_commission=0, min_commission=5), type='stock') # 运行函数, 按周运行,在每周第一个交易日运行 run_weekly(chenk_stocks, weekday=1, time='before_open') #选股 run_weekly(trade, weekday=1, time='open') #交易 ## 得到沪深300银行指数成分股,找到市净率最低的股票 def chenk_stocks(context): # 得到沪深300银行指数成分股 g.stocks = get_index_stocks('399951.XSHE') # 查询股票的市净率,并按照市净率升序排序 if len(g.stocks) > 0: g.df = get_fundamentals( query( valuation.code, valuation.pb_ratio ).filter( valuation.code.in_(g.stocks) ).order_by( valuation.pb_ratio.asc() ) ) # 找出最低市净率的一只股票 g.code = g.df['code'][0] ## 交易 def trade(context): if len(g.stocks) > 0: code = g.code # 如持仓股票不是最低市净率的股票,则卖出 for stock in context.portfolio.positions.keys(): if stock != code: order_target(stock,0) # 持仓该股票 if len(context.portfolio.positions) > 0: return else: order_value(code, context.portfolio.cash)
还没有评论,来说两句吧...