量化交易策略三:银行股轮动策略

0
回复
4629
查看
[复制链接]

209

主题

26

回帖

1424

积分

超级版主

积分
1424
来源: 2019-7-3 21:59:00 显示全部楼层 |阅读模式
主要思想方法

始终持有沪深300银行指数成分股中市净率最低的股份制银行,每周检查一次,
如果发现有新的股份制银行市净率低于原有的股票,则予以换仓。


代码如下:

  1. '''
  2. 始终持有沪深300银行指数成分股中市净率最低的股份制银行,每周检查一次,
  3. 如果发现有新的股份制银行市净率低于原有的股票,则予以换仓。
  4. '''

  5. ## 初始化函数,设定要操作的股票、基准等等
  6. def initialize(context):
  7.     # 设定沪深300银行指数作为基准
  8.     set_benchmark('399951.XSHE')
  9.     # True为开启动态复权模式,使用真实价格交易
  10.     set_option('use_real_price', True)
  11.     # 设定成交量比例
  12.     set_option('order_volume_ratio', 1)
  13.     # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
  14.     set_order_cost(OrderCost(open_tax=0, close_tax=0.001, \
  15.                              open_commission=0.0003, close_commission=0.0003,\
  16.                              close_today_commission=0, min_commission=5), type='stock')
  17.     # 运行函数, 按周运行,在每周第一个交易日运行
  18.     run_weekly(chenk_stocks, weekday=1, time='before_open') #选股
  19.     run_weekly(trade, weekday=1, time='open') #交易

  20. ## 得到沪深300银行指数成分股,找到市净率最低的股票
  21. def chenk_stocks(context):
  22.     # 得到沪深300银行指数成分股
  23.     g.stocks = get_index_stocks('399951.XSHE')

  24.     # 查询股票的市净率,并按照市净率升序排序
  25.     if len(g.stocks) > 0:
  26.         g.df = get_fundamentals(
  27.             query(
  28.                 valuation.code,
  29.                 valuation.pb_ratio
  30.             ).filter(
  31.                 valuation.code.in_(g.stocks)
  32.             ).order_by(
  33.                 valuation.pb_ratio.asc()
  34.             )
  35.         )

  36.         # 找出最低市净率的一只股票
  37.         g.code = g.df['code'][0]

  38. ## 交易
  39. def trade(context):
  40.     if len(g.stocks) > 0:
  41.         code = g.code
  42.         # 如持仓股票不是最低市净率的股票,则卖出
  43.         for stock in context.portfolio.positions.keys():
  44.             if stock != code:
  45.                 order_target(stock,0)
  46.         
  47.         # 持仓该股票
  48.         if len(context.portfolio.positions) > 0:
  49.             return
  50.         else:
  51.             order_value(code, context.portfolio.cash)

复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册
关注微信