股指期货MACD日回测

以下是一个使用TALib进行股指期货主力合约日级别回测MACD算法示例:

  1. # 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等
  2. import talib
  3.  
  4.  
  5. # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递
  6. def init(context):
  7. # context内引入全局变量s1,存储目标合约信息
  8. context.s1 = 'IF1606'
  9.  
  10. # 使用MACD需要设置长短均线和macd平均线的参数
  11. context.SHORTPERIOD = 12
  12. context.LONGPERIOD = 26
  13. context.SMOOTHPERIOD = 9
  14. context.OBSERVATION = 50
  15.  
  16. #初始化时订阅合约行情。订阅之后的合约行情会在handle_bar中进行更新
  17. subscribe(context.s1)
  18.  
  19.  
  20. # 你选择的期货数据更新将会触发此段逻辑,例如日线或分钟线更新
  21. def handle_bar(context, bar_dict):
  22. # 开始编写你的主要的算法逻辑
  23. # 获取历史收盘价序列,history_bars函数直接返回ndarray,方便之后的有关指标计算
  24. prices = history_bars(context.s1, context.OBSERVATION, '1d', 'close')
  25.  
  26. # 用Talib计算MACD取值,得到三个时间序列数组,分别为macd,signal 和 hist
  27. macd, signal, hist = talib.MACD(prices, context.SHORTPERIOD,
  28. context.LONGPERIOD, context.SMOOTHPERIOD)
  29.  
  30. # macd 是长短均线的差值,signal是macd的均线,如果短均线从下往上突破长均线,为入场信号,进行买入开仓操作
  31. if macd[-1] - signal[-1] > 0 and macd[-2] - signal[-2] < 0:
  32. sell_qty = context.portfolio.positions[context.s1].sell_quantity
  33. # 先判断当前卖方仓位,如果有,则进行平仓操作
  34. if sell_qty > 0:
  35. buy_close(context.s1, 1)
  36. # 买入开仓
  37. buy_open(context.s1, 1)
  38.  
  39. if macd[-1] - signal[-1] < 0 and macd[-2] - signal[-2] > 0:
  40. buy_qty = context.portfolio.positions[context.s1].buy_quantity
  41. # 先判断当前买方仓位,如果有,则进行平仓操作
  42. if buy_qty > 0:
  43. sell_close(context.s1, 1)
  44. # 卖出开仓
  45. sell_open(context.s1, 1)