Golden Cross算法示例

以下是一个我们使用TALib编写的golden cross算法的示例,使用了simple moving average方法:

  1. import talib
  2.  
  3.  
  4. # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
  5. def init(context):
  6. context.s1 = "000001.XSHE"
  7.  
  8. # 设置这个策略当中会用到的参数,在策略中可以随时调用,这个策略使用长短均线,我们在这里设定长线和短线的区间,在调试寻找最佳区间的时候只需要在这里进行数值改动
  9. context.SHORTPERIOD = 20
  10. context.LONGPERIOD = 120
  11.  
  12.  
  13. # 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
  14. def handle_bar(context, bar_dict):
  15. # 开始编写你的主要的算法逻辑
  16.  
  17. # bar_dict[order_book_id] 可以拿到某个证券的bar信息
  18. # context.portfolio 可以拿到现在的投资组合状态信息
  19.  
  20. # 使用order_shares(id_or_ins, amount)方法进行落单
  21.  
  22. # TODO: 开始编写你的算法吧!
  23.  
  24. # 因为策略需要用到均线,所以需要读取历史数据
  25. prices = history_bars(context.s1, context.LONGPERIOD+1, '1d', 'close')
  26.  
  27. # 使用talib计算长短两根均线,均线以array的格式表达
  28. short_avg = talib.SMA(prices, context.SHORTPERIOD)
  29. long_avg = talib.SMA(prices, context.LONGPERIOD)
  30.  
  31. plot("short avg", short_avg[-1])
  32. plot("long avg", long_avg[-1])
  33.  
  34. # 计算现在portfolio中股票的仓位
  35. cur_position = context.portfolio.positions[context.s1].quantity
  36. # 计算现在portfolio中的现金可以购买多少股票
  37. shares = context.portfolio.cash/bar_dict[context.s1].close
  38.  
  39. # 如果短均线从上往下跌破长均线,也就是在目前的bar短线平均值低于长线平均值,而上一个bar的短线平均值高于长线平均值
  40. if short_avg[-1] - long_avg[-1] < 0 and short_avg[-2] - long_avg[-2] > 0 and cur_position > 0:
  41. # 进行清仓
  42. order_target_value(context.s1, 0)
  43.  
  44. # 如果短均线从下往上突破长均线,为入场信号
  45. if short_avg[-1] - long_avg[-1] > 0 and short_avg[-2] - long_avg[-2] < 0:
  46. # 满仓入股
  47. order_shares(context.s1, shares)