使用Tushare接口做中证500基差图

tushare id:463640

# 基差
import pandas as pd

import datetime
import time
import numpy as np
import tushare as ts
# 获取今天(现在时间)
today = datetime.datetime.today()
yesterday = today - datetime.timedelta(days=1)
# 昨天
day_yes = 10000 * yesterday.year + 100 * yesterday.month + yesterday.day
# 前年昨天
year_yes2 = 10000 * (yesterday.year-2) + 100 * yesterday.month + yesterday.day
#pro = ts.pro_api('70a8f0ba9e0cf7cbb006b179f321ec7c2866f5e9aae2e59711c7f516')
# 
#df = pro.fut_daily(start_date=str(year_yes2),end_date=str(day_yes),ts_code = 'IC2008.CFE')

# 数据接口//***填Tushare接口token
pro = ts.pro_api('***')

'''
# 新浪财经接口
import requests
import sys
IC_list = ['IC2008.CFE','IC2009.CFE','IC2012.CFE','IC2103.CFE','IC2106.CFE','IC2109.CFE','IC2203.CFE',]

future_code = 'IC2008'
url_str = ('http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesDailyKLine?symbol='
 +future_code)
r = requests.get(url_str)
r_json = r.json()
r_lists = list(r_json)
print('future_code,date,open,high,low,close,vol')


for r_list in r_lists:
    for v in r_list:
        print(v + ',',end='')
    print('\n')
'''

# akshare接口
import akshare as ak

futures_main_sina_hist = ak.futures_main_sina(symbol="IC2203", trade_date="20210929")
print(futures_main_sina_hist)

#返回相差天数
def Caltime(date1,date2):
    date1=time.strptime(date1,"%Y-%m-%d")
    date2=time.strptime(date2,"%Y%m%d")
    date1=datetime.datetime(date1[0],date1[1],date1[2])
    date2=datetime.datetime(date2[0],date2[1],date2[2])

    return (date2-date1).days

# WIND数据接口
from WindPy import w
w.start()
w.isconnected()
IC_list = ['IC2008.CFE','IC2009.CFE','IC2012.CFE','IC2103.CFE','IC2106.CFE','IC2109.CFE','IC2203.CFE',]
df = pd.DataFrame()
for value in IC_list:
    df_tmp = w.wsd(value, "trade_hiscode,close,ltdate_new", "2020-01-01", str(day_yes), 'Days=Alldays;Fill=Previous;TradingCalendar=CFFEX',usedf=True)[1]
    df_tmp.columns = [value[:6],value[:6]+'收盘价',value[:6]+'最后交易日']
    df_tmp[value[:6]+'date'] = '20'+value[2:6]+'20'
    df =pd.concat([df,df_tmp],axis=1)
df_zz500 = w.wsd("000905.SH", "trade_hiscode,close", "2020-01-01", str(day_yes), "Days=Alldays;Fill=Previous",usedf=True)[1]
df_zz500.columns = ["000905.SH",'中证500收盘价']
df = pd.concat([df_zz500,df],axis=1)
df = df.reset_index()
df[['index']] = df[['index']].astype(str)
for value in IC_list:
    df[value[:6]+'时间差'] = np.nan
    for i in range(df.shape[0]):
        df[value[:6]+'时间差'].iloc[i] = Caltime(df['index'].iloc[i],df[value[:6]+'date'].iloc[i])

for value in IC_list:
    df[value[:6]+'基差']=(df[value[:6]+'收盘价']/df['中证500收盘价']-1)*365/df[value[:6]+'时间差']

data = df.iloc[:,-len(IC_list):]
data = pd.concat([df['index'],data],axis=1)
data = data.set_index(['index'])                
data = data[data.columns[::-1]]
data = data.dropna(axis=0,how='all') 
data['基差序列'] = np.nan
for indexs in data.index:
    data['基差序列'].loc[indexs] = data.loc[indexs][np.isfinite(data.loc[indexs])][0]
data['基差序列'] = data['基差序列'].apply(lambda x: round(float(x)*100,2))


# 基差图
import pyecharts.options as opts
from pyecharts.charts import Line
l2 = (
    Line(init_opts=opts.InitOpts(width="1500px", height="360px"))
    .add_xaxis(xaxis_data=data.index.tolist())
    .add_yaxis(
        series_name="百分比%",
        y_axis=data['基差序列'].tolist(),
        label_opts=opts.LabelOpts(is_show=False),
        linestyle_opts=opts.LineStyleOpts(width=1.5),
        is_smooth=True
    ) 
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="基差图",
            pos_left="center",
            pos_top="top",
        ),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        legend_opts=opts.LegendOpts(is_show=False),
        datazoom_opts=[
            opts.DataZoomOpts(range_start=0, range_end=100),
            opts.DataZoomOpts(type_="inside", range_start=0, range_end=100),
        ],
        xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False,position="top"),
        yaxis_opts=opts.AxisOpts(name="百分比%", type_="value",name_location = "start"),
    )
    #.render("基差图.html")
)

# (
#     Grid(init_opts=opts.InitOpts(width="1520px", height="700px"))
#     .add(chart=l1, grid_opts=opts.GridOpts(pos_left=50, pos_right=50, height="35%"))
#     .add(chart=l2,grid_opts=opts.GridOpts(pos_left=50, pos_right=50, pos_top="55%", height="35%"),
#     )
#     .render("监控图.html")
# )
page = Page(layout=Page.SimplePageLayout)
page.add(l1,l2)
page.render("监控图.html")
import webbrowser
webbrowser.open_new_tab('监控图.html')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值