使用fbprofhet对CF期货价格的预测
Facebook在2017年开源了一个时间序列预测的算法,叫做fbprophet,其功能包括: 1、为预测设置上下限; 2、设置趋势断点; 3、处理季节性和节假日效应; 4、允许乘法形式的季节性; 5、区间预测; 6、处理异常值; 7、处理非日度数据; 8、模型检测。 可以用这个算法,来为CF的日度数据进行预测,做出一个基础性的预测。初步探索如下: 我们推荐使用conda安装,由于fbprophet需要调用pyStan这个开源工具,因此安装命令为下述两条: conda install -c conda-forge pystan conda install -c conda-forge fbprophet 安装好之后:
导入相应的三方库
from jqdatasdk import * import pandas as pd import matplotlib.pyplot as plt from fbprophet import Prophet 使用JQDATA获取CF期货主力合约期货价格,可以获取主力合约期货价格,具体代码参考: https://www.joinquant.com/help/api/help#JQData: auth('账号','密码')#输入jqdata的账号和密码 df = get_price('CF9999.XZCE', start_date='2010-01-01', end_date='2020-12-31', frequency='daily')
期货概况
fbprophet算法的大概步骤是,先生成一个Prophet实例,然后调用fit方法进行拟合,调用predict方法进行拟合。代码如下: m = Prophet() m.fit(df) future_time = m.make_future_dataframe(periods=365) forecast = m.predict(future_time) fig1 = m.plot(forecast) fig2 = m.plot_components(forecast) 运行fbprophet后对以下代码进行回测: import matplotlib.pyplot as plt import pandas as pd from fbprophet import Prophet df.rename(columns={'日期':'ds','今收盘':'y'},inplace=True) df_price=df[['ds','y']] m=Prophet() m.fit(df_price) m.add_country_holidays(country_name='CN') future_time = m.make_future_dataframe(freq='B',periods=365) forecast = m.predict(future_time) m.plot(forecast) m.plot_components(forecast) plt.show()
获得最终的运行结果见附件:
从消费季节性上来看,俗话说金三银四,金九银十,这两个消费旺季在fpprophet中还是十分明显的,fb将趋势的价格按照趋势,周期性,随机性进行拟合得到最终的预测区间,对于短期内的趋势预测准确性尚可。 本文是针对主力合约价格进行预测拟合,比较粗糙,后续还会继续改进,考虑节假日,季节性等进行调整。