日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

研报复现系列(六)【国泰君安】基于CCK模型的股票市场羊群效应研究

發(fā)布時(shí)間:2023/12/18 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 研报复现系列(六)【国泰君安】基于CCK模型的股票市场羊群效应研究 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

我們是國(guó)內(nèi)普通高校的在校學(xué)生,同時(shí)也是量化投資的初學(xué)者。我們的學(xué)校不是清北復(fù)交,也沒(méi)有金融工程實(shí)驗(yàn)室,同時(shí)地處三線小城,因此我們?cè)谛F陂g較難獲得量化實(shí)習(xí)機(jī)會(huì),但我們期待與業(yè)界進(jìn)行溝通、交流。

蔡金航同學(xué)是我們其中的一員。其在尋找暑期量化實(shí)習(xí)時(shí),收到了幾家私募和券商金工組的筆試邀請(qǐng),筆試內(nèi)容皆為在給定時(shí)間內(nèi)復(fù)現(xiàn)出一篇金工研報(bào)。蔡同學(xué)受到啟發(fā),發(fā)覺(jué)復(fù)現(xiàn)金工研報(bào)是我們學(xué)習(xí)量化策略、鍛煉程序設(shè)計(jì)能力同時(shí)也是與業(yè)界交流的很好的途徑。

在蔡同學(xué)的建議下,我們開(kāi)啟研報(bào)復(fù)現(xiàn)系列的創(chuàng)作,記錄我們的學(xué)習(xí)過(guò)程,并將我們的創(chuàng)作內(nèi)容分享出來(lái),與讀者們一起交流、學(xué)習(xí)、進(jìn)步。

我們的水平有限,創(chuàng)作的內(nèi)容難免會(huì)有錯(cuò)誤或不嚴(yán)謹(jǐn)?shù)膬?nèi)容,我們歡迎讀者的批評(píng)指正。

如果您對(duì)我們的內(nèi)容感興趣,請(qǐng)聯(lián)系我們:cai_jinhang@foxmail.com

本文作者:

徐鵬宇 山東大學(xué)(威海)數(shù)學(xué)與統(tǒng)計(jì)學(xué)院 pengyu_xu0607@163.com

1.研報(bào)概述

研究目的

參考國(guó)泰君安證券研報(bào)《20181128-基于CCK模型的股票市場(chǎng)羊群效應(yīng)研究》,對(duì)市場(chǎng)上存在的個(gè)別股票的漲跌引起相關(guān)股票收益率聯(lián)動(dòng)的現(xiàn)象進(jìn)行分析探究。根據(jù)研報(bào)構(gòu)建CCK模型,并進(jìn)行改良,尋找更多聯(lián)動(dòng)信號(hào),并正確分析市場(chǎng)趨勢(shì)。

研究思路

1、計(jì)算市場(chǎng)回報(bào)率并進(jìn)行改良

2、確定羊群效應(yīng)顯著性水平的衡量標(biāo)準(zhǔn)

3、選取研報(bào)中若干數(shù)據(jù)進(jìn)行回測(cè)

2.研究環(huán)境

JointQuant

Tushare

因?yàn)閿?shù)據(jù)接口不同,兩大平臺(tái)在獲取一些數(shù)據(jù)各有優(yōu)勢(shì)。本人第一次進(jìn)行研報(bào)復(fù)現(xiàn),混用兩種數(shù)據(jù)接口,擇優(yōu)使用

from numpy.core.fromnumeric import product from numpy.core.numeric import NaN from jqdatasdk import * import jqdatasdk as jq import tushare as ts import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as mpatches from datetime import * from pandas.io.pytables import performance_doc import statsmodels.api as sm from sklearn.preprocessing import scale import warnings warnings.filterwarnings('ignore') plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False # 用來(lái)正常顯示負(fù)號(hào)

3.研報(bào)復(fù)現(xiàn)

3.1數(shù)據(jù)獲取

本文數(shù)據(jù)來(lái)源于聚寬JoinQuant以及Tushare。用到的接口名和功能如下表所示。具體參數(shù)請(qǐng)查閱官方API文檔。

聚寬接口功能
get_price獲取數(shù)據(jù)、是否停牌、漲跌停價(jià)
get_trade_days獲取一段時(shí)間內(nèi)的交易日列表
get_extras查詢特定股票是否是ST股
get_index_stocks獲取指數(shù)成分股
get_all_securities獲取某日所有股票
Tushare接口功能
daily獲取股票單日數(shù)據(jù)
trade_cal獲取交易日列表

3.2構(gòu)建市場(chǎng)回報(bào)率

對(duì)于接下來(lái)要使用的A股綜合市場(chǎng)回報(bào)率,研報(bào)中使用的為國(guó)泰安數(shù)據(jù)庫(kù),我們考慮用免費(fèi)獲得的數(shù)據(jù)進(jìn)行代替。

流通市值加權(quán)平均

首先,我們想到的是使用流通市值加權(quán)平均的方法計(jì)算A股市場(chǎng)總收益率:

上證A股指數(shù)收益率上證A股總流通市值占比
+
深證A股指數(shù)收益率深證A股總流通市值占比

總流通市值為當(dāng)日指數(shù)成分股流通市值之和

def get_CriValue(exchange_code, start_date, end_date, count=3000):'''獲取流通市值參數(shù):exchange_code 指數(shù)代碼,start_date 開(kāi)始日期end_date 結(jié)束日期count 最多返回值個(gè)數(shù),是聚寬規(guī)定的一次獲取最多個(gè)數(shù)返回值:dataframe類(lèi)型,每日流通市值'''CriValue = jq.finance.run_query(query(finance.STK_EXCHANGE_TRADE_INFO.circulating_market_cap,finance.STK_EXCHANGE_TRADE_INFO.date).filter(jq.finance.STK_EXCHANGE_TRADE_INFO.exchange_code==exchange_code,jq.finance.STK_EXCHANGE_TRADE_INFO.date<=end_date,jq.finance.STK_EXCHANGE_TRADE_INFO.date>=start_date).limit(count))CriValue.set_index('date', inplace=True)return CriValue # 計(jì)算2017年一年的Rm SH_CriValue = get_CriValue('322001', '2017-01-01', '2017-12-31') SZ_CriValue = get_CriValue('322004', '2017-01-01', '2017-12-31') ###運(yùn)用流通市值加權(quán)平均法計(jì)算Rm### sz = pd.DataFrame(SZ_CriValue.circulating_market_cap) sh = pd.DataFrame(SH_CriValue.circulating_market_cap) real_market = pd.concat([sz,sh],axis=1) real_market.columns = ['深證','上證'] real_market.index = SH_CriValue.index real_market['all'] = real_market['深證'] + real_market['上證'] # print(real_market.tail()) SH_market_return = jq.get_price('000001.XSHG',start_date='2017-01-01',end_date='2017-12-31',fields='close').pct_change(1).fillna(0) SZ_market_return = jq.get_price('399106.XSHE',start_date='2017-01-01',end_date='2017-12-31',fields='close').pct_change(1).fillna(0) real_market['R深證'],real_market['R上證'] = SZ_market_return,SH_market_return Rm = (real_market['深證']/real_market['all'] * real_market['R深證'])+(real_market['上證']/real_market['all'] * real_market['R上證'])

由于該方法構(gòu)建的市場(chǎng)收益率占用內(nèi)存過(guò)高,需要很多次查詢,新手賬號(hào)暫且沒(méi)有這么多積分,所以尋求更簡(jiǎn)單的方法。

簡(jiǎn)化的綜合市場(chǎng)回報(bào)率

去掉加權(quán)平均,計(jì)算公式=(上A指數(shù)收益率+深A(yù)指數(shù)收益率)/2

def get_Rm_simple_cont(start_date, end_date):'''功能:計(jì)算滬深A(yù)股收益率均值作為市場(chǎng)均值連續(xù)時(shí)間參數(shù):start_date, end_date返回值:list類(lèi)型,A股收益率'''SH_market_return = jq.get_price('000002.XSHG',start_date=start_date,end_date=end_date,fields=['close', 'pre_close']).fillna(0)SH_market_return = (SH_market_return['close']-SH_market_return['pre_close']) / SH_market_return['pre_close']SZ_market_return = jq.get_price('399107.XSHE',start_date=start_date,end_date=end_date,fields=['close', 'pre_close']).fillna(0)SZ_market_return = (SZ_market_return['close']-SZ_market_return['pre_close']) / SZ_market_return['pre_close']Rm_simple_cont = (SH_market_return+SZ_market_return)/2return list(Rm_simple_cont)

該方法構(gòu)建的綜合市場(chǎng)回報(bào)率與國(guó)泰君安的數(shù)據(jù)庫(kù)基本一致,因此下文使用該方法。此外,我們給這個(gè)函數(shù)稍作變化:
增加了一個(gè)新的參數(shù)time_interval,適用于計(jì)算若干天內(nèi)市場(chǎng)回報(bào)率的指數(shù)平均。

增加了參數(shù)code,計(jì)算其他指數(shù)的收益率

def get_Rm_simple2(start_date,end_date,time_interval=None,code = None):'''功能:計(jì)算滬深A(yù)股收益率均值作為市場(chǎng)均值,也可以計(jì)算其他指數(shù)的收益率參數(shù):start_date,end_date,time_interval默認(rèn)為None,計(jì)算每日收益率,當(dāng)為int型數(shù)字時(shí),計(jì)算前time_interval天的指數(shù)平均收益率返回值:list類(lèi)型,A股收益率'''if not code:return0 = jq.get_price(['000002.XSHG','399107.XSHE'],start_date=start_date,end_date=end_date,fields=['close', 'pre_close'],).fillna(0) SH_market_return = return0.loc[return0['code']=='000002.XSHG'].reset_index(drop=True) SZ_market_return = return0.loc[return0['code']=='399107.XSHE'].reset_index(drop=True) if time_interval: return1 = jq.get_price(['000002.XSHG','399107.XSHE'],count = time_interval,end_date=start_date,fields=['close', 'pre_close'], ).fillna(0) SH_market_return1 = return1.loc[return1['code']=='000002.XSHG'].reset_index(drop=True) SH_market_return1.drop([len(SH_market_return1)-1],inplace=True) SH_market_return = SH_market_return1.append(SH_market_return).reset_index(drop = True) SZ_market_return1 = return1.loc[return1['code']=='399107.XSHE'].reset_index(drop=True) SZ_market_return1.drop([len(SZ_market_return1)-1],inplace=True) SZ_market_return = SZ_market_return1.append(SZ_market_return).reset_index(drop = True) SH_market_return = (SH_market_return['close']-SH_market_return['pre_close']) / SH_market_return['pre_close'] SZ_market_return = (SZ_market_return['close']-SZ_market_return['pre_close']) / SZ_market_return['pre_close'] Rm_simple = list((SH_market_return+SZ_market_return)/2) else: return0 = jq.get_price(code,start_date=start_date,end_date=end_date,fields=['close', 'pre_close'], ).fillna(0).reset_index(drop=True) if time_interval: return1 = jq.get_price(code,count = time_interval,end_date=start_date,fields=['close', 'pre_close'], ).fillna(0) return1 = return1.reset_index(drop=True) return1.drop([len(return1)-1],inplace=True) return0 = return1.append(return0).reset_index(drop = True) return0 = (return0['close']-return0['pre_close']) / return0['pre_close'] Rm_simple = list(return0) if time_interval: Rm_simple.append(0) Rm_simple = [(np.prod(1+np.array(Rm_simple[i-time_interval:i])))**(1/time_interval)-1 for i in range(time_interval, len(Rm_simple))] return Rm_simple

3.3識(shí)別羊群效應(yīng)

Chang, Cheng & Khorana首先通過(guò)以下推導(dǎo)證明了理性情況下,由于個(gè)股對(duì)市場(chǎng)風(fēng)險(xiǎn)的敏感程度不同,市場(chǎng)收益率Rm劇烈波動(dòng)時(shí),組合收益率相對(duì)于Rm的離散程度會(huì)線性增加:

定義股票組合在t時(shí)刻的截面絕對(duì)離散度CSAD為

CSADt=1N∑1N∣Ri,t?Rm,t∣CSAD_{t} = \frac{1}{N}\sum_{1}^{N}{\left| R_{i,t}-R_{m,t} \right|}CSADt?=N1?1N?Ri,t??Rm,t?

根據(jù)CAPM,導(dǎo)出

E(CSADt)=1N∑i=1N∣βi?βm∣E(Rm,t?γ0)E(CSAD_{t})=\frac{1}{N}\sum_{i=1}^{N}{\left| \beta_{i}-\beta_{m} \right|}E(R_{m,t}-\gamma_{0})E(CSADt?)=N1?i=1N?βi??βm?E(Rm,t??γ0?)

可以看出無(wú)羊群效應(yīng)時(shí)CSAD與Rm關(guān)系為線性正相關(guān)。

Chang, Cheng & Khorana構(gòu)造了如下回歸,根據(jù)回歸中Rm,t系數(shù)b**是否顯著為負(fù)判斷是否存在羊群效應(yīng):b顯著時(shí),說(shuō)明C S A D和Rm的關(guān)系為非線性;b**為負(fù)時(shí),如下圖所示,隨Rm增大,離散度會(huì)減速上升或加速下降。

為了計(jì)算股票組合的截面絕對(duì)離散度CSAD,首先需要得到股票成分股。該函數(shù)原創(chuàng)于我們的研報(bào)復(fù)現(xiàn)第一篇。

樣本空間:滬深300成分股,剔除 ST 股和上市未滿 60 日的新股,以及漲停、停牌、跌停(若按照原研報(bào)為每日的正常交易股票,但數(shù)據(jù)量過(guò)多,受硬件限制本文縮小了樣本范圍,只在180天更新一次指數(shù)成分股)

def get_stocks(date,index=None): ''' 功能: 根據(jù)日期,獲取該日滿足交易要求的股票相關(guān)數(shù)據(jù),即剔除ST股、上市未滿60天、停牌、跌漲停股 參數(shù): date,日期 index,指數(shù)代碼,在特定指數(shù)的成分股中選股。缺省時(shí)選股空間為全部A股 返回: DataFrame類(lèi)型,索引為股票代碼,同時(shí)包含了價(jià)格數(shù)據(jù),方便后續(xù)使用 ''' stocks = jq.get_all_securities( types=['stock'], date=date )#該日正在上市的股票if index:#特定成分股 stock_codes = jq.get_index_stocks(index,date=date)#成分股 stocks = stocks[stocks.index.isin(stock_codes)]#上市日期大于60個(gè)自然日 # start_date 為 [datetime.date] 類(lèi)型 stocks['start_date']=pd.to_datetime(stocks['start_date']) date = datetime.strptime(date,'%Y-%m-%d').date() date = pd.to_datetime(date) stocks['datedelta'] = date - stocks['start_date'] stocks = stocks[stocks['datedelta'] > timedelta(days=60)]#是否是ST股 stocks['is_st'] = jq.get_extras( info='is_st', security_list=list(stocks.index), count=1, end_date=date ).T#漲停、跌停、停牌 stocks_info = jq.get_price( security = list(stocks.index), fields=['close','high','low','high_limit','low_limit','paused'], count=1, end_date=date, panel=False ).set_index('code').drop('time',axis=1)stocks['price'] = stocks_info['close']#順便保存價(jià)格,方便后續(xù)運(yùn)算 stocks['paused'] = stocks_info['paused'] == 1#是否停牌 stocks['high_stop'] = stocks_info['high'] >= stocks_info['high_limit']#漲停 stocks['low_stop'] = stocks_info['low'] <= stocks_info['low_limit']#跌停 stocks = stocks[~(stocks['is_st'] | stocks['paused'] | stocks['high_stop'] | stocks['low_stop'])] return stocks

為了同時(shí)使用聚寬和Tushare數(shù)據(jù),我們使用了兩個(gè)格式轉(zhuǎn)換的小函數(shù)

# ts日期轉(zhuǎn)聚寬日期 def ts2jq_date(tsdate): ''' tsdate必須是list 輸出list ''' date=['-'.join([i[0:4], i[4:6], i[6:]]) for i in tsdate] return date # 聚寬日期轉(zhuǎn)ts日期只需要date.replace('-', '')刪除'-'即可 # 聚寬股票代碼轉(zhuǎn)ts股票代碼 def jq2ts_code(jqcode): ''' 輸入聚寬的股票代碼(list) 返回tushare股票代碼(list) ''' tscode = [i.replace('XSHE', 'SZ').replace('XSHG', 'SH') for i in jqcode] return tscode

接下來(lái)可以根據(jù)公式計(jì)算CSAD了

def cal_CSAD_cont(start_date, end_date, date_interval, index): ''' 為了減少運(yùn)行時(shí)間,股票不能每日篩選 date_interval:股票池更新間隔,int ''' CSAD = pd.DataFrame([]) start_date_ts = start_date.replace('-', '') end_date_ts = end_date.replace('-', '') trade_days = pro.trade_cal(start_date=start_date_ts, end_date=end_date_ts) trade_days = trade_days[trade_days['is_open']==1]['cal_date'] trade_days = list(trade_days) trade_days = ts2jq_date(trade_days) dates_update = trade_days[::date_interval] CSAD['cal_date'] = trade_days csad = [] stocks_rm = get_Rm_simple2(start_date, end_date) for i in range(len(trade_days)): if trade_days[i] in dates_update: #如果在dates_update就更新stocks stocks = get_stocks(trade_days[i], index) stocks = list(stocks.index) stocks = jq2ts_code(stocks) ts_date = trade_days[i].replace('-', '') ri = pro.daily(trade_date=ts_date, fields='ts_code,pct_chg') ri = ri[ri.ts_code.isin(stocks)].drop('ts_code',axis=1) csadi = float(np.mean(abs(ri-stocks_rm[i]))) csad.append(csadi) CSAD['CSAD'] = csad CSAD['rm'] = stocks_rm CSAD.set_index('cal_date') return CSAD

對(duì)CSAD和綜合市場(chǎng)收益率Rm進(jìn)行OLS擬合,計(jì)算擬合的二次項(xiàng)系數(shù)beta2以及p值

def cal_beta(start_date, end_date, date_interval, index): # 返回start_date22天后的beta # 想要返回從start_date后的beta請(qǐng)使用 # real_date = get_trade_day_before(22,start_date) # start_date = real_date CSAD=cal_CSAD_cont(start_date, end_date, date_interval, index) x1=[] x2=[] p1 = [] p2 = [] rm_mean = [] for i in range(len(CSAD))[22:]: x=CSAD.iloc[i-22:i, 2] #pd.ix方法被1.0.0版本移除了 y=CSAD.iloc[i-22:i, 1] X = np.column_stack((x**2, x)) X = sm.add_constant(X) model = sm.OLS(y,X) results = model.fit() x1.append(results.params[1]) x2.append(results.params[2]) p1.append(results.pvalues[1]) p2.append(results.pvalues[2]) meanrm = np.mean(x) rm_mean.append(meanrm) beta = pd.DataFrame([]) beta['beta1']=x1 beta['pvalue1']=p1 beta['beta2']=x2 beta['pvalue2']=p2 beta['date']=list(CSAD.cal_date[22:]) beta['rm']=rm_mean beta.set_index('date',inplace = True)#默認(rèn)的drop=True失效了是怎么回事 return beta

以滬深300為例

為了方便取用,我們將cal_beta( )的返回值保存于本地的excel中。然后繪制beta2的折線走勢(shì)圖以及p值的折線走勢(shì)圖。

HS300_beta = cal_beta('2007-01-01','2019-01-01',180, '000300.XSHG') HS300_beta.to_excel(excel_writer='beta.xlsx', sheet_name='sheet_1') # 繪制beta2的p值 df1 = pd.read_excel('beta.xlsx') print(df1) fig,ax=plt.subplots(figsize=(13,8)) plt.plot(df1.date,df1.pvalue2,'b',linewidth = 1) plt.grid(False) plt.title('07年1月1日至19年1月β2的p值折線走勢(shì)圖',fontsize=20) plt.hlines(y=0.05,xmin=df1.date[0],xmax=df1.date[len(df1)-1],color='red',linewidth = 1,alpha = 0.5) first_legend = plt.legend(['pvlaue-β2'],fontsize=15) ax1 = plt.gca().add_artist(first_legend) red_patch = mpatches.Patch(color = 'red',label = '0.05分界線',linewidth = 1,alpha = 0.5) plt.legend(handles = [red_patch],loc = 3,fontsize=15) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('pvalue',fontsize=15) for label in ax.xaxis.get_ticklabels(): # label is a Text instance label.set_color('red') label.set_rotation(45) label.set_fontsize(10) for label in ax.get_xticklabels(): label.set_visible(False) for label in ax.get_xticklabels()[::180]: label.set_visible(True) plt.tight_layout() ax.tick_params(bottom=False,top=False,left=False,right=False) #移除全部刻度線 plt.show() fig,ax=plt.subplots(figsize=(13,8)) plt.plot(df1.date,df1.beta2,'r') plt.grid(False) plt.title('07年1月1日至19年1月β2的折線走勢(shì)圖',fontsize=20) plt.legend(['β2'],fontsize=15) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('β2數(shù)值',fontsize=15) for label in ax.xaxis.get_ticklabels(): # label is a Text instance label.set_color('red') label.set_rotation(45) label.set_fontsize(10) for label in ax.get_xticklabels(): label.set_visible(False) for label in ax.get_xticklabels()[::180]: #每180個(gè)刻度顯示一個(gè) label.set_visible(True) plt.tight_layout() ax.tick_params(bottom=False,top=False,left=False,right=False) #移除全部刻度線 plt.show()

方法一

通常的ols擬合,當(dāng)p值小于0.05時(shí),認(rèn)為beta2顯著。但是可以看出該方法給出的開(kāi)倉(cāng)信號(hào)過(guò)多。一個(gè)方法是將臨界的p值減小,例如減小到0.001

# 篩選出顯著羊群效應(yīng)即β^2顯著的,p值<0.001 df1 = pd.read_excel('beta.xlsx') pvalues = df1.pvalue2 rm22_mean = df1.rm signal_up = [rm22_mean[i]>0 and pvalues[i]<0.001 for i in range(len(pvalues))] signal_down = [rm22_mean[i]<0 and pvalues[i]<0.025 for i in range(len(pvalues))] print('上漲時(shí)置信水平超過(guò)99.9%的信號(hào)出現(xiàn)了{}次,\n\ 下跌時(shí)置信水平超過(guò)97.25%的信號(hào)出現(xiàn)了{}次,\n\ 共出現(xiàn)信號(hào){}次\n'.format(sum(signal_up),sum(signal_down),sum(signal_up)+sum(signal_down)))# 可視化 start_date = df1.date[0] end_date = list(df1['date'])[-1] ###信號(hào)坐標(biāo)## R_300 = jq.get_price('000300.XSHG',start_date=start_date,end_date=end_date,fields=['low','close']) fig = plt.subplots(figsize=(13,8)) plt.plot(R_300.close,'b') plt.grid(True) plt.title('單側(cè)置信區(qū)間下限0.1%時(shí)的β信號(hào)分布圖',fontsize=20) Y = R_300.close for i in range(len(signal_up)): if signal_up[i]: loc = int(Y[i]) plt.vlines(Y.index[i], loc-400,loc+400, color='red',linewidth = 1,alpha = 0.5) first_legend = plt.legend(['000300.XSHG'],fontsize=20) ax = plt.gca().add_artist(first_legend) blue_patch = mpatches.Patch(color = 'red',label = '買(mǎi)入信號(hào)',linewidth = 1,alpha = 0.5) plt.legend(handles = [blue_patch],loc = 4,fontsize=20) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('滬深300指數(shù)收盤(pán)價(jià)',fontsize=15) plt.show()

上漲時(shí)置信水平超過(guò)99.9%的信號(hào)出現(xiàn)了145次,
下跌時(shí)置信水平超過(guò)97.25%的信號(hào)出現(xiàn)了194次,

共出現(xiàn)信號(hào)339次

可以看出該方法給出的信號(hào)純度并不好。在08年的峰頂給出了買(mǎi)入信號(hào),在14-15年的熊市中多次嘗試抄底,在震蕩市中表現(xiàn)也不佳。信號(hào)純度并不高。

方法二

使用某日前180日的所有ols擬合的β2作為總體的β2分布,用其上、下0.05分位數(shù)作為總體的置信限。

該方法得到的信號(hào)次數(shù)是幾乎確定的。假設(shè)β2的分布是隨時(shí)間平穩(wěn)的,那么前180天中在置信區(qū)間中的應(yīng)當(dāng)有20.05180=18次,即約有1/10的時(shí)間有信號(hào)。不過(guò)在股市這個(gè)隨時(shí)間有明顯變化的時(shí)間序列中,可能有信號(hào)的次數(shù)與理論有很大差異。

為了獲得更精確的市場(chǎng)狀態(tài),避免在震蕩市中誤判上漲行情,我們考慮原始均線策略。增加一個(gè)約束條件,當(dāng)30日均線大于30個(gè)交易日前的均線。不過(guò)我認(rèn)為30日均線顯示上漲,則30日收益率也應(yīng)該上漲。平均收益率代表幾何平均,均線代表線性平均,兩者不會(huì)有太大差異。

在平臺(tái)給的接口中只有判斷某日是否交易日的函數(shù)。為了配合若干交易日前的均線的計(jì)算,曲線救國(guó)定義了一個(gè)函數(shù)。該函數(shù)作用為獲取給定日期若干天前的交易日。簡(jiǎn)單的做法是使用.rolling()方法,但是會(huì)填充一些NA值。

def get_trade_day_before(count, end_date): ''' 獲取end_date前count天的交易日,從該日到end_date一共count天 ''' return1 = jq.get_price('000002.XSHG',count = count,end_date=end_date,fields='close').fillna(0) trade_day_before = return1.index[0] return str(trade_day_before)[:10] # 增加一個(gè)均線策略 ###################################################################### def get_ma(start_date,end_date,time_interval,code = None): ''' 功能:計(jì)算滬深A(yù)股time_interval天均值作為市場(chǎng)均值 參數(shù):start_date,end_date, time_interval為int型數(shù)字 code為可選參數(shù),默認(rèn)計(jì)算滬深A(yù)股均值。也可以選擇其他指數(shù) 計(jì)算前time_interval天的平均值 返回值:list類(lèi)型,time_interval天的平均值 ''' if not code: # 將time_interval天的指數(shù)價(jià)格拼接在start_date前面, # 然后rolling方法計(jì)算均值,最后丟掉前面的指數(shù)價(jià)格 return0 = jq.get_price(['000002.XSHG','399107.XSHE'],start_date=start_date,end_date=end_date,fields=['close','pre_close'] ).fillna(0) SH_market_return = return0.loc[return0['code']=='000002.XSHG'].reset_index(drop=True) SZ_market_return = return0.loc[return0['code']=='399107.XSHE'].reset_index(drop=True) return1 = jq.get_price(['000002.XSHG','399107.XSHE'],count = time_interval,end_date=start_date,fields=['close','pre_close'] ).fillna(0) SH_market_return1 = return1.loc[return1['code']=='000002.XSHG'].reset_index(drop=True) SH_market_return1.drop([len(SH_market_return1)-1],inplace=True) SH_market_return = SH_market_return1.append(SH_market_return).reset_index(drop = True) SZ_market_return1 = return1.loc[return1['code']=='399107.XSHE'].reset_index(drop=True) SZ_market_return1.drop([len(SZ_market_return1)-1],inplace=True) SZ_market_return = SZ_market_return1.append(SZ_market_return).reset_index(drop = True) SH_market_return = SH_market_return.close SZ_market_return = SZ_market_return.close ma_simple = (SH_market_return+SZ_market_return)/2 else: return0 = jq.get_price(code,start_date=start_date,end_date=end_date,fields=['close','pre_close'], ).fillna(0) return1 = jq.get_price(code,count = time_interval,end_date=start_date,fields=['close', 'pre_close'], ).fillna(0) return1 = return1.reset_index(drop=True) return1.drop([len(return1)-1],inplace=True) return0 = return1.append(return0).reset_index(drop = True) return0 = return0.close ma_simple = return0 ma = ma_simple.rolling(time_interval,min_periods=time_interval).mean() ma.drop(ma.index[:time_interval-1], axis=0, inplace = True) return ma

分析ols擬合后的數(shù)據(jù),計(jì)算beta,MA5,MA10,MA20,22天平均收益率,180天2.5%,5%,10%分位數(shù)。

# 獲取標(biāo)的指數(shù)的beta,MA5,MA10,MA20,22天平均收益率,180天2.5%,5%,10%的分位數(shù) # 輸入的數(shù)據(jù)為cal_beta()的返回dataframe以及指數(shù)代碼 def get_analysis_frame(code, beta_frame): ''' 標(biāo)的指數(shù)的beta,MA5,MA10,MA20,22天平均收益率,180天2.5%,5%,10%的分位數(shù) ''' # 直接從beta_frame中讀取日期 start_date = beta_frame.iloc[0,0] end_date = beta_frame.iloc[len(beta_frame)-1,0] beta = beta_frame[['date','beta2','pvalue2']] R_MA22 = get_Rm_simple2(start_date, end_date, 22, code) MA30 = get_ma(start_date, end_date, 30, code) # 獲取30個(gè)交易日前的日期 start_date_before = get_trade_day_before(30, start_date) MA30_before = get_ma(start_date_before, end_date, 30, code) # 30個(gè)交易日前的日期到結(jié)束日期前30日的均線 MA30_before = MA30_before[:-29] MA5_before = get_ma(start_date_before, end_date, 5, code) MA5_before = MA30_before[:-4] MA10 = get_ma(start_date, end_date, 10, code) MA5 = get_ma(start_date, end_date, 5, code) beta['MA5'] = MA5 beta['MA5_before'] = MA5_before beta['MA10']= MA10 beta['MA30']= MA30 beta['MA30_before'] = MA30_before beta['R_MA22'] = R_MA22 beta['quantile-0.1'] = beta['beta2'].rolling(180,min_periods=180).quantile(0.1) beta['quantile-0.05'] = beta['beta2'].rolling(180,min_periods=180).quantile(0.05) beta['quantile-0.025'] = beta['beta2'].rolling(180,min_periods=180).quantile(0.025)"""為了避免過(guò)擬合的情況,分位數(shù)的計(jì)算方式為向前滾動(dòng)計(jì)算180天的分位數(shù) 180天即半年,是許多標(biāo)的指數(shù)成份股的調(diào)整周期 """beta = beta.fillna(method = 'bfill') return beta

有均線時(shí):

df1 = pd.read_excel('beta.xlsx') analysis = get_analysis_frame('000300.XSHG',df1) ma30 = analysis.MA30 ma5 = analysis.MA5 ma30_before = analysis.MA30_before ma5_before = analysis.MA5_before rm22_mean = analysis.R_MA22 beta2 = analysis.beta2 q_0_05 = analysis['quantile-0.05'] q_01 = analysis['quantile-0.1'] # 增加條件:三十日均線大于三十日前的均線 # 線性平均和指數(shù)平均我覺(jué)得沒(méi)啥大的區(qū)別 # MA30如果下降,rm30也應(yīng)該下降 signal_up = [rm22_mean[i]>0 and beta2[i]<q_01[i] and ma30[i] > ma30_before[i] for i in range(len(beta2))] signal_down = [rm22_mean[i]<0 and beta2[i]<q_01[i] and ma5[i] < ma5_before[i] for i in range(len(beta2))] df1['signal_up'] = signal_up df1['signal_down'] = signal_down print('上漲時(shí)超過(guò)單側(cè)置信區(qū)間百分之5下限的beta信號(hào)出現(xiàn)了{}次,\n\ 下跌時(shí)超過(guò)單側(cè)置信區(qū)間百分之5下限的beta信號(hào)出現(xiàn)了{}次,\n\ 共出現(xiàn)單側(cè)置信區(qū)間下限為百分之10的beta信號(hào){}次\n'.format(sum(signal_up),sum(signal_down),sum(signal_up)+sum(signal_down))) start_date = df1.date[0] end_date = list(df1['date'])[-1] ###信號(hào)坐標(biāo)## R_300 = jq.get_price('000300.XSHG',start_date=start_date,end_date=end_date,fields=['low','close']) fig = plt.subplots(figsize=(13,8)) plt.plot(R_300.close,'b') plt.grid(True) plt.title('圖七 改進(jìn)后的多空信號(hào)圖',fontsize=20) Y = R_300.close for i in range(len(signal_up)): if signal_up[i]: loc = int(Y[i]) plt.vlines(Y.index[i], loc-400,loc+400, color='red',linewidth = 1,alpha = 0.5) if signal_down[i]: loc = int(Y[i]) plt.vlines(Y.index[i], loc-400,loc+400, color='green',linewidth = 1,alpha = 0.5) first_legend = plt.legend(['000300.XSHG'],fontsize=20) ax = plt.gca().add_artist(first_legend) blue_patch = mpatches.Patch(color = 'red',label = '做多信號(hào)',linewidth = 1,alpha = 0.5) green_patch = mpatches.Patch(color = 'green',label = '做空信號(hào)',linewidth = 1,alpha = 0.5) plt.legend(handles = [blue_patch,green_patch],loc = 4,fontsize=20) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('滬深300指數(shù)收盤(pán)價(jià)',fontsize=15) plt.show()

上漲時(shí)超過(guò)單側(cè)置信區(qū)間百分之5下限的beta信號(hào)出現(xiàn)了104次,
下跌時(shí)超過(guò)單側(cè)置信區(qū)間百分之5下限的beta信號(hào)出現(xiàn)了113次,

共出現(xiàn)單側(cè)置信區(qū)間下限為百分之10的beta信號(hào)217次

可以看出這種方法相當(dāng)保守,在09-10年之間沒(méi)有信號(hào),11-12年的信號(hào)也踏空了。信號(hào)集中在大牛市和16-17年的慢牛。
多空策略
在加入均線策略控制信號(hào)噪聲以后,基本上沒(méi)有較大的誤判,與原研報(bào)的結(jié)果已經(jīng)很相近了。

3.4策略構(gòu)建和回測(cè)

寬基指數(shù)

策略標(biāo)的:上證綜指、上證50、滬深300、中小板綜合指數(shù) 股票組合:當(dāng)日標(biāo)的股票成分股,剔除ST股等非正常交易股票
回測(cè)時(shí)間:2007.01.01 – 2008.12.31 手續(xù)費(fèi)用:忽略 建倉(cāng)成本:次日均價(jià) 策略步驟:計(jì)算向前 22
日(包括當(dāng)日)每天的成分股組合截面絕對(duì)離散度 CSAD,OLS 估計(jì) CCK 模型中
Rm,t^2的系數(shù)β2,若β2顯著為負(fù)則認(rèn)為當(dāng)日該組合存在羊群效應(yīng),根據(jù) 22
日內(nèi)指數(shù)平均收益率的正負(fù)區(qū)分羊群效應(yīng)發(fā)生時(shí)的市場(chǎng)趨勢(shì)為上漲/下跌,買(mǎi)入/賣(mài)出標(biāo)的指數(shù)并持倉(cāng)22 交易日,持有期不重復(fù)開(kāi)倉(cāng)。

定義一個(gè)計(jì)算所有感興趣信息的函數(shù)

def cal_rate(code, start_date, end_date):'''獲取信號(hào)發(fā)生后的收益率,勝率,夏普比率等若干信息。分上漲和下跌兩種參數(shù):標(biāo)的指數(shù)代碼,回測(cè)開(kāi)始和結(jié)束日期返回值:回測(cè)的數(shù)據(jù)dataframe類(lèi)型,包含多空次數(shù),勝率,最大回撤,夏普比率累計(jì)策略收益率,dataframe類(lèi)型,分做空和做多每次做多/空的收益率'''try:df1 = pd.read_excel('{}_{}_{}.xlsx'.format(code,start_date,end_date))except:real_date = get_trade_day_before(22,start_date)df1 = cal_beta(real_date,end_date,180,code)df1.to_excel(excel_writer='{}_{}_{}.xlsx'.format(code,start_date,end_date), sheet_name='sheet_1')df1 = pd.read_excel('{}_{}_{}.xlsx'.format(code,start_date,end_date))analysis = get_analysis_frame(code,df1)ma30 = analysis.MA30ma5 = analysis.MA5ma30_before = analysis.MA30_beforema5_before = analysis.MA5_beforerm22_mean = analysis.R_MA22beta2 = analysis.beta2q_0_05 = analysis['quantile-0.05']q_01 = analysis['quantile-0.1']# 增加條件:三十日均線大于三十日前的均線# 線性平均和指數(shù)平均我覺(jué)得沒(méi)啥大的區(qū)別# MA30如果下降,rm30也應(yīng)該下降signal_up = [rm22_mean[i]>0 and beta2[i]<q_01[i] and ma30[i] > ma30_before[i] for i in range(len(beta2))]signal_down = [rm22_mean[i]<0 and beta2[i]<q_01[i] and ma5[i] < ma5_before[i] for i in range(len(beta2))]# 次日持倉(cāng)情況# 是否開(kāi)倉(cāng)標(biāo)志is_hold_open = [False]is_sell_open = [False]for i in range(1,len(signal_up)):if signal_up[i-1] and not any(signal_up[max(i-23,0):i-1]):is_hold_open.append(True)else:is_hold_open.append(False)if signal_down[i] and not any(signal_down[max(i-22,0):i]):is_sell_open.append(True)else:is_sell_open.append(False)df1['is_hold_open'] = is_hold_opendf1['is_sell_open'] = is_sell_open# 次日是否持倉(cāng)標(biāo)記is_hold = [any(is_hold_open[max(0,i-22):i]) for i in range(len(is_hold_open))]is_sell = [any(is_sell_open[max(0,i-22):i]) for i in range(len(is_sell_open))]# 指數(shù)日收益率return0 = jq.get_price(code,start_date=start_date,end_date=end_date,fields=['close', 'pre_close'],).fillna(0)return0['rates'] = return0['close'] / return0['pre_close'] - 1# 當(dāng)日收益率,空倉(cāng)時(shí)按照1計(jì)算rates_up = [return0.iloc[i,2]+1 if is_hold[max(i-1,0)] else 1 for i in range(len(return0))]rates_down = [-return0.iloc[i,2]+1 if is_sell[max(i-1,0)] else 1 for i in range(len(return0))]rates_up = np.array(rates_up)rates_down = np.array(rates_down)df1['rates_up'] = rates_updf1['rates_down'] = rates_down# 開(kāi)倉(cāng)次數(shù)open_up_times = sum(is_hold_open)open_down_times = sum(is_sell_open)rates_up_cum = []rates_down_cum = []# 分日累計(jì)收益率rates_daily_up = []rates_daily_down = []for i in range(len(is_hold_open)):if is_hold_open[i]:rates_up_cum.append(product(rates_up[i+1:i+23]))rates_daily_up.append(rates_up[i+1:i+23])if is_sell_open[i]:rates_down_cum.append(product(rates_down[i+1:i+23]))rates_daily_down.append(rates_down[i+1:i+23])rates_up_cum=np.array(rates_up_cum)rates_down_cum=np.array(rates_down_cum)# 勝次數(shù)up_win_times = sum(rates_up_cum>1)down_win_times = sum(rates_down_cum>1)# 勝率if open_up_times:win_rate_up = up_win_times/open_up_timeselse: win_rate_up = NaNif open_down_times:win_rate_down = down_win_times/open_down_timeselse: win_rate_down = NaN###計(jì)算最大回撤,只計(jì)算做多###re = []for k in range(len(rates_up)):retreat = max(rates_up[k]-rates_up[k:])re.append(retreat)max_retreat = max(re)###計(jì)算夏普比率,只計(jì)算做多###ex_pct_close = rates_up - 1 - 0.04/252sharpe = (ex_pct_close.mean() * (252)**0.5)/ex_pct_close.std()analysis_datas = np.array([open_up_times,open_down_times,win_rate_up,win_rate_down,max_retreat,sharpe]).reshape(1,6)back_analysis_data = pd.DataFrame(analysis_datas,columns =['做多次數(shù)','做空次數(shù)','做多勝率','做空勝率','最大回撤','夏普比率'],index = [code])rates_analysis = df1[['date','rates_up','rates_down']]rates_up_prod = [product(rates_up[:i]) for i in range(len(rates_up))]rates_down_prod = [product(rates_down[:i]) for i in range(len(rates_down))]rates_analysis['rates_up_prod'] = rates_up_prodrates_analysis['rates_down_prod'] = rates_down_prodreturn back_analysis_data,rates_analysis,rates_daily_up,rates_daily_down,rates_up_cum,rates_down_cum

配合下面的函數(shù)使用,獲得分年度的策略表現(xiàn)。

def get_annual_performance(time_interval,code):# 對(duì)于某一指數(shù)的若干年的數(shù)據(jù)# 返回一個(gè)dataframe# 包含每年做多次數(shù),勝率,做空次數(shù),勝率,最大回撤,夏普比率performance = pd.DataFrame(columns =['做多次數(shù)','做多勝率','最大回撤-多','夏普比率-多','做空次數(shù)','做空勝率','最大回撤-空','夏普比率-空'])for i in range(len(time_interval)-1):start_date = time_interval[i]end_date = time_interval[i+1]back_analysis_data=cal_rate(code, start_date, end_date)[0].reset_index(drop=True)performance = performance.append(back_analysis_data, ignore_index=True)time_index = [i[0:4] for i in time_interval[:-1]]performance['年份'] = time_indexperformance.set_index('年份',inplace=True)return performance

展示滬深300指數(shù)14-15年兩年

以14-15年滬深300指數(shù)為例
將分年度的表現(xiàn)組合起來(lái),就得到了若干年的回測(cè)收益率。包含做多和做空。

def get_everyyear_rate(time_interval,code):# 對(duì)于某一指數(shù)的若干年的數(shù)據(jù)# 返回一個(gè)dataframe# 包含當(dāng)日收益率和從開(kāi)始到結(jié)束日期的累計(jì)收益率,分為做多和做空rate = pd.DataFrame(columns =['date','rates_up','rates_down','rates_up_prod','rates_down_prod'])for i in range(len(time_interval)-1):start_date = time_interval[i]end_date = time_interval[i+1]back_analysis_data=cal_rate(code, start_date, end_date)[1]rate = rate.append(back_analysis_data, ignore_index=True)rate_cum_up = [product(rate.iloc[:i,1]) for i in range(len(rate))]rate['rate_prod_up'] = rate_cum_uprate_cum_down = [product(rate.iloc[:i,2]) for i in range(len(rate))]rate['rate_prod_down'] = rate_cum_downrate.set_index('date',inplace=True)return rate


可以看出,做多的效果尚可。但是做空的收益率很低(幾乎忽略不計(jì)),原因可能是我國(guó)對(duì)做空的限制導(dǎo)致大量做空的羊群效應(yīng)不顯著。研報(bào)中提到做空的羊群效應(yīng)持續(xù)時(shí)間很短,可以考慮對(duì)做空時(shí)間縮短。代碼如下。

code = '000300.XSHG'# 上證300 start_date = '2014-01-01' end_date = '2016-01-01'back_analysis_data,rates_analysis,rates_daily_up,rates_daily_down,rates_up_cum,rates_down_cum = cal_rate(code, start_date, end_date) print(back_analysis_data) rates_daily_down0 = rates_daily_down[0] # print(rates_daily_down0) rates_daily_down_cum = [product(rates_daily_down0[:i]) for i in range(len(rates_daily_down0))] # print(rates_daily_down_cum) fig = plt.subplots(figsize=(13,8)) plt.plot(rates_daily_down_cum,'green') plt.grid(True) plt.title('圖八,做空開(kāi)倉(cāng)后22日的累計(jì)收益率',fontsize=20) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('滬深300某次做空的收益率',fontsize=15) plt.show()rates_daily_up0 = rates_daily_up[0] # print(rates_daily_down0) rates_daily_up_cum = [product(rates_daily_up0[:i]) for i in range(len(rates_daily_up0))] fig = plt.subplots(figsize=(13,8)) plt.plot(rates_daily_up_cum,'green') plt.grid(True) plt.title('圖八,做多開(kāi)倉(cāng)后22日的累計(jì)收益率',fontsize=20) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('滬深300某次做多的收益率',fontsize=15) plt.show()

下面以上證50為例,對(duì)收益率可視化

''' 上證50 ''' code = '000016.XSHG'# 上證50 # 時(shí)間取07-17年 time_interval = ['2007-01-01','2008-01-01','2009-01-01'] time_interval.extend(['20{}-01-01'.format(i) for i in range(10,17+2)]) performance = get_annual_performance(time_interval,code) performance.to_excel(excel_writer='07-17年上證50表現(xiàn).xlsx', sheet_name='sheet_1') start_date = '2007-01-01' end_date = '2008-01-01' back_analysis_data,rates_analysis,rates_daily_up,rates_daily_down,rates_buy_each_time,rates_sell_each_time = cal_rate(code, start_date, end_date)rates_daily_up0 = rates_daily_up[0] # print(rates_daily_down0) rates_daily_up_cum = [product(rates_daily_up0[:i]) for i in range(len(rates_daily_up0))] fig = plt.subplots(figsize=(13,8)) plt.plot(rates_daily_up_cum,'green') plt.grid(True) plt.title('圖八,做多開(kāi)倉(cāng)后22日的累計(jì)收益率',fontsize=20) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('07-08年上證50某次做多的收益率',fontsize=15) plt.show()fig,ax=plt.subplots(figsize=(13,8)) plt.plot(rates_analysis.date,rates_analysis.rates_up_prod,'b') plt.grid(False) plt.title('圖九,07-08年上證50做多收益率',fontsize=20) plt.legend(['收益率'],fontsize=15) plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('收益率',fontsize=15) for label in ax.xaxis.get_ticklabels():# label is a Text instancelabel.set_color('red')label.set_rotation(45)label.set_fontsize(10) for i,label in enumerate(ax.get_xticklabels()):if i%30==0:label.set_visible(True)else:label.set_visible(False)plt.tight_layout() ax.tick_params(bottom=False,top=False,left=False,right=False) #移除全部刻度線 plt.show()

最后,實(shí)現(xiàn)對(duì)07-08年上證綜指、上證50、滬深300、中小板綜合指數(shù)的回測(cè)。

''' 寬基指數(shù)做多收益率 ''' # 不知道什么原因,中證500和創(chuàng)業(yè)板指獲取不了成分股 index_code = ['000001.XSHG','000016.XSHG','000300.XSHG','399101.XSHE'] colors = ['red','orange','yellow','green'] # 時(shí)間取07-17年 time_interval = ['2007-01-01','2008-01-01','2009-01-01'] # time_interval.extend(['20{}-01-01'.format(i) for i in range(10,17+2)])fig,ax=plt.subplots(figsize=(13,8)) for i,code in enumerate(index_code):every_rate = get_everyyear_rate(time_interval, code)plt.plot(every_rate.index,every_rate.rate_prod_up,color = colors[i],label = code) plt.grid(False) plt.title('07-08年寬基指數(shù)做多收益率',fontsize=20) plt.legend() plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('收益率',fontsize=15) for label in ax.xaxis.get_ticklabels():# label is a Text instancelabel.set_color('red')label.set_rotation(45)label.set_fontsize(10) for i,label in enumerate(ax.get_xticklabels()):if i%90==0:label.set_visible(True)else:label.set_visible(False)plt.tight_layout() ax.tick_params(bottom=False,top=False,left=False,right=False) #移除全部刻度線 plt.show()''' 上漲時(shí)分日累計(jì)收益率 ''' index_code = ['000001.XSHG','000016.XSHG','000300.XSHG','399101.XSHE'] colors = ['red','orange','yellow','green'] # 時(shí)間取07-17年 time_interval = ['2007-01-01','2008-01-01','2009-01-01'] # time_interval.extend(['20{}-01-01'.format(i) for i in range(10,17+2)])fig,ax=plt.subplots(figsize=(13,8))for i,code in enumerate(index_code):rates_daily_up = []for j in range(len(time_interval)-1):rates_daily_up.extend(cal_rate(code, time_interval[j], time_interval[j+1])[2])rates_daily_up0 = rates_daily_up[1]rates_daily_up_cum = [product(rates_daily_up0[:i]) for i in range(len(rates_daily_up0))]plt.plot(rates_daily_up_cum,color = colors[i],label = code) plt.grid(False) plt.title('07-08年上漲時(shí)分日累計(jì)收益率',fontsize=20) plt.legend() plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('收益率',fontsize=15)plt.tight_layout() plt.show()''' 下跌時(shí)分日累計(jì)收益率 ''' index_code = ['000001.XSHG','000016.XSHG','000300.XSHG','399101.XSHE'] colors = ['red','orange','yellow','green'] # 時(shí)間取07-17年 time_interval = ['2007-01-01','2008-01-01','2009-01-01'] # time_interval.extend(['20{}-01-01'.format(i) for i in range(10,17+2)])fig,ax=plt.subplots(figsize=(13,8))for i,code in enumerate(index_code):rates_daily_up = []for j in range(len(time_interval)-1):rates_daily_up.extend(cal_rate(code, time_interval[j], time_interval[j+1])[3])rates_daily_up0 = rates_daily_up[1]rates_daily_up_cum = [product(rates_daily_up0[:i]) for i in range(18)]plt.plot(rates_daily_up_cum,color = colors[i],label = code) plt.grid(False) plt.title('07-08年下跌時(shí)分日累計(jì)收益率',fontsize=20) plt.legend() plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('收益率',fontsize=15)plt.tight_layout() plt.show()


中小板指做空效果更好,可能低市值指數(shù)更適合做空。

行業(yè)指數(shù)

申萬(wàn)一級(jí)行業(yè)指數(shù),并分成4大類(lèi),金融型,成長(zhǎng)型,消費(fèi)型,周期型
策略標(biāo)的:以上4大類(lèi)行業(yè)
股票組合:當(dāng)日標(biāo)的指數(shù)的成分股,剔除ST股等非正常交易狀態(tài)股票
回測(cè)時(shí)間:2014年3月1日至2019年9月1日
手續(xù)費(fèi)用:在此回測(cè)暫時(shí)忽略

策略步驟: (做多)
向前22日計(jì)算每天(包括當(dāng)天)的成份股組合截面絕對(duì)離散度CSAD,OLS估計(jì)CCK模型中Rm平方的系數(shù)β2。
向前計(jì)算180天內(nèi)的樣本單側(cè)置信區(qū)間10%下限。
向前計(jì)算22日內(nèi)標(biāo)的指數(shù)平均收益率的正負(fù)區(qū)間,運(yùn)用正負(fù)判斷市場(chǎng)趨勢(shì)
向前計(jì)算MA30
開(kāi)倉(cāng):當(dāng)β2小于單側(cè)置信區(qū)間下限,標(biāo)的指數(shù)平均收益率為正,當(dāng)日MA30大于30天前的MA30時(shí),做多標(biāo)的指數(shù)。
清倉(cāng):持有22天后賣(mài)出。
(做空)
所需計(jì)算的指標(biāo)同上文做多策略。
開(kāi)倉(cāng):當(dāng)β2小于單側(cè)置信區(qū)間下限,標(biāo)的指數(shù)平均收益率為負(fù),當(dāng)日MA30小于5天前的MA30時(shí),做空標(biāo)的指數(shù)。
清倉(cāng):持有22天后賣(mài)出。 為了方便對(duì)于行業(yè)指數(shù)和寬基指數(shù)同時(shí)使用以上函數(shù),我們重載了get_price,聚寬的get_price僅針對(duì)寬基指數(shù)。相比于聚寬的函數(shù),它僅能輸入fields參數(shù)為[‘close’,
‘pre_close’]。

def get_price(code,start_date=None,end_date=None,fields='close',count=None):'''重新定義函數(shù)get_price整合對(duì)于行業(yè)和指數(shù)的價(jià)格獲取要求行業(yè)指數(shù)的返回值與jq.get_price返回值相同參數(shù):code,寬基指數(shù)或者行業(yè)指數(shù)代碼,或以代碼為元素的liststart_date與count二選一fields,可選'close'或'pre_close'或['close','pre_close']'''if isinstance(code,list) and len(code[0])==6:price_df = pd.DataFrame(columns=['time','code','close','pre_close'])for i in code:df_temp = get_price(i, start_date=start_date, end_date=end_date, fields=fields, count=count)df2_temp = pd.DataFrame()df2_temp['time']=df_temp.indexdf2_temp['code']=[i]*len(df_temp)df_temp.reset_index(inplace=True,drop=True)df3 = pd.concat([df2_temp,df_temp],join="outer",axis=1)price_df = price_df.append(df3,ignore_index = True)return(price_df)elif len(code)==6:if count:return1 = jq.get_price('000002.XSHG',count = count,end_date=end_date,fields='close').fillna(0)start_date = return1.index[0]q = jq.finance.run_query(query(jq.finance.SW1_DAILY_PRICE).filter(jq.finance.SW1_DAILY_PRICE.code==code,jq.finance.SW1_DAILY_PRICE.date >= start_date,jq.finance.SW1_DAILY_PRICE.date <= end_date))industry = q[['date','close']]if 'pre_close' in fields:pre_close = list(q.close)# print(pre_close[0]/(1+q.iloc[0, -1]/100))pre_close.insert(0, pre_close[0]/(1+q.iloc[0, -1]/100))pre_close.pop()industry['pre_close']=pre_closeindustry.set_index('date', inplace=True)return industryelse:if count:return jq.get_price(code,count = count,end_date=end_date,fields=fields)else:return jq.get_price(code,start_date=start_date,end_date=end_date,fields=fields)

同時(shí)對(duì)獲取成分股函數(shù)稍作更改,增加對(duì)行業(yè)成分股的支持。

def get_stocks(date,index=None):'''功能:根據(jù)日期,獲取該日滿足交易要求的股票相關(guān)數(shù)據(jù),即剔除ST股、上市未滿60天、停牌、跌漲停股參數(shù):date,日期index,指數(shù)代碼,也可以是行業(yè)代碼。在特定指數(shù)的成分股中選股。缺省時(shí)選股空間為全部A股返回:DataFrame類(lèi)型,索引為股票代碼,同時(shí)包含了價(jià)格數(shù)據(jù),方便后續(xù)使用'''stocks = jq.get_all_securities(types=['stock'],date=date)#該日正在上市的股票if index:#特定成分股# 是否寬基指數(shù)if len(index)==11:stock_codes = jq.get_index_stocks(index,date=date)#成分股# 行業(yè)指數(shù)elif len(index)==6:stock_codes = jq.get_industry_stocks(index,date=date)stocks = stocks[stocks.index.isin(stock_codes)] #上市日期大于60個(gè)自然日# start_date 為 [datetime.date] 類(lèi)型stocks['start_date']=pd.to_datetime(stocks['start_date'])date = datetime.strptime(date,'%Y-%m-%d').date()date = pd.to_datetime(date)stocks['datedelta'] = date - stocks['start_date']stocks = stocks[stocks['datedelta'] > timedelta(days=60)]#是否是ST股stocks['is_st'] = jq.get_extras(info='is_st',security_list=list(stocks.index),count=1, end_date=date).T#漲停、跌停、停牌stocks_info = jq.get_price(security = list(stocks.index),fields=['close','high','low','high_limit','low_limit','paused'],count=1,end_date=date,panel=False).set_index('code').drop('time',axis=1)stocks['price'] = stocks_info['close']#順便保存價(jià)格,方便后續(xù)運(yùn)算stocks['paused'] = stocks_info['paused'] == 1#是否停牌stocks['high_stop'] = stocks_info['high'] >= stocks_info['high_limit']#漲停stocks['low_stop'] = stocks_info['low'] <= stocks_info['low_limit']#跌停stocks = stocks[~(stocks['is_st'] | stocks['paused'] | stocks['high_stop'] | stocks['low_stop'])] return stocks

最后將所有函數(shù)的jq.get_price改成我們重載的get_price即可。
以下是消費(fèi)行業(yè)指數(shù)為例,在07-08年的回測(cè)

# 行業(yè)指數(shù) Cycle = ['801020','801030','801040','801050','801710','801720','801730','801890','801170','801180','801160']Consumption = ['801180','801110','801130','801200','801120','801150','801210','801140','801010'] Growth = ['801080','801770','801760','801750','801740']Finance = ['801780','801790']times = ['2014-03-01','2015-01-01','2016-01-01','2017-01-01','2018-01-01','2019-01-01','2019-09-01']''' 行業(yè)指數(shù)做多收益率 ''' # 消費(fèi)行業(yè)指數(shù)為例 index_code = Consumption colors = ['red','orange','yellow','green','magenta','lime','darkorchid','darkorange','blue'] # 時(shí)間取07-17年 time_interval = ['2007-01-01','2008-01-01','2009-01-01'] # time_interval.extend(['20{}-01-01'.format(i) for i in range(10,17+2)])fig,ax=plt.subplots(figsize=(13,8)) for i,code in enumerate(index_code):every_rate = get_everyyear_rate(time_interval, code)plt.plot(every_rate.index,every_rate.rate_prod_up,color = colors[i],label = code) plt.grid(False) plt.title('07-08年消費(fèi)行業(yè)指數(shù)做多收益率',fontsize=20) plt.legend() plt.xlabel('時(shí)間',fontsize=15) plt.ylabel('收益率',fontsize=15) for label in ax.xaxis.get_ticklabels():# label is a Text instancelabel.set_color('red')label.set_rotation(45)label.set_fontsize(10) for i,label in enumerate(ax.get_xticklabels()):if i%90==0:label.set_visible(True)else:label.set_visible(False)plt.tight_layout() ax.tick_params(bottom=False,top=False,left=False,right=False) #移除全部刻度線 plt.show()



消費(fèi)行業(yè)指數(shù)做多效果尚可,但是做空收益率沒(méi)有明顯優(yōu)勢(shì),與原研報(bào)的結(jié)論相仿。

總結(jié)

作為本人第一個(gè)獨(dú)立完成的研報(bào)復(fù)現(xiàn),該研報(bào)參考了聚寬精英任務(wù)獲獎(jiǎng)作品——作者:Eden666的思路。受限于賬號(hào)等級(jí)和硬件水平,本人僅對(duì)研報(bào)完成了復(fù)現(xiàn),在結(jié)論方面,由于沒(méi)有足夠的數(shù)據(jù),沒(méi)有給出更深入的結(jié)論。根據(jù)我們的研究得到了以下結(jié)論:
1、收益率與市值相關(guān),高市值對(duì)于做多的羊群效應(yīng)收益可能更高
2、羊群效應(yīng)明顯不足,收益率不高,大部分時(shí)間為空倉(cāng)狀態(tài),尤其是做空收益很差,可能造成很大損失。

總結(jié)

以上是生活随笔為你收集整理的研报复现系列(六)【国泰君安】基于CCK模型的股票市场羊群效应研究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

色婷婷国产在线 | 久久免费黄色网址 | 亚洲精品视频大全 | 欧美人交a欧美精品 | 国产精品永久在线 | 激情图片qvod | 成人高清在线 | 中文字幕在线观看三区 | 久久精品国产精品亚洲 | 麻豆传媒在线免费看 | 久久经典国产 | 2021国产在线视频 | 国产精品久久久久久久妇 | 麻豆精品传媒视频 | 免费成人结看片 | 日精品 | 久久久久亚洲精品国产 | 国产资源在线免费观看 | 久久天天躁狠狠躁亚洲综合公司 | 91在线入口 | 女人18毛片90分钟 | 黄色大片日本 | 欧美 亚洲 另类 激情 另类 | 欧美日韩网站 | 日韩狠狠操| 99在线免费观看视频 | 伊人午夜 | 亚洲最大av在线播放 | 成人高清av在线 | 91麻豆高清视频 | 99在线高清视频在线播放 | 色老板在线视频 | 国产黄色成人av | av资源在线观看 | 欧美精品被| 麻豆影视在线免费观看 | 亚洲a色 | 91精选在线| 婷婷久久综合网 | www激情久久 | 亚洲免费一级 | 欧美日韩一区二区三区在线免费观看 | 热re99久久精品国产66热 | 亚洲午夜av电影 | 久久深夜| 97精品一区二区三区 | 成人精品国产免费网站 | 成人久久视频 | 视频1区2区 | 天天干天天做 | 美女视频国产 | 亚洲无在线 | 久久久久综合网 | 国产精品理论片在线观看 | 麻豆视频在线免费观看 | 久久婷婷五月综合色丁香 | 91福利视频网站 | 91av视频免费在线观看 | 日韩国产精品一区 | 亚洲综合情 | 成年人在线免费看视频 | 亚洲蜜桃在线 | 日韩中文字幕第一页 | 99精品一区二区 | 国产欧美日韩精品一区二区免费 | 欧美午夜性生活 | 久久激情视频 | 中文字幕一区二区三区久久 | 国产xxxx性hd极品 | 亚洲国产视频a | 成人av资源在线 | 亚洲欧美在线观看视频 | 8x成人在线 | av东方在线 | 81国产精品久久久久久久久久 | 婷婷综合久久 | 国产美女无遮挡永久免费 | 久久露脸国产精品 | 黄色av影院 | 日本精品在线视频 | 久久人人爽av | 国产精品 中文字幕 亚洲 欧美 | 久久久久久视频 | 国产免费又粗又猛又爽 | 91精品影视| 国产精品a成v人在线播放 | 亚洲欧美在线综合 | 午夜精品一区二区三区可下载 | 99视频导航 | 天堂av免费在线 | 国产精品入口久久 | 亚洲精品国产精品国自产 | av免费观看高清 | 一区二区三区四区五区在线 | 成人av亚洲 | 中文字幕乱码视频 | 伊人午夜 | 国产成人三级三级三级97 | 日本三级在线观看中文字 | 91麻豆免费视频 | 中文字幕日韩高清 | 亚洲国产经典视频 | 亚洲一区久久 | 欧美日韩高清在线观看 | 中文字幕丝袜美腿 | 久久久受www免费人成 | 成人av片免费看 | av先锋中文字幕 | 免费亚洲视频 | 久久午夜网| 欧美91成人网 | 91精品啪啪 | 日韩91精品 | 国产三级视频 | 一区二区 不卡 | 偷拍视频一区 | 午夜精品久久久久久久99热影院 | 中文免费在线观看 | 草久久久久久 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久99精品视频 | 久久免费一| 国产成人精品免费在线观看 | 五月婷婷丁香色 | 96亚洲精品久久 | 在线电影播放 | 色婷婷电影网 | 午夜在线看片 | 久久久久久久久久久高潮一区二区 | 久久久久综合网 | 91爱在线| 久久草在线精品 | 国产精品日韩欧美一区二区 | 久久天天综合网 | www.五月天婷婷.com | 亚洲黄色在线 | 伊人影院得得 | 一区二区 精品 | a天堂中文在线 | 欧美网址在线观看 | 欧美色888| 黄色大全在线观看 | 超碰99在线 | 黄色av网站在线观看免费 | 日韩一区二区三区在线观看 | 久久精品视频在线看 | 蜜臀av性久久久久蜜臀av | bbbbb女女女女女bbbbb国产 | 99久热精品| 午夜久久精品 | 欧美黑吊大战白妞欧美 | 成年性视频 | 国内精品久久久久影院一蜜桃 | 亚洲专区视频在线观看 | 成人av电影免费在线观看 | 欧美精品v国产精品v日韩精品 | 99热精品国产 | 天天色天天上天天操 | 国产在线观看一 | 一区二区 精品 | 在线播放 一区 | 在线不卡a | 成年人在线观看网站 | 综合在线观看 | 欧美激情综合五月色丁香小说 | 免费看av在线 | 日韩视频二区 | 国产色秀视频 | 97视频在线 | 久久黄色成人 | 九九热免费视频在线观看 | 天堂视频一区 | 欧美另类一二三四区 | 久久精品三级 | 欧美亚洲专区 | 黄色高清视频在线观看 | 最近2019好看的中文字幕免费 | 欧美日韩高清不卡 | 日日干天天爽 | 日韩欧美精品在线观看视频 | 黄污网站在线 | 一区二区三区四区五区在线 | 亚洲精品99久久久久中文字幕 | 激情综合啪 | 91免费观看国产 | 99久久精品午夜一区二区小说 | 国产高清黄色 | 亚洲va综合va国产va中文 | 热久久最新地址 | 一区二区精品在线视频 | 最新av在线播放 | 国产视频不卡一区 | 99r在线播放| 黄色影院在线免费观看 | 99视屏| 国产一区二区在线免费观看 | 日韩av免费在线看 | 美女网站色在线观看 | 久久久久久久久久电影 | 91视频在线网址 | 亚洲欧洲成人精品av97 | 国产精品原创av片国产免费 | 国产精品国产亚洲精品看不卡 | 国产精品网址在线观看 | 欧美精选一区二区三区 | 国产精品中文在线 | 97超碰中文字幕 | 国产高清第一页 | 夜夜摸夜夜爽 | 中文字幕一区三区 | 欧美成人999 | 久久免费视频在线观看6 | 国产成人免费观看久久久 | 波多野结衣资源 | 免费久久99精品国产婷婷六月 | 国产精品毛片久久蜜 | 九色自拍视频 | 欧美一级久久久久 | 国产免费人成xvideos视频 | 欧美精品久久久久久久久久丰满 | 干干干操操操 | www.狠狠干 | 男女拍拍免费视频 | 在线精品在线 | 草久在线播放 | 成人午夜电影在线播放 | 狠狠色丁香久久婷婷综合丁香 | 精品一二三区视频 | a视频在线播放 | 免费观看国产视频 | www.夜夜操| 国产 日韩 欧美 中文 在线播放 | www.黄色在线 | 99久久精品免费看国产免费软件 | 中文字幕免费高清在线 | 国产 欧美 日本 | 国产一级在线免费观看 | 日韩婷婷| 狠狠色丁香九九婷婷综合五月 | 色婷婷狠狠五月综合天色拍 | 四季av综合网站 | 99精品国产一区二区 | 91精品在线观看入口 | 久久久久电影 | 高清免费在线视频 | 成人免费在线观看电影 | 丁香花在线观看免费完整版视频 | 黄污网 | 久久国产精品第一页 | 久久免费国产视频 | 国产成人在线免费观看 | 国产香蕉久久精品综合网 | 又黄又刺激又爽的视频 | 超碰国产97 | 免费婷婷| 一区二区国产精品 | 奇米影视777四色米奇影院 | 欧美成人精品欧美一级乱 | 国产成人a亚洲精品v | 国产精品久久久久三级 | 国产视频一区二区在线观看 | 色综合久久五月 | 一区二区三区四区精品视频 | 最近2019中文免费高清视频观看www99 | 国产精品一区二区在线观看 | 成人免费看片网址 | 亚洲日本中文字幕在线观看 | 久久久精品小视频 | 久久久久国产精品午夜一区 | 午夜视频在线网站 | 国产91av视频在线观看 | 99麻豆视频| 91看片淫黄大片在线播放 | 这里有精品在线视频 | 久久久久成人精品免费播放动漫 | 亚洲免费在线观看视频 | 久久久久国产精品一区二区 | 国产精品9区 | 91精品国产麻豆国产自产影视 | 亚洲欧美视频一区二区三区 | 国产香蕉视频在线播放 | 国产精品乱码一区二区视频 | 久久久久综合精品福利啪啪 | 国产欧美日韩视频 | 久久撸在线视频 | 在线影视 一区 二区 三区 | 麻豆视频免费在线 | 91色视频| 欧美日韩一区二区三区视频 | 日韩三级av | 麻豆国产电影 | 深爱开心激情网 | 天天射天天搞 | 久久99精品久久只有精品 | 18国产精品白浆在线观看免费 | 免费视频久久久久 | 国产精品一区二区你懂的 | 中文字幕在线免费看 | 九九热99视频 | 日韩一级黄色av | 久久久久观看 | 最近日韩中文字幕中文 | 精品国产精品久久 | 五月婷在线 | 亚洲精品国产麻豆 | 久久99精品波多结衣一区 | 亚洲精品高清在线观看 | 成人毛片久久 | 欧美视频在线观看免费网址 | 天天操福利视频 | 在线观看第一页 | 国产亚洲精品久久网站 | 久久这里精品视频 | 国产在线精品观看 | 欧美一级电影片 | 久久9999久久免费精品国产 | 久久精品牌麻豆国产大山 | aa一级片 | 成人午夜久久 | 精品少妇一区二区三区在线 | 一级片免费观看 | 99热手机在线 | 国产色道 | 久久情爱 | 四虎成人精品永久免费av九九 | 久艹视频在线免费观看 | 伊人成人精品 | 中文在线a∨在线 | 免费aa大片| 中文字幕在线色 | 国产精品成久久久久 | 日韩久久精品一区二区 | 欧美成人黄色片 | 国产精品刺激对白麻豆99 | 日韩一二区在线观看 | 麻花豆传媒mv在线观看网站 | 久久久福利视频 | 99视频在线观看免费 | 国产不卡精品视频 | 亚州精品视频 | 91视频电影 | 国产又粗又猛又黄又爽视频 | 在线播放日韩av | 国产一区二区视频在线 | 狠狠色丁香久久婷婷综合_中 | 久久综合综合久久综合 | 亚洲九九九在线观看 | 91久久久久久久一区二区 | 亚洲综合欧美精品电影 | 一区二区欧美在线观看 | 国产午夜麻豆影院在线观看 | 免费十分钟 | 久久国产精品网站 | 欧美一区二区三区激情视频 | 伊人狠狠操 | 最近高清中文在线字幕在线观看 | 亚洲全部视频 | 国产精品免费观看久久 | 99色 | 麻豆久久久久久久 | 日韩aⅴ视频 | 中文字幕在线日 | 综合网五月天 | 欧美一二三区在线播放 | 国产精品高清在线 | 少妇搡bbbb搡bbb搡69 | 五月天婷婷在线播放 | 中文字幕第 | 超碰官网| 久久久999免费视频 日韩网站在线 | 一区二区中文字幕在线播放 | 成人免费观看在线视频 | 996久久国产精品线观看 | 国产一区在线播放 | www久久 | 欧美一级免费 | 国产精品18毛片一区二区 | 久久视频这里只有精品 | 国产无限资源在线观看 | 永久免费av在线播放 | 久久久久国产成人免费精品免费 | 不卡的av在线播放 | 久久综合中文字幕 | 久草视频免费 | 午夜av在线播放 | 婷婷在线播放 | 成人午夜性影院 | 一本一本久久a久久精品综合 | 91免费版在线 | 久草久草久草久草 | 国产精品国产亚洲精品看不卡15 | 精品婷婷 | 日本精品免费看 | 81精品国产乱码久久久久久 | 日韩在线观看一区二区三区 | 四虎在线免费观看 | 国产三级视频 | 免费进去里的视频 | 国产女教师精品久久av | 亚洲国产高清在线观看视频 | 欧美一区二区三区在线看 | 久久久久免费视频 | 久久久免费网站 | 91亚洲精品乱码久久久久久蜜桃 | 99久久久久久国产精品 | 色综合五月天 | 亚洲国产福利视频 | 欧美性爽爽 | 五月婷婷,六月丁香 | 亚洲国产中文字幕 | 综合色播 | 亚洲三级网 | 日韩美av在线 | 成人黄色短片 | 91色在线观看视频 | 成人免费一级片 | 久久99精品久久久久婷婷 | 久久亚洲国产精品 | 婷婷色在线观看 | 欧洲av不卡 | 西西大胆免费视频 | 蜜臀av性久久久久av蜜臀妖精 | 色姑娘综合 | 五月花婷婷| 亚洲自拍av在线 | 99热在| av在线官网 | 亚洲人在线7777777精品 | 欧美国产三区 | 日韩中文字幕在线 | 91久久影院 | 在线a人v观看视频 | 黄p在线播放 | 欧美日韩一区二区三区不卡 | 欧美精品一区二区三区一线天视频 | 91香蕉视频色版 | 91av在线国产 | 久久久久久久久久福利 | 国产一区二区精品 | 日韩欧美久久 | 欧美精品做受xxx性少妇 | 91网址在线| 久久亚洲影视 | 四虎影视av | 在线观看视频福利 | 国产一级特黄毛片在线毛片 | 91色吧 | 草久久久久 | 天天搞天天干 | 91在线视频免费 | 日韩欧美在线综合网 | 国产成人av电影在线观看 | 天天干天天操av | 久久图| 人人要人人澡人人爽人人dvd | 手机版av在线| 日韩精品免费一区 | 午夜久久久久久久 | 丁香婷婷激情 | 国产四虎影院 | 午夜丁香视频在线观看 | 瑞典xxxx性hd极品 | 精品91 | 成人午夜电影网 | 综合久色 | 97精品国产91久久久久久 | 国产99久久久精品 | 干 操 插| 丁香六月中文字幕 | 人人看看人人 | 在线观看免费成人av | 成人免费毛片aaaaaa片 | 亚洲国产成人高清精品 | 亚洲在线a| 成人久久18免费网站 | 1024手机基地在线观看 | 中文字幕一区二区三区乱码在线 | 国产精品激情偷乱一区二区∴ | www九九热| 中文av免费 | 国产精品成人一区二区三区吃奶 | 精品国产一区二区三区久久久 | 久久视频精品在线 | 亚洲天堂视频在线 | 一区二区欧美在线观看 | 亚洲最大av在线播放 | www.五月激情.com | 麻豆视频国产 | 日韩成人在线免费观看 | 天天操网址 | 亚洲 欧美 91 | 国产精品破处视频 | 中文永久字幕 | 中文字幕在线观 | 狠狠久久婷婷 | 成人97人人超碰人人99 | 日日骑| 激情开心| 在线免费观看成人 | 国产精品普通话 | 国产一线天在线观看 | 97在线成人 | 91av在线免费播放 | av三级av| 亚洲免费不卡 | 久久这里只有精品首页 | 国产高清精品在线观看 | 免费电影一区二区三区 | 久久久久久久久免费视频 | 亚洲 成人 一区 | 黄色小网站在线观看 | 久久久久久久久久电影 | 亚洲精品国产精品国自产在线 | 久青草国产在线 | www.久久久久 | 日日添夜夜添 | 国产又粗又猛又色又黄视频 | 男女激情网址 | 久久婷婷综合激情 | 国产免费嫩草影院 | 亚洲精品综合一区二区 | 九色在线视频 | 午夜久久视频 | 91激情 | 国产精品一区一区三区 | 国产精品网在线观看 | 色射爱 | 91在线免费视频观看 | 久久精品99国产 | 99热在线国产精品 | 1区2区3区在线观看 三级动图 | a级黄色片视频 | 青青久草在线视频 | 毛片激情永久免费 | www.日韩免费| 久久免费在线观看 | 日本婷婷色 | 色视频在线免费观看 | 国产成人精品在线播放 | 91久久丝袜国产露脸动漫 | av在线免费播放网站 | 欧美激情综合五月色丁香 | 国产精品国产三级国产aⅴ入口 | 天天色中文 | 激情av一区二区 | 日日夜日日干 | 亚洲精品国产成人 | 92中文资源在线 | 激情五月播播久久久精品 | 欧美日韩国产精品一区二区亚洲 | 欧美激情va永久在线播放 | 久久9999久久 | 91精品国产99久久久久 | 日韩在线视频一区 | www.夜夜夜 | 中文字幕黄色网 | 日韩av一区二区在线播放 | 国产午夜精品理论片在线 | 久草在线观 | 99综合电影在线视频 | 国产一区二区日本 | 99理论片 | 日韩欧美一区二区三区视频 | 97香蕉久久超级碰碰高清版 | 亚洲精品乱码久久久久久蜜桃动漫 | 中文字幕 在线 一 二 | 久草电影在线观看 | 国产免费午夜 | 久久婷婷久久 | 天天色天天操综合网 | 一级黄色在线免费观看 | 尤物九九久久国产精品的分类 | 欧美激情综合色综合啪啪五月 | 天天操天天爱天天爽 | 国产在线精品二区 | 日日碰狠狠躁久久躁综合网 | 97国产大学生情侣白嫩酒店 | 91日韩精品视频 | ww视频在线观看 | 麻豆94tv免费版 | 日韩久久久久久久久久 | 日韩高清网站 | 色射色| 免费99视频 | 亚洲午夜精 | 日日夜夜中文字幕 | 天天天综合网 | 亚洲国产精品成人女人久久 | 插插插色综合 | 四虎5151久久欧美毛片 | 久久免费视频网站 | 国产三级香港三韩国三级 | 夜夜操狠狠操 | 欧美三人交 | 久久国产成人午夜av影院宅 | 日本精品久久久久影院 | 国产精品久久久久久久av大片 | 日本在线观看中文字幕 | 国产精品毛片久久久久久 | 激情自拍av | 日韩在线免费播放 | 免费在线a | 91麻豆看国产在线紧急地址 | 欧美黄色特级片 | 国产午夜在线观看 | 99久久精品午夜一区二区小说 | 啪啪动态视频 | 97在线免费视频观看 | 丝袜美腿在线播放 | 五月婷婷av| 超碰在线人人爱 | 96av视频| 午夜视频免费在线观看 | 黄色av网站在线免费观看 | 久久久免费国产 | 亚洲成av人片在线观看香蕉 | 天天射天天干天天爽 | 日韩欧美一区二区在线 | www视频免费在线观看 | 在线观看日韩视频 | 九九视频一区 | 黄色在线看网站 | 日韩成人精品一区二区 | 97超碰资源网 | 最近最新mv字幕免费观看 | 成人a毛片 | 91免费国产在线观看 | 天天爽天天碰狠狠添 | 欧美日韩有码 | 午夜性盈盈 | 日韩欧美不卡 | 亚洲免费在线观看视频 | 视频精品一区二区三区 | 在线播放精品一区二区三区 | 国产精品麻豆三级一区视频 | 特级毛片网| 久久精品区| 亚洲春色综合另类校园电影 | 日韩精品一区二区久久 | 欧美日韩天堂 | 亚洲精品777 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 996久久国产精品线观看 | 黄色软件在线观看免费 | 亚洲精品视频免费在线 | av片在线观看 | 天天性天天草 | 去看片 | 日韩av网页 | 久久精品999 | 国产精品一区二区在线观看 | 91麻豆免费视频 | 一区三区视频在线观看 | av成人免费在线 | 色综合欧洲 | 欧美夫妻性生活电影 | 免费看黄色大全 | 国产在线色站 | 免费av大全| 午夜成人影视 | 黄色在线看网站 | 国产录像在线观看 | 久久免费中文视频 | 亚洲视频精品 | 欧美精品中文 | 中文字幕日韩国产 | 色五月色开心色婷婷色丁香 | 69av网| 欧美精品二区 | 在线视频 成人 | 天天草综合网 | 亚洲精品乱码久久久久久 | 日韩精品一区二区久久 | 国产精品a成v人在线播放 | 国产h片在线观看 | 国产在线免费观看 | 国产福利在线不卡 | 狠狠干,狠狠操 | 国产在线国偷精品产拍免费yy | 国产午夜精品视频 | 久久99视频精品 | 国产精品一区二区免费在线观看 | 人人干人人做 | 国产精品久久久久久五月尺 | 国产一级二级在线观看 | 婷婷在线综合 | 国产二区免费视频 | 欧美疯狂性受xxxxx另类 | 欧美va电影| 国产精品观看在线亚洲人成网 | 日韩精品视频免费专区在线播放 | 色婷婷在线播放 | 国产精品涩涩屋www在线观看 | 免费午夜在线视频 | 亚洲午夜精品久久久 | 亚洲日本国产 | 亚洲免费av在线播放 | 国产不卡在线视频 | 成人a在线观看 | 免费看一及片 | 久久久久久久久久久久久9999 | 亚洲成人av影片 | 日本中文字幕高清 | 色久网| 人人舔人人爱 | 久久情侣偷拍 | 日韩在线视频免费观看 | 黄色国产大片 | a视频在线看 | 久青草视频在线观看 | 91一区啪爱嗯打偷拍欧美 | 在线视频日韩欧美 | 中文字幕资源站 | 中文字幕在线观看免费高清完整版 | va视频在线 | 美女视频黄色免费 | 婷婷色5月 | 六月丁香综合 | 最近高清中文在线字幕在线观看 | 欧美视频二区 | 免费看黄色小说的网站 | 日韩有码第一页 | 婷婷成人亚洲综合国产xv88 | 亚洲综合视频在线播放 | 国产不卡在线看 | 国产精品99久久免费观看 | 国产精品美女在线观看 | 婷婷综合在线 | 96国产在线| 久操中文字幕在线观看 | 亚洲精品xxxx| 一区视频在线 | 青青看片 | 区一区二区三区中文字幕 | 亚州国产精品久久久 | 国产一区二区三区黄 | 亚洲天堂精品 | 久久在线免费观看 | 国产精品亚洲综合久久 | 人人插人人草 | 精品国产成人 | 九九视频免费在线观看 | 久久精品国产免费 | 98超碰人人 | 中国精品一区二区 | 天天看天天干 | 中文字幕二区 | 欧美日韩不卡一区二区三区 | 欧美在线观看视频一区二区三区 | 中文字幕一二三区 | 国产精品一区二区三区在线免费观看 | 国产精品嫩草影视久久久 | 国产在线播放观看 | 久久久久麻豆v国产 | 天天操天天操天天操 | 三级av小说 | 日本h在线播放 | 毛片的网址 | 久久全国免费视频 | 黄网在线免费观看 | 久久精品国产久精国产 | 97色在线观看免费视频 | 国产69精品久久久久久 | 天天操天 | 手机看国产毛片 | 又大又硬又黄又爽视频在线观看 | 丁香婷婷久久久综合精品国产 | 成人精品视频久久久久 | 日日干干 | 亚洲精品无 | 91视频一8mav | 三级黄色在线观看 | 四虎国产精品免费观看视频优播 | 久久爽久久爽久久av东京爽 | 91av视频网| 天天干天天操天天入 | 在线中文字幕观看 | 亚洲人久久久 | 玖玖在线视频观看 | 国产精品久久久久久久久搜平片 | 91污污视频在线观看 | 91在线看视频免费 | 五月天婷婷在线视频 | 欧美人操人 | 中文字幕日韩精品有码视频 | 国产无套精品久久久久久 | 99视频在线精品国自产拍免费观看 | aaa免费毛片 | 免费日韩 精品中文字幕视频在线 | www.夜夜操| 青春草国产视频 | wwwav视频| 日韩免费观看一区二区 | 97国产大学生情侣酒店的特点 | 日日日操| 偷拍视频一区 | 精品欧美日韩 | 午夜 免费 | 日本在线视频一区二区三区 | 日本久久综合视频 | 久久国产精品99国产 | 久色小说| 日韩一区二区三区在线观看 | 成人电影毛片 | ,午夜性刺激免费看视频 | 欧美三级高清 | 久久婷五月 | 免费人成网 | 色婷婷福利视频 | 国产在线一区二区三区播放 | 久久国产精品一二三区 | 一区二区三区韩国免费中文网站 | 免费视频xnxx com | 国产福利免费看 | 91网址在线看 | 天天射天天色天天干 | 久久99精品久久久久久 | 91精品国产电影 | 蜜臀久久99静品久久久久久 | 成人黄色在线看 | 四川妇女搡bbbb搡bbbb搡 | 91喷水 | 在线天堂v | 在线中文字幕电影 | 天天曰天天曰 | 国产精品高清一区二区三区 | 91精品在线播放 | 天天操夜夜想 | 911香蕉视频 | 嫩草av在线 | 国产又粗又长又硬免费视频 | 黄色视屏免费在线观看 | 日本aaaa级毛片在线看 | 久久精品国产精品亚洲 | 国产成人精品综合久久久 | 国产精品孕妇 | 久久人人97超碰国产公开结果 | 午夜在线观看一区 | 亚洲色图激情文学 | 亚洲综合狠狠干 | 免费日韩av片 | 六月激情丁香 | 国产男女无遮挡猛进猛出在线观看 | 久久人人艹 | 91九色在线视频观看 | 中文字幕永久免费 | 手机色站 | 成 人 黄 色 视频播放1 | 久久久久久久久久久影视 | 国产日韩精品一区二区在线观看播放 | 国产精品精品久久久 | 国产精品一区二区三区在线 | 黄色大片中国 | 国产精品一区二区在线免费观看 | 91理论片午午伦夜理片久久 | 亚洲精品乱码久久久久久蜜桃动漫 | 一区 二区 精品 | 人人爱夜夜操 | 久久这里只精品 | 911香蕉视频 | 国产亚洲精品久久久久动 | 91精品欧美一区二区三区 | 成人av中文字幕在线观看 | 日韩精品无| 日韩av片无码一区二区不卡电影 | 色综合久久88 | 99精品热视频 | 免费成人av| 曰韩在线| 天天爱天天射天天干天天 | 91精品亚洲影视在线观看 | 亚洲精品国精品久久99热 | 96av麻豆蜜桃一区二区 | 91色亚洲| 免费日韩在线 | 日韩精品久久一区二区三区 | 黄色免费电影网站 | 国产资源网站 | 欧美精品网站 | 精品久久久久久一区二区里番 | 亚洲视频久久久久 | 国产xx在线| 国产一区二区三精品久久久无广告 | 国产原创在线视频 | 久久夜色精品国产欧美乱 | 日韩大片免费观看 | 日韩免费观看一区二区三区 | 国产精品久久久久久影院 | 久久久精品国产一区二区三区 | 中文字幕在线专区 | 天天干夜夜想 | 国产成在线观看免费视频 | 久久综合九色综合97_ 久久久 | 97人人爽人人 | 91在线观 | 午夜在线免费观看 | 亚洲精品在线观看不卡 | 中日韩在线视频 | 国产精品99久久久久久有的能看 | 久久久91精品国产一区二区精品 | 欧美日韩xxx | 99久久99视频只有精品 | 国产视频1 | 精品a视频 | 91麻豆精品一区二区三区 | 国产福利91精品 | 亚洲免费av一区二区 | 亚洲国产色一区 | 视频在线播放国产 | 日韩簧片在线观看 | 人人干狠狠操 | 久久99亚洲网美利坚合众国 | 97国产大学生情侣酒店的特点 | 午夜国产一区二区三区四区 | 久久99日韩 | 欧美日韩不卡在线观看 | 欧美国产不卡 | 又黄又爽又湿又无遮挡的在线视频 | 成人91在线 | 97在线观看视频免费 | 欧美色图亚洲图片 | 欧美孕交vivoestv另类 | 免费看黄的视频 | 成人 国产 在线 | 韩国一区二区三区视频 | 欧美一级片在线播放 | 丁香九月激情 | 久久久久久国产精品亚洲78 | 天干啦夜天干天干在线线 | 中文字幕一区二区三区视频 | 一区三区在线欧 | av在线播放一区二区三区 | 欧美性生活小视频 | 国产麻豆剧传媒免费观看 | 久久成人国产精品 | avav99| 日本成人免费在线观看 | 91在线操 | 少妇搡bbbb搡bbb搡aa | 国产成人亚洲在线观看 | 亚洲乱码中文字幕综合 | 婷婷新五月 | 国产成人免费在线观看 | 色婷婷精品大在线视频 | 日韩视频免费在线 | 亚洲欧美日韩国产一区二区 | 久久精品久久精品久久 | 激情视频国产 | 蜜臀av在线一区二区三区 | 日韩手机在线观看 | 在线观看视频免费大全 | 日韩精品一区二区三区中文字幕 | 久久五月婷婷丁香社区 | 中午字幕在线观看 | 中文高清av | 天天舔天天射天天操 | 国产人成在线观看 | 日韩在线 一区二区 | 色av网站 | 特级a老妇做爰全过程 | 国产精品video | 久久99久| 久久激情五月丁香伊人 | 日日操网站 | www.婷婷com| 欧美激情片在线观看 | 久久久久久不卡 | 91麻豆.com| av中文字幕第一页 | 黄网站app在线观看免费视频 | 中日韩欧美精彩视频 | 国产精品久久婷婷六月丁香 | 97操碰| 国产精品不卡av | 国产小视频在线观看免费 | 久久刺激视频 | 麻豆免费看片 | 日日夜夜网站 | 草在线 | 欧美日韩亚洲一 | 91精品色 | 久久免费播放视频 | 午夜精品福利影院 | 免费手机黄色网址 | 99超碰在线观看 | 欧美性色黄大片在线观看 | 国产午夜麻豆影院在线观看 | 亚洲精品视频二区 | 超碰人人乐 | 久草国产在线观看 | 色婷婷免费视频 | 国产成人精品亚洲日本在线观看 | www免费| 最新中文字幕 | 在线观看黄色免费视频 | 一二区电影 | 香蕉视频在线免费 | 中文字幕在线看视频 |