可能有人对“套利”这个词很陌生,但“套利”在现实生活中却很常见。比如:便利店老板从批发市场以 0.5 元买入一瓶矿泉水,然后在店里以 1 元的价格出售,最后赚取 0.5 元的差价。这个过程其实就类似套利。金融市场上的套利跟这个道理差不多,只不过套利的形式有多种多样。
'''backtest start: 2017-01-01 00:00:00 end: 2020-06-01 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] ''' # 全局变量 # 期现图表 cfgA = { "extension": { "layout": 'single', "col": 6, "height": "500px", }, "title": { "text": "期现图表" }, "xAxis": { "type": "datetime" }, "series": [{ "name": "期货价格", "data": [], }, { "name": "现货价格", "data": [], } ] } # 基差图表 cfgB = { "extension": { "layout": 'single', "col": 6, "height": "500px", }, "title": { "text": "基差图表" }, "xAxis": { "type": "datetime" }, "series": [{ "name": "基差价格", "data": [], }] } last_spot_price = 0 # 保存最后一个有效的现货价格 last_basis_price = 0 # 保存最后一个有效的基差价格 chart = Chart([cfgA, cfgB]) # 创建一个图表对象 def onTick(): global last_basis_price, last_spot_price # 导入全局变量 exchange.SetContractType("i888") # 订阅期货品种 futures = _C(exchange.GetRecords)[-1] # 获取最新K线数据 futures_ts = futures.Time # 获取最新K线期货时间戳 futures_price = futures.Close # 获取最新K线收盘价 Log('期货价格:', futures_ts, futures_price) spot = exchange.GetData("SPOTPRICE") # 获取现货数据 spot_ts = spot.Time # 获取现货时间戳 if '铁矿石' in spot.Data: spot_price = spot.Data['铁矿石'] last_spot_price = spot_price else: spot_price = last_spot_price Log('现货价格:', spot_ts, spot_price) basis = exchange.GetData("BASIS") # 获取基差数据 basis_ts = basis.Time # 获取基差时间戳 if '铁矿石' in basis.Data: basis_price = basis.Data['铁矿石'] last_basis_price = basis_price else: basis_price = last_basis_price Log('基差价格:', basis_ts, basis_price) chart.add(0, [futures_ts, futures_price]) # 绘制图表 chart.add(1, [spot_ts, spot_price]) # 绘制图表 chart.add(2, [basis_ts, basis_price]) # 绘制图表 chart.update([cfgA, cfgB]) # 更新图表 Log('---------') # 策略入口 def main(): LogReset() # 运行前先清空之前的Log日志信息 chart.reset() # 运行前先清空之前的图表信息 while True: # 进入循环模式 onTick() # 执行策略主函数 Sleep(1000 * 60 * 60 * 24) # 策略休眠一天