Loading ...

基于发明者量化基本面数据的商品期现套利图表

Author: Hukybo, Date: 2020-06-04 08:59:00
Tags: CTP

一、摘要

可能有人对“套利”这个词很陌生,但“套利”在现实生活中却很常见。比如:便利店老板从批发市场以 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)  # 策略休眠一天


Related

More