之前分享過選擇基金投資驾诈,最好是選擇股票型的指數(shù)基金凤瘦,而且是采用不定期不定額的投資方式冤竹,那么針對沒有空閑時(shí)間的上班族拂封,如果選擇每周定投、每兩周定投鹦蠕,選擇不同的定投日對收益有什么影響呢冒签?
對這個(gè)非常的好奇,所以上網(wǎng)抓取了大成滬深300指數(shù)基金和工銀滬深300指數(shù)基金從成立以來的歷史數(shù)據(jù)钟病,主要是分析每個(gè)交易日中萧恕,基金上漲的概率,通過這個(gè)結(jié)果再探討假設(shè)每周一肠阱、周二票唆、周三、周四屹徘、周五定投走趋,收益率各是多少。
一噪伊、大成滬深300指數(shù)基金
1簿煌、網(wǎng)頁抓取數(shù)據(jù)&數(shù)據(jù)整理
##從網(wǎng)頁上抓取數(shù)據(jù)
library("XML")
n <- 0:44
for(i in n){
url_a <- "http://quotes.money.163.com/fund/jzzs_519300_"
url_b <- ".html?start=2006-03-02&end=2017-05- 05&sort=TDATE&order=desc"
url = paste(url_a,i,url_b,sep="")
tbls <- readHTMLTable(url) #確定網(wǎng)頁地址,通過網(wǎng)頁地址分析網(wǎng)頁表格
sapply(tbls,nrow) ##第1個(gè)表格是需要的表格
fund_data <- readHTMLTable(url,which=1)
datapath=paste("F:/大成滬深300/fund_data",i,".csv",sep="")
print(write.csv(fund_data,file = datapath))
}
總共抓取了44個(gè)文件鉴吹,再將這44個(gè)文件匯總到一個(gè)文件中:
##將44個(gè)文件內(nèi)的數(shù)據(jù)整合到一個(gè)文件夾中
setwd("F:/")
a = list.files("大成滬深300指數(shù)")
dir = paste("./大成滬深300指數(shù)/",a,sep="")
n = length(dir)
fund_data = read.csv(file = dir[1],header=T,sep=",")
for (i in 2:n){
new.data = read.csv(file = dir[i], header=T, sep=",")
fund_data = rbind(fund_data,new.data)
}
write.csv(fund_data,file = "./大成滬深300指數(shù)/fund_data.csv",row.names=F)
到這里姨伟,抓取歷史數(shù)據(jù)就結(jié)束了。
2豆励、數(shù)據(jù)處理
fund_data <- read_excel("F:/大成滬深300指數(shù)/fund_data.xlsx")
View(fund_data)
##重命名
names(fund_data) <- c("date","days","Unit net worth","Accumulated net worth","growth rate")
##刪除多余的一列
fund_data <- fund_data[,-6]
fund_data
##按日期進(jìn)行排序夺荒。
library(dplyr)
fund_data <- arrange(fund_data,desc(date))
fund_data
##按照days分組.
days_funddata <- group_by(fund_data,days)
days_funddata##數(shù)據(jù)計(jì)算,用summarise()函數(shù)
days_funddata <- summarise(days_funddata,count=n())
days_funddata
得到的結(jié)果是分成了7組肆糕,我覺得挺奇怪的般堆,就計(jì)算了一下每個(gè)組的類別,得到以下結(jié)果:
周六诚啃、周日各有4天和2天的交易日淮摔,難道之前還有周末也進(jìn)行交易了?
接著始赎,開始篩選出各個(gè)交易日上漲的數(shù)據(jù)和橙,以及上漲的次數(shù)仔燕,同時(shí)計(jì)算上漲的概率:
##自定義函數(shù)計(jì)算每天增長率大于0的數(shù)據(jù)。
days_data <- function(n){
days_data <- fund_data[fund_data$days == n,]
days_data <- days_data[days_data$`growth rate` > 0,]
return(days_data)
}
##周一增長率大于0的數(shù)據(jù)
days_data(1)
##周二增長率大于0的數(shù)據(jù)
days_data(2)
##周三增長率大于0的數(shù)據(jù)
days_data(3)
##周四增長率大于0的數(shù)據(jù)
days_data(4)
##周五增長率大于0的數(shù)據(jù)
days_data(5)
##重新組合成數(shù)據(jù)
newdays <- c("1","2","3","4","5") ##周一到周五
newtotal <- c("527","542","544","540","536") ##周一到周 五總共的交易日
newcount <- c("308","302","287","245","300") ##周一到 周五總共的交易日上漲次數(shù)
newdata <- data.frame(newdays,newtotal,newcount)
##計(jì)算周一到周五交易日上漲的概率
newcount <- as.numeric(newcount)
newtotal <- as.numeric(newtotal)
rate <- newcount/newtotal
newdata <- cbind(newdata,rate)
結(jié)果如下:
也就是說魔招,每周定投晰搀,不同的交易日對于大成滬深300指數(shù)基金的收益還是有點(diǎn)影響的,比如說周一和周五上漲的概率大些办斑,而周四上漲概率相對低些外恕,但是,總體概率相差不大乡翅。
那么是不是真的如此呢鳞疲?
接著計(jì)算周一到周五分別的收益率。
3.定投日為周一到周五的收益率
選擇了2012年1月4日至2017年5月5日的歷史數(shù)據(jù)蠕蚜,假設(shè)5月5日將全部份額的基金贖回尚洽,計(jì)算收益率。
3.1每周定投計(jì)算過程如下:
##自定義函數(shù)靶累,每周定投1000腺毫,計(jì)算從2012年1月2日至2017年5月5日
vote_data <- function(n,money){
##選擇子集
vote_data <- fund_data[1:1298,-(4:5)]
vote_data
##每周定投1000
days_votedata <- vote_data[vote_data$days == n,] ##n為周幾定投
days_votedata
unit_worth <- days_votedata$`Unit net worth`
days_votedata$share <- (money- money*0.0012)/(unit_worth) ##計(jì)算每次定投時(shí)購買的份額數(shù)
days_votedata$money <- money ##定投的金額
share <- sum(days_votedata$share) ##定投購 買的總份額數(shù)
fundUnit <- 0.9887 ##2017-05-05的單位凈值
total_worth <- share*fundUnit ##計(jì)算2017-05-05賬面的總額
total_money <- sum(days_votedata$money) ##計(jì)算定投的總金額
total_Purchasefee <- total_money*0.0012 ##計(jì)算申購費(fèi)的總金額
total_Redemptionfee <- total_worth*0.005 ##計(jì)算贖回費(fèi)的總金額
Actual_income <- total_worth-total_Redemptionfee ##計(jì)算贖回到賬實(shí)際金額
income <- Actual_income-total_money ##計(jì)算定投的收益
rate_incom <- income/total_money*100 ##計(jì)算收益率
startday <- as.Date("2012-01-04")
endday <- as.Date("2017-05-05")
days <- as.numeric(endday-startday) ##計(jì)算投資天數(shù)
year <- days/360 ##計(jì)算投資年數(shù)
year_rate <- rate_incom/year
return(rate_incom)
}
##每周一定投
vote_data(1,1000)
##每周二定投
vote_data(2,1000)
##每周三定投
vote_data(3,1000)
##每周四定投
vote_data(4,1000)
##每周五定投
vote_data(5,1000)
計(jì)算出來的結(jié)果如下:
從結(jié)果中,也可以得出跟剛剛一樣的結(jié)論挣柬,無論是哪天進(jìn)行定投潮酒,收益不會(huì)相差很大,如果說真的要找出一天的話邪蛔,在這里顯示周五收益更高一些澈灼,所以可以選擇每周五定投大成滬深300指數(shù)基金,同時(shí)店溢,也跟上面算出的周一上漲概率更高相呼應(yīng)叁熔。當(dāng)然,在這里是不考慮任何的國家政策影響的走勢床牧。
3.2每兩周定投計(jì)算過程如下:
##自定義函數(shù)荣回,每兩周定投1000,計(jì)算從2012年1月2日至2017年5月5日
vote_data <- function(n,money){
##選擇子集
vote_data <- fund_data[1:1298,-(4:5)]
vote_data
##每兩周定投投1000
vote_data$number <- c(1,2)
days_votedata <- vote_data[vote_data$days == n & vote_data$number == 2 ,] ##n為周幾定投,2為每兩周定投
days_votedata
unit_worth <- days_votedata$`Unit net worth`
days_votedata$share <- (money- money*0.0012)/(unit_worth) ##計(jì)算每次定投時(shí)購買的份額數(shù)
days_votedata$money <- money ##定投的金額
share <- sum(days_votedata$share) ##定投購買的總份額數(shù)
fundUnit <- 0.9887 ##2017-05-05的單位凈值
total_worth <- share*fundUnit ##計(jì)算2017-05-05賬面的總額
total_money <- sum(days_votedata$money) ##計(jì)算定投的總金額
total_Purchasefee <- total_money*0.0012 ##計(jì)算申購費(fèi)的總金額
total_Redemptionfee <- total_worth*0.005 ##計(jì)算贖回費(fèi)的總金額
Actual_income <- total_worth-total_Redemptionfee ##計(jì)算贖回到賬實(shí)際金額
income <- Actual_income-total_money ##計(jì)算定投的收益
rate_incom <- income/total_money*100 ##計(jì)算收益率
startday <- as.Date("2012-01-04")
endday <- as.Date("2017-05-05")
days <- as.numeric(endday-startday) ##計(jì)算投資天數(shù)
year <- days/360 ##計(jì)算投資年數(shù)
year_rate <- rate_incom/year
return(rate_incom)
}
##每兩周一定投
vote_data(1,1000)
##每兩周二定投
vote_data(2,1000)
##每兩周三定投
vote_data(3,1000)
##每兩周四定投
vote_data(4,1000)
##每兩周五定投
vote_data(5,1000)
計(jì)算結(jié)果如下:
這里的結(jié)論跟上面的一樣戈咳,也是選擇周五定投收益率相對來說稍微高一點(diǎn)心软。
二、工銀滬深300指數(shù)基金
工銀滬深300指數(shù)基金的計(jì)算過程跟大成滬深300指數(shù)一樣著蛙,在這里省略計(jì)算過程删铃,直接得出結(jié)論:
##從網(wǎng)頁上抓取數(shù)據(jù)
library("XML")
n <- 0:33
for(i in n){
url_a <- "http://quotes.money.163.com/fund/jzzs_481009_"
url_b <- ".html?start=2009-02-03&end=2017-05-05&sort=TDATE&order=desc"
url = paste(url_a,i,url_b,sep="")
tbls <- readHTMLTable(url) #確定網(wǎng)頁地址,通過網(wǎng)頁地址分析網(wǎng)頁表格
sapply(tbls,nrow) ##第1個(gè)表格是需要的表格
fund_data <- readHTMLTable(url,which=1)
datapath=paste("F:/工銀滬深300指數(shù)/fund_data",i,".csv",sep="")
print(write.csv(fund_data,file = datapath))
}
##將44個(gè)文件內(nèi)的數(shù)據(jù)整合到一個(gè)文件夾中
setwd("F:/")
a = list.files("工銀滬深300指數(shù)")
dir = paste("./工銀滬深300指數(shù)/",a,sep="")
n = length(dir)
fund_data = read.csv(file = dir[1],header=T,sep=",")
for (i in 2:n){
new.data = read.csv(file = dir[i], header=T, sep=",")
fund_data = rbind(fund_data,new.data)
}
write.csv(fund_data,file = "./工銀滬深300指 數(shù)/fund_data.csv",row.names=F)
##得到所需的文件fund_data
library(readxl)
fund_data <- read_excel("F:/工銀滬深300指數(shù)/fund_data.xlsx")
View(fund_data)
##重命名
names(fund_data) <- c("date","days","Unit net worth","Accumulated net worth","growth rate")
##刪除多余的一列
fund_data <- fund_data[,-6]
fund_data
##按日期進(jìn)行排序踏堡。
library(dplyr)
fund_data <- arrange(fund_data,desc(date))
fund_data
##按照days分組.
days_funddata <- group_by(fund_data,days)
days_funddata
##數(shù)據(jù)計(jì)算猎唁,用summarise()函數(shù)
days_funddata <- summarise(days_funddata,count=n())
days_funddata
##自定義函數(shù)計(jì)算每天增長率大于0的數(shù)據(jù)。
days_data <- function(n){
days_data <- fund_data[fund_data$days == n,]
days_data <- days_data[days_data$`growth rate` > 0,]
return(days_data)
}
##周一增長率大于0的數(shù)據(jù)
days_data(1)
##周二增長率大于0的數(shù)據(jù)
days_data(2)
##周三增長率大于0的數(shù)據(jù)
days_data(3)
##周四增長率大于0的數(shù)據(jù)
days_data(4)
##周五增長率大于0的數(shù)據(jù)
days_data(5)
##重新組合成數(shù)據(jù)
newdays <- c("1","2","3","4","5") ##周一到周五
newtotal <- c("382","397","399","397","397") ##周一到周五總共的交易日
newcount <- c("211","216","203","170","226") ##周一到周 五總共的交易日上漲次數(shù)
newdata <- data.frame(newdays,newtotal,newcount)
newdata
##計(jì)算周一到周五交易日上漲的概率
newcount <- as.numeric(newcount)
newtotal <- as.numeric(newtotal)
rate <- newcount/newtotal
newdata <- cbind(newdata,rate)
newdata
##自定義函數(shù)顷蟆,每周定投1000诫隅,計(jì)算從2012年1月2日至2017年5月5日
vote_data <- function(n,money){
##選擇子集
vote_data <- fund_data[1:1298,-(4:5)]
##每周定投1000
money <- 1000
days_votedata <- vote_data[vote_data$days == n,] ##n為周幾定投
days_votedata
unit_worth <- days_votedata$`Unit net worth`
days_votedata$share <- (money-money*0.0012)/(unit_worth) ##計(jì)算每次定投時(shí)購買的份額數(shù)
days_votedata$money <- money ##定投的金額
share <- sum(days_votedata$share) ##定投購買的總份額數(shù)
fundUnit <- 0.9816 ##2017-05-05的單位凈值
total_worth <- share*fundUnit ##計(jì)算2017-05-05賬面的總額
total_money <- sum(days_votedata$money) ##計(jì)算定投的總金額
total_Purchasefee <- total_money*0.0012 ##計(jì)算申購費(fèi)的總金額
total_Redemptionfee <- total_worth*0.005 ##計(jì)算贖回費(fèi)的總金額
Actual_income <- total_worth-total_Redemptionfee ##計(jì)算贖回到賬實(shí)際金額
income <- Actual_income-total_money ##計(jì)算定投的收益
rate_incom <- income/total_money*100 ##計(jì)算收益率
startday <- as.Date("2012-01-04")
endday <- as.Date("2017-05-05")
days <- as.numeric(endday-startday) ##計(jì)算投資天數(shù)
year <- days/360 ##計(jì)算投資年數(shù)
year_rate <- rate_incom/year
return(rate_incom)
}
##每周一定投
vote_data(1,1000)
##每周二定投
vote_data(2,1000)
##每周三定投
vote_data(3,1000)
##每周四定投
vote_data(4,1000)
##每周五定投
vote_data(5,1000)
結(jié)果如下:
從這個(gè)數(shù)據(jù)也可以得出是周五定投時(shí)腐魂,收益率更高一些。所以逐纬,不考慮任何的政策導(dǎo)致的走勢蛔屹,可以選擇周五定投工銀滬深300指數(shù)。
總結(jié):
由于大成滬深300指數(shù)基金和工銀滬深300指數(shù)基金都是跟蹤滬深300指數(shù)的豁生,所以滬深300指數(shù)基金的走勢大致上差異不大兔毒,因此,在不考慮任何客觀因素的情況下甸箱,我們定投滬深300指數(shù)時(shí)眼刃,可以考慮周五定投。
疑惑的是摇肌,為什么同樣是滬深300指數(shù)的基金,兩者的收益會(huì)差這么大呢仪际?經(jīng)過藍(lán)老師的解惑围小,原來是兩個(gè)基金的分紅情況不同,工銀滬深300指數(shù)基金多次分紅树碱,導(dǎo)致基金凈值下降肯适。所以,下一篇模擬一下看看同樣是跟蹤滬深300指數(shù)的基金成榜,收益率是否相差很大框舔。