郑煤(HC)

郑煤量化跟踪框架

数据一览

In [1]:
# 导入所需模块
import sys
sys.path.append("..")
from baseset import *
from getdata import getdata
import hcplot as hc
import pandas as pd

# 获取数据
fpath ='./data/w_datadic_zc.xlsx'
df = getdata(fpath,startdate='2005-01-01')
# 加工数据
df['三港库船比']=round((df['秦皇岛库存']+(df['京唐港库存']/10000)+df['曹妃甸库存'])/
                  (df['秦皇岛锚地船舶数']+df['京唐港锚地船舶数']+df['曹妃甸锚地船舶数']),2)
df['期现价差'] = df['郑煤活跃合约收盘']-df['秦皇岛Q5500山西产平仓']
#显示数据
df0 = (df.tail(10)).T.fillna('')
df0.columns = (df0.columns.map(lambda t: t.strftime('%Y-%m-%d')))
df0
Welcome to use Wind Quant API for Python (WindPy)!

COPYRIGHT (C) 2017 WIND INFORMATION CO., LTD. ALL RIGHTS RESERVED.
IN NO CIRCUMSTANCE SHALL WIND BE RESPONSIBLE FOR ANY DAMAGES OR LOSSES CAUSED BY USING WIND QUANT API FOR Python.
Out[1]:
2018-09-17 2018-09-18 2018-09-19 2018-09-20 2018-09-21 2018-09-22 2018-09-23 2018-09-24 2018-09-25 2018-09-26
Wind商品指数 1143.12 1145.41 1150.76 1147.42 1154.06 1141.49 1144.58
Wind郑煤指数 625.20 626.69 631.44 638.27 634.26 630.80 632.47
Wind焦煤指数 1288.66 1294.34 1302.80 1274.24 1283.61 1274.67 1282.82
郑煤活跃合约收盘 625.40 627.20 632.20 640.00 636.00 632.00 634.00
秦皇岛Q5500山西产平仓 580.00 580.00 580.00 580.00 580.00 580.00 580.00
秦皇岛Q5500山西产末煤平仓 627.00 624.00 625.00 626.00 629.00 631.00 633.00
广州港库提价印尼Q5500 730.00 730.00 730.00 730.00 730.00 730.00 730.00
广州港库提价山西优混Q5500 735.00 735.00 735.00 735.00 735.00 735.00 735.00
秦皇岛锚地船舶数 86.00 96.00 101.00 100.00 94.00 87.00 82.00 70.00 67.00 63.00
京唐港锚地船舶数 12.00 13.00 15.00 15.00 21.00 25.00 25.00 21.00 19.00 17.00
曹妃甸锚地船舶数 23.00 20.00 20.00 22.00 21.00 26.00 22.00 16.00 19.00 31.00
秦皇岛库存 707.50 721.00 769.00 780.00 786.50 762.50 740.00 724.50 709.00 685.00
京唐港库存 1780000.00 1800000.00 1800000.00 1780000.00 1820000.00 1830000.00 1900000.00 1930000.00 2030000.00 2020000.00
曹妃甸库存 475.90 481.90 473.40 481.00 492.00 508.30 508.90 506.60
六大电厂日均耗煤 56.85 58.59 61.27 64.44 65.73 66.84 66.48 65.95 63.50 54.24
六大电厂电煤库存 1517.49 1498.67 1481.25 1486.78 1483.42 1463.87 1468.38 1463.63 1456.39 1453.72
六大电厂库存可用天数 26.69 25.58 24.18 23.07 22.57 21.90 22.09 22.19 22.94 26.80
BDI 1357.00 1356.00 1373.00 1396.00 1413.00 1434.00 1450.00 1503.00
CBCFI煤炭综合指数 1027.44 1032.74 1043.31 1052.00 1057.22 1058.36 1050.45
煤炭运价:秦皇岛-广州 51.00 51.10 51.70 52.30 52.80 52.90 52.80
煤炭运价:秦皇岛-福州 48.60 49.10 49.20 49.40 49.50 49.80 49.50
煤炭运价:秦皇岛-宁波 57.80 58.10 58.20 58.50 58.60 58.90 58.70
煤炭运价:秦皇岛-上海 39.80 40.10 40.60 41.00 41.20 41.10 40.70
三峡入库水流量(m³/s) 20200.00 21800.00 21800.00 24000.00 26000.00 23700.00 21000.00 19000.00 21700.00 26500.00
郑煤1月 625.40 627.20 632.20 640.00 636.00 632.00 634.00
郑煤5月 596.80 596.20 601.20 604.80 602.80 599.80 601.20
郑煤9月 587.80 586.60 589.20 592.80 592.40 589.20 588.80
原煤产量
动力煤产量
煤及褐煤进口
动力煤进口
褐煤进口
火电产量
水电产量
发电量
中国神华 18.13 18.58 18.92 18.68 19.87 19.60 19.90
陕西煤业 8.00 8.28 8.42 8.31 8.80 8.73 8.69
露天煤业 8.07 8.26 8.35 8.33 8.54 8.55 8.56
大同煤业 4.68 4.80 4.83 4.86 4.95 4.91 4.91
兖州煤业 10.37 10.69 10.87 10.89 11.42 11.22 11.27
大秦铁路 7.98 8.25 8.18 8.08 8.05 8.05 8.10
三港库船比 11.25 10.72 10.46 10.50 11.02 13.33 13.53 12.55
期现价差 45.40 47.20 52.20 60.00 56.00 52.00 54.00

多空信号

In [2]:
# 量化评分
q_df = pd.DataFrame()    
q_df['郑煤指数'] = df['Wind郑煤指数']
q_df['库船比'] = df['三港库船比']
q_df['电厂库用天'] = df['六大电厂库存可用天数']
# q_df['海运费'] = df['BDI']
q_df['海运费'] = df['CBCFI煤炭综合指数']
q_df['期现差'] = df['期现价差']

q_df = q_df.dropna()

# q_df['库船比_MA'] = pd.rolling_mean(q_df['库船比'], 5)
q_df['库船比_MA'] = q_df['库船比'].rolling(window=5).mean()
q_df['电厂库用天_MA'] = q_df['电厂库用天'].rolling(window=5).mean()
q_df['海运费_MA'] = q_df['海运费'].rolling(window=20).mean()
q_df['郑煤指数_MA'] = q_df['郑煤指数'].rolling(window=10).mean()

q_df = q_df.dropna()
# 设置各指标权重
q_df['库船比_得分'] = 0
q_df.loc[q_df.库船比_MA<10,'库船比_得分'] = 0.3
q_df.loc[q_df.库船比_MA>20,'库船比_得分'] = -0.3

q_df['电厂库用天_得分'] = 0
q_df.loc[q_df.电厂库用天_MA<18,'电厂库用天_得分'] = 0.2
q_df.loc[q_df.电厂库用天_MA>22,'电厂库用天_得分'] = -0.2

q_df['海运费_得分'] = 0
q_df.loc[q_df.海运费>q_df.海运费_MA,'海运费_得分'] = 0.2
q_df.loc[q_df.海运费<q_df.海运费_MA,'海运费_得分'] = -0.2

q_df['期现差_得分'] = 0
q_df.loc[q_df.期现差<-80,'期现差_得分'] = 0.15
q_df.loc[q_df.期现差>50,'期现差_得分'] = -0.15

q_df['均线_得分'] = 0
q_df.loc[q_df.郑煤指数>q_df.郑煤指数_MA,'均线_得分'] = 0.2
q_df.loc[q_df.郑煤指数<q_df.郑煤指数_MA,'均线_得分'] = -0.2

q_df['多空信号'] = q_df['库船比_得分'] + q_df['电厂库用天_得分'] + q_df['海运费_得分'] + q_df['期现差_得分'] + q_df['均线_得分']
q_df.iloc[:,[9,10,11,12,13,14]].tail()
hc.y2(q_df[['郑煤指数','多空信号']],y2list=[1],ldic={1:'column'})
# q_df.index = (q_df.index.map(lambda t: t.strftime('%Y-%m-%d')))
# q_df.to_excel("./data/q_zc.xlsx")  # 输出到excel文件
Out[2]:
库船比_得分 电厂库用天_得分 海运费_得分 期现差_得分 均线_得分 多空信号
2018-09-18 0.00 -0.20 0.20 0.00 0.20 0.20
2018-09-19 0.00 -0.20 0.20 -0.15 0.20 0.05
2018-09-20 0.00 -0.20 0.20 -0.15 0.20 0.05
2018-09-25 0.00 -0.20 0.20 -0.15 0.20 0.05
2018-09-26 0.00 -0.20 0.20 -0.15 0.20 0.05
Out[2]:

库船比

In [3]:
pldic ={1:[{
                'value': 20,
                'width': 2,
                'color': 'orange',
                'dashStyle': 'dash',
                'label': {'text': '牛熊线','align': 'center'}}]}
hc.y22(df[['Wind郑煤指数','三港库船比']],mypldic=pldic,addtype='corr')
Out[3]:

三港库船比: 根据历史数据来看,三港库船比和郑煤价格呈较为显著的负相关,且指标20是牛熊线。当位于20以下,行情大概率处于牛市当中。

电厂库存

In [4]:
pldic ={1:[
    {
                'value': 15,
                'width': 2,
                'color': 'orange',
                'dashStyle': 'dash',
                'label': {'text': '警戒线','align': 'center'}},
]}
hc.y22(df[['Wind郑煤指数','六大电厂库存可用天数']],mypldic=pldic,addtype='corr')
Out[4]:

六大电厂库存可用天数: 衡量下水煤消费大户的电厂煤炭供需状况。一般来说20天以下是偏紧状态,15以下则是紧张态势。

煤炭运价

综合指数

In [5]:
hc.y2(df[['Wind郑煤指数','CBCFI煤炭综合指数','BDI']],y2list=[0])
Out[5]:

煤炭综合运价指数和BDI 反映下水煤运输价格趋势。一般走势上会领先煤炭价格0到2个月。

海运价

In [6]:
hc.y2(df[['Wind郑煤指数','煤炭运价:秦皇岛-广州','煤炭运价:秦皇岛-福州','煤炭运价:秦皇岛-宁波','煤炭运价:秦皇岛-上海']],y2list=[0])
Out[6]: