2019-04-17

NSLog(@"hello world");????????

# -*- coding: utf-8 -*-

import numpy as np

import pandas as pd

from matplotlib import pylab as plt

import math

group1 = ['300460', '002619', '603809','000426','002600','000008','002217','300652','600505','002078']

group2 =['603533','603928','600693','603811','300613','300621','000988','600839','300502','000933','600685','002907','002922',

? ? ? ? '600284','601998','000505','600726','000591','002798','601127']

group3 = ['300697', '300035', '603322','601229','002681','002121','600615','600367','002695','002301','300130','603920','300325',

? ? ? ? ? '300468','002061','002897','002014','000628','300034','002023','002199','000882','000401','002598','300558','600691',

? ? ? ? ? '300392','601901','300353','002077']

# IF_IH_IC = ['IF','IH','IC']? # 三大期貨指數(shù)

# IF_IH = ['IF','IH']

# IF_IC = ['IF','IC']

# IH_IC = ['IH','IC']

IF = 'IF'

IH = 'IH'

IC = 'IC'


# 定義函數(shù):得到投資組合x(chóng)從時(shí)間start到時(shí)間end的日收益率序列(x:group? start:20190101, end:20190401)

def get_returndaily(x,start,end):

#:step1:先用交易日日歷得到從時(shí)間start到時(shí)間end的交易日日期

? ? from CAL.PyCAL import *

? ? data=DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=str(start),endDate=str(end),field=['calendarDate','isOpen'])? ? ? ? ? ? ? ? ? ?

? ? # DataAPI.TradeCalGet即交易所交易日歷函數(shù)

? ? data = data[data['isOpen'] == 1]

? ? date= map(lambda x: x[0:4]+x[5:7]+x[8:10], data['calendarDate'].values.tolist())

? ? # 從時(shí)間start到時(shí)間end的每個(gè)交易日日期蝇刀,得到后存為列表date

# step2:調(diào)用投資組合x(chóng)每只股票每個(gè)交易日的市值以及收盤(pán)價(jià)

? ? returndaily=np.zeros(len(date)-1)

? ? for i in range(len(date)-1):? ? # 即 i=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11...]為了從date列表里面依次定位取第幾個(gè)日子

? ? ? ? inf1=DataAPI.MktEqudAdjGet(tradeDate=date[i],ticker=x,field=u"ticker,closePrice").set_index('ticker')? # 前一個(gè)交易日的收盤(pán)價(jià)

? ? ? ? inf2=DataAPI.MktEqudAdjGet(tradeDate=date[i+1],ticker=x,field=u"ticker,marketValue,closePrice").set_index('ticker')? # 當(dāng)前交易日的收盤(pán)價(jià)和市值

? ? ? ? # 將以上兩個(gè)表橫向合并成一張有股票代碼惧财、市值甫何、上個(gè)交易日收盤(pán)價(jià)和當(dāng)前交易日收盤(pán)價(jià)組成的表Return

? ? ? ? Return=pd.concat([inf2,inf1],axis=1)

? ? ? ? # print date[i+1]

? ? ? ? # print Return


? ? # step3:計(jì)算每只股票收益率和市值加權(quán)的權(quán)重以及兩者的乘積

? ? ? ? # 每只股票權(quán)重不等

? ? ? ? """

? ? ? ? Return.columns=['Weight','Return','WReturn']? # 改下表的列名稱(chēng)(就是第一行的字段)浅浮,下面分別計(jì)算各列數(shù)據(jù)

? ? ? ? Return['Weight']=Return['Weight']/Return['Weight'].sum() # 按市值在該組總市值占比分配權(quán)重

? ? ? ? Return['Return']=Return['Return']/Return['WReturn']-1? ? # 即定義出三者邏輯運(yùn)算關(guān)系

? ? ? ? Return['WReturn']=Return['Weight']*Return['Return']? ? ? # 同上陷嘴,這個(gè)WReturn即我們需要的個(gè)股日收益率表

? ? ? ? returndaily[i]=Return['WReturn'].sum()? ? ? ? ? ? ? ? ? # 按日依次匯總得出組合的日收益率表returndaily

? ? ? ? #? ? Return['Return']=Return['Return']/Return['Return']-1? ? # 即定義出三者邏輯運(yùn)算關(guān)系? ? ? ?

? ? ? ? """

? ? ? ? # 每只股票等權(quán)重

? ? ? ? Return.columns=['Weight','Return','WReturn']

? ? ? ? Return['Weight'] = 1.0

? ? ? ? Return['Return']=Return['Return']/Return['WReturn']-1? ? # 即定義出三者邏輯運(yùn)算關(guān)系

? ? ? ? Return['WReturn']=Return['Weight']*Return['Return']? ? ? # 同上罕邀,這個(gè)WReturn即我們需要的個(gè)股日收益率表

? ? ? ? returndaily[i]=Return['WReturn'].sum()? ? ? ?

? ? return returndaily

# 定義函數(shù):得到期貨指數(shù)y從時(shí)間start到時(shí)間end的日收益率序列(y:IF,IH,IC? start:20190101, end:20190401)

def get_returnfutures_daily(y,start,end):

# step1:先用交易日日歷得到從時(shí)間start到時(shí)間end的交易日日期


? ? from CAL.PyCAL import *

? ? data=DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=str(start),endDate=str(end),field=['calendarDate','isOpen'])? ? ? ? ? ? ? ? ? ?

? ? data = data[data['isOpen'] == 1]

? ? date= map(lambda x: x[0:4]+x[5:7]+x[8:10], data['calendarDate'].values.tolist())

? ? # step2:調(diào)用指數(shù)y收盤(pán)價(jià)用來(lái)計(jì)算收益率

? ? returndaily=np.zeros(len(date)-1)

? ? for i in range(len(date)-1):? # 即 i=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11...]為了從date列表里面依次定位取第幾個(gè)日子

? ? ? ? # inf1= DataAPI.MktFutdGet(tradeDate=date[i],ticker=y,field=u"ticker,closePrice",pandas="1").set_index('ticker')? ?

? ? ? ? # inf2= DataAPI.MktFutdGet(tradeDate=date[i+1],ticker=y,field=u"ticker,openInt,closePrice",pandas="1").set_index('ticker')? # 這兩個(gè)返回空值玄呛,有時(shí)間再研究


? ? ? ? inf1 = DataAPI.MktMFutdGet(tradeDate=date[i],mainCon=u"1",contractMark=u"",contractObject=y,field=u"ticker,closePrice",pandas="1").set_index('ticker')

? ? ? ? inf2 = DataAPI.MktMFutdGet(tradeDate=date[i+1],mainCon=u"1",contractMark=u"",contractObject=y,field=u"ticker,openInt,closePrice",pandas="1").set_index('ticker')

? ? ? ? Return=pd.concat([inf2,inf1],axis=1)

? ? ? ? # step3:計(jì)算每種期貨指數(shù)收益率和持倉(cāng)量加權(quán)的權(quán)重以及兩者的乘積

? ? ? ? # 如果對(duì)沖指數(shù)包含多個(gè)期貨指數(shù)

? ? ? ? if type(y) is list:?

? ? ? ? ? ? Return.columns=['Weight','Return','WReturn'] # 改下表的列名稱(chēng)(就是第一行的字段)诬留,下面分別計(jì)算各列數(shù)據(jù)

? ? ? ? ? ? Return['Weight']=Return['Weight']/Return['Weight'].sum() # 按市值在該組總市值占比分配權(quán)重

? ? ? ? ? ? Return['Return']=Return['Return']/Return['WReturn']-1? ? # 即定義出三者邏輯運(yùn)算關(guān)系

? ? ? ? ? ? Return['WReturn']=Return['Weight']*Return['Return']? ? ? # 同上揩环,這個(gè)WReturn即我們需要的個(gè)股日收益率表

? ? ? ? ? ? returndaily[i]=Return['WReturn'].sum()? ? ? ? ? ? ? ? ? # 按日依次匯總得出組合的日收益率表returndaily

? ? ? ? # 如果只用一種期貨指數(shù)對(duì)沖

? ? ? ? else:

? ? ? ? ? ? Return.columns = ['Weight','Return','WReturn']

? ? ? ? ? ? # Return['Weight'] = 1.0/(len(date)-1)? # 等權(quán)

? ? ? ? ? ? Return['Return'] = Return['Return']/Return['WReturn']-1

? ? ? ? ? ? # Return['WReturn'] = Return['Weight']*Return['Return']

? ? ? ? ? ? returndaily[i] = Return['Return'].sum()

? ? return returndaily? ?

# 定義函數(shù):填充ndarray中的nan值

def fill_ndarray(t1):

? ? nan_num = np.count_nonzero(t1==t1)

? ? if nan_num != 0: # 不為0,說(shuō)明當(dāng)前這一列中有nan

? ? ? ? temp_not_nan=t1[t1==t1] # 當(dāng)前不為nan的array

? ? ? ? # 選中當(dāng)前為nan的位置,把值賦值為該列除nan以外的數(shù)的均值

? ? ? ? t1[np.isnan(t1)] = temp_not_nan.mean()

? ? return t1

# 股票組合收益率? ? ? ?

group1_ret = get_returndaily(group1,20190101,20190401)

group2_ret = get_returndaily(group2,20190101,20190401)

group3_ret = get_returndaily(group3,20190101,20190401)

print group3_ret

print "*"*100

# 各個(gè)指數(shù)收益率

# IF_IH_IC_ret = get_returnfutures_daily(IF_IH_IC,20190101,20190401)? # 三大指數(shù)

# IF_IH_ret = get_returnfutures_daily(IF_IH,20190101,20190401)

# IF_IC_ret = get_returnfutures_daily(IF_IC,20190101,20190401)

# IH_IC_ret = get_returnfutures_daily(IH_IC,20190101,20190401)

IF_ret = get_returnfutures_daily(IF,20190101,20190401)

IF_ret = fill_ndarray(IF_ret)

IH_ret = get_returnfutures_daily(IH,20190101,20190401)

IH_ret = fill_ndarray(IH_ret)

IC_ret = get_returnfutures_daily(IC,20190101,20190401)

IC_ret = fill_ndarray(IC_ret)

print IC_ret

print type(IC_ret)

# 定義相關(guān)系數(shù)函數(shù)

def corr(stock_list):? ? # stock_list:股票組合收益率

? ? # 期貨收益率序列

? ? # IF_IH_IC_series = pd.Series(IF_IH_IC_ret)

? ? # IF_IH_series = pd.Series(IF_IH_ret)

? ? # IF_IC_series = pd.Series(IF_IC_ret)

? ? # IH_IC_series = pd.Series(IH_IC_ret)

? ? IF_ret_series = pd.Series(IF_ret)

? ? IH_ret_series = pd.Series(IH_ret)

? ? IC_ret_series = pd.Series(IC_ret)

? ? # 股票收益率序列

? ? stock_group = pd.Series(stock_list)


? ? # 計(jì)算相關(guān)系數(shù)搔弄,保留四位小數(shù)

? ? # corr_IF_IH_IC = round(stock_group.corr(IF_IH_IC_series), 4)

? ? # corr_IF_IH = round(stock_group.corr(IF_IH_series), 4)

? ? # corr_IF_IC = round(stock_group.corr(IF_IC_series), 4)

? ? # corr_IH_IC = round(stock_group.corr(IH_IC_series), 4)

? ? corr_IF = round(stock_group.corr(IF_ret_series), 4)

? ? corr_IH = round(stock_group.corr(IH_ret_series), 4)

? ? corr_IC = round(stock_group.corr(IC_ret_series), 4)


? ? # 繪制散點(diǎn)圖

#? ? plt.scatter(stock_list, IF_IH_IC_ret)

#? ? plt.title('corr_IF_IH_IC :' + str(corr_IF_IH_IC), fontproperties='SimHei')

#? ? print('corr_IF_IH_IC :', corr_IF_IH_IC)

#? ? plt.show()


#? ? plt.scatter(stock_list, IF_IH_ret)

#? ? plt.title('corr_IF_IH :' + str(corr_IF_IH), fontproperties='SimHei')

#? ? print('corr_IF_IH :', corr_IF_IH)

#? ? plt.show()


#? ? plt.scatter(stock_list, IF_IC_ret)

#? ? plt.title('corr_IF_IC :' + str(corr_IF_IC), fontproperties='SimHei')

#? ? print('corr_IF_IC :', corr_IF_IC)

#? ? plt.show()


#? ? plt.scatter(stock_list, IH_IC_ret)

#? ? plt.title('corr_IH_IC :' + str(corr_IH_IC), fontproperties='SimHei')

#? ? print('corr_IH_IC :', corr_IH_IC)

#? ? plt.show()


? ? plt.scatter(stock_list, IF_ret)

? ? plt.title('corr_IF :' + str(corr_IF), fontproperties='SimHei')

? ? print('corr_IF :', corr_IF)

? ? plt.show()


? ? plt.scatter(stock_list, IH_ret)

? ? plt.title('corr_IH :' + str(corr_IH), fontproperties='SimHei')

? ? print('corr_IH :', corr_IH)

? ? plt.show()


? ? plt.scatter(stock_list, IC_ret)

? ? plt.title('corr_IC :' + str(corr_IC), fontproperties='SimHei')

? ? print('corr_IC :', corr_IC)

? ? plt.show()? ?

? ? return corr_IF,corr_IH,corr_IC

group1_corr = corr(group1_ret)? # 組合的各種相關(guān)系數(shù)

group2_corr = corr(group2_ret)

group3_corr = corr(group3_ret)

print group1_corr

print "*"*100

print group2_corr

print "*"*100

print group3_corr

# 結(jié)論:有結(jié)果可知,三組股票均與IC的相關(guān)性最高丰滑。當(dāng)然了顾犹,在與指數(shù)池做相關(guān)性分析時(shí),發(fā)現(xiàn):第二組用IH\IC混合對(duì)沖較好褒墨,由于相對(duì)復(fù)雜炫刷,時(shí)間關(guān)系,這里不深入研究郁妈,日后再探討浑玛。

# 下面是求貝塔的過(guò)程

cov_mat = np.cov(group3_ret,IC_ret)

print cov_mat

# 協(xié)方差

cov = cov_mat[1,1]

print 'cov(group3_ret,IC_ret) =', cov

print "var =", IC_ret.var()? # 方差

# 得出貝塔

B=cov/IC_ret.var()

print 'β =', B

# 期指總市值

def matketValue(y, date):

? ? inf = DataAPI.MktMFutdGet(tradeDate=date,mainCon=u"1",contractMark=u"",contractObject=y,field=u"ticker,closePrice",pandas="1").set_index('ticker')

? ? closeprice = inf.values

? ? tol_index_equd = closeprice * 300

? ? return tol_index_equd

# 股票組合總市值(廢棄)

# def group_matketValue(group, date):

#? ? group_equd = 0

#? ? for stock in group:

#? ? ? ? equd=DataAPI.MktEqudAdjGet(tradeDate=date,ticker=stock,field=u"ticker,marketValue").set_index('ticker')

#? ? ? ? equd = equd["marketValue"].values

#? ? ? ? # print equd

#? ? ? ? group_equd += equd

#? ? return group_equd

Vs = len(group3)*1000000

Vf = matketValue(IC, '20190401')

print 'Vs=', Vs? # 股票組合市值

print 'Vf=', Vf? # 一手期指市值

N = B*Vs/Vf? # 期指對(duì)沖的手?jǐn)?shù)

print 'N=', N

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市噩咪,隨后出現(xiàn)的幾起案子顾彰,更是在濱河造成了極大的恐慌极阅,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涨享,死亡現(xiàn)場(chǎng)離奇詭異筋搏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)厕隧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)奔脐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吁讨,你說(shuō)我怎么就攤上這事髓迎。” “怎么了挡爵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵竖般,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茶鹃,道長(zhǎng)涣雕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任闭翩,我火速辦了婚禮挣郭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疗韵。我一直安慰自己兑障,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蕉汪。 她就那樣靜靜地躺著流译,像睡著了一般。 火紅的嫁衣襯著肌膚如雪者疤。 梳的紋絲不亂的頭發(fā)上福澡,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音驹马,去河邊找鬼革砸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛糯累,可吹牛的內(nèi)容都是我干的算利。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泳姐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼效拭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤允耿,失蹤者是張志新(化名)和其女友劉穎借笙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體较锡,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年盗痒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚂蕴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俯邓,死狀恐怖骡楼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稽鞭,我是刑警寧澤鸟整,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站朦蕴,受9級(jí)特大地震影響篮条,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吩抓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一涉茧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疹娶,春花似錦伴栓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至额港,卻和暖如春饺窿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锹安。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工短荐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叹哭。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓忍宋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親风罩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糠排,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350