python探究小市值因子的有效性
前言:在Barra的10個(gè)風(fēng)格因子中,size(市值)因子引起了很多人的關(guān)注。其中就包括著名的小市值因子。
有的人將小市值股票定義為,按照市值排序,后50%的股票是小市值股票。
而本文中,將股票按照每日收盤(pán)價(jià)的市值排序,令后30%的股票是小市值股票。
設(shè)計(jì)一個(gè)簡(jiǎn)單的投資策略,檢驗(yàn)小市值因子的有效性。
每日收盤(pán)前,以收盤(pán)價(jià)等權(quán)重買(mǎi)入當(dāng)日流通市值最小的30%股票。
第二日收盤(pán)前,立刻賣(mài)出前一日的股票倉(cāng)位,買(mǎi)入第二日流通市值最小的30%股票。
接下來(lái),以此類(lèi)推。。
最終查看按照該策略進(jìn)行投資,近10年來(lái)的投資收益情況。
數(shù)據(jù)來(lái)源:2009年3月17日至2019年3月15日,中國(guó)A股市場(chǎng)上所有股票(股票總數(shù)隨著時(shí)間在變動(dòng))的‘
股票代碼、交易日期、收盤(pán)價(jià)、日個(gè)股交易股數(shù)、日個(gè)股交易金額、日個(gè)股流通市值、日個(gè)股總市值、考慮現(xiàn)金紅利再投資的日個(gè)股回報(bào)率、交易狀態(tài)。
其對(duì)應(yīng)的代碼如下:
Stkcd,Trddt,Clsprc,Dnshrtrd,Dnvaltrd,Dsmvosd,Dsmvtll,Dretwd,Trdsta
代碼如下:
#本程序?qū)崿F(xiàn)了小盤(pán)因子的收益率分析 #先導(dǎo)入數(shù)據(jù),保存每日個(gè)股的數(shù)據(jù) import pandas as pd import numpy as np""" data_raw = pd.read_csv(".\\new_total_little_size.csv") #處理回報(bào)率數(shù)據(jù),使其對(duì)應(yīng)x日后的回報(bào)率 data_x = data_raw["Dretwd"].values data_x = data_x.flatten() length = len(data_raw) data_new_x = np.zeros(length) x = 1 data_new_x[0 : length - x] = data_x[x : length] data_raw["Dretwd"] = data_new_x data_raw = pd.DataFrame(data_raw).sort_values(by = ["Trddt", "Dsmvosd"]) data_raw.to_csv("new2_total_little_size.csv", index = False)data_raw = pd.DataFrame(pd.read_csv(".\\new2_total_little_size.csv")) print("OK") #用于讀取文件數(shù)據(jù),并找到時(shí)間間隔點(diǎn),寫(xiě)入文件location中, 此處用簡(jiǎn)單的二分法快速查詢時(shí)間間隔點(diǎn)。 data = data_raw location = [] for i in range(1500, len(data_raw) - 1, 1500):if data_raw["Trddt"][i - 1500] != data_raw["Trddt"][i]:left, right = i - 1500, ileft_date, right_date = data_raw["Trddt"][i - 1500], data_raw["Trddt"][i]while True:judge = int((left + right) / 2)if data["Trddt"][judge] == data["Trddt"][judge + 1] and data["Trddt"][judge] == left_date:left = judgecontinueif data["Trddt"][judge] == data["Trddt"][judge - 1] and data["Trddt"][judge] == right_date:right = judgecontinueif data["Trddt"][judge] != left_date and data["Trddt"][judge] != right_date:print("find new one")breakif data["Trddt"][judge] != data["Trddt"][judge - 1]:location.append(judge)breakif data["Trddt"][judge] != data["Trddt"][judge + 1]:location.append(judge + 1)break with open("location_little_size", "a+", encoding = "utf-8") as f:for i in range(len(location)):f.write(str(location[i]) + "\n") """data_raw = pd.DataFrame(pd.read_csv(".\\new2_total_little_size.csv")) print("OK") time_table = [] with open("location_little_size", "r") as f:for line in f:line = line.strip('\n')time_table.append(int(line)) rate1 = [] rate2 = [] rate3 = [] for i in range(len(time_table)):if i == 0:begin = 0end = time_table[i] - 1else:begin = time_table[i-1]end = time_table[i] - 1return_rate = 0#取前30%的小市值股票divisor = round((end - begin) * 0.3)for j in range(divisor):return_rate += float(data_raw["Dretwd"][begin + j])rate1.append(return_rate / divisor)return_rate = 0#取后30%的大市值股票divisor = round((end - begin) * 0.3)for j in range(divisor):return_rate += float(data_raw["Dretwd"][end - divisor + j + 1])rate2.append(return_rate / divisor)return_rate = 0#取30%-70%的中等市值股票begin_length = round((end - begin) * 0.3)divisor = round((end - begin) * 0.4)for j in range(divisor):return_rate += float(data_raw["Dretwd"][begin + begin_length + j])rate3.append(return_rate / divisor)for i in range(len(rate1)):print(rate1[i])print("Changing!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")for i in range(len(rate2)):print(rate2[i])print("Changing!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")for i in range(len(rate3)):print(rate3[i]) #按照位置輸出日期 #for i in range(len(time_table)): # print(data_raw["Trddt"][time_table[i]])#讀取指數(shù)文件數(shù)據(jù) #data_index = pd.read_csv(".\little_size\index_2009-2019\TRD_index.csv")結(jié)論:
如下圖所示,很明顯,小市值因子是有效的,按照該理想策略的投資收益率,顯著高于其他市值因子。
大概在2018年初,有一段時(shí)間小市值因子失效了,引得行業(yè)內(nèi)跟蹤小市值因子或者以此為策略的人開(kāi)始懷疑人生了。
好在2019年,小市值因子重新煥發(fā)生機(jī)。
除此之外,也可以看出,隨著市值的增大,該策略的投資回報(bào)率在下降。
運(yùn)行結(jié)果太長(zhǎng)了,自己搜集數(shù)據(jù)來(lái)運(yùn)行吧,分享給對(duì)小市值因子感興趣的人。
總結(jié)
以上是生活随笔為你收集整理的python探究小市值因子的有效性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关不掉的窗口
- 下一篇: python爬取千图网高清图