Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(TTR);
- library(Hmisc);
- #symbols = c("SPY","DBC","EEM","QQQQ","DIA","XLF","IWM","VWO","FXI","XLB","XRT","XLE","GLD","DBA","OIL");
- #symbols = c("AAPL", "GOOG", "WMT", "KO", "MCD", "IBM", "INTC", "XOM", "AA", "X", "BAC", "GS", "CAT", "CLF", "COST", "AMGN", "ESRX", "CHK");
- symbols = c("SPY", "DIA", "QQQQ");
- #create empty avgReturnTables
- avgReturnTable = c();
- avgReturnTableRev = c();
- #loop to get the TradingDay, RevTradingDay, and Close for each symbol
- #then get get the avgDailyReturns, store them in the avgDailyReturns matrix
- for (i in 1:length(symbols)) {
- stockdata = getYahooData(symbols[i]);
- closes = stockdata$Close;
- dates = row.names(as.matrix(stockdata));
- #calculate 1 day returns
- returns = c();
- for (day in 2:length(dates)) {
- returns[day]=as.numeric(closes[day])/as.numeric(closes[day-1])-1;
- }
- days = c();
- months = c();
- #loop through dates, getting the day and month
- for (day in 1:length(dates)) {
- months[day] = as.numeric(substr(dates[day],6,7));
- days[day] = as.numeric(substr(dates[day],9,10));
- }
- #reverse loop through dates, populating revTradingDay
- revTradingDay=c();
- switch = 0; #switch/flag to start populating revTradingDay
- revTradingDay[length(dates)]=NA;
- for (day in (length(dates)-1):1) {
- #print(day); #diagnostic
- #when month switches, flip the switch to start populating
- #revTradingDay, set revTradingDay to 1
- if (months[day]<months[day+1]) {
- #print("month change"); #diagnostic
- switch = 1;
- revTradingDay[day]=1;
- }
- else if (switch == 1) {
- revTradingDay[day]=revTradingDay[day+1]+1;
- }
- else if (switch==0) {
- revTradingDay[day]=NA;
- }
- }
- #forward loop through dates, populating tradingDay
- tradingDay = c();
- switch = 0;
- for (day in 2:(length(dates))) {
- if (months[day]!=months[day-1]) {
- switch=1;
- tradingDay[day]=1;
- }
- else if (switch ==1) {
- tradingDay[day]=tradingDay[day-1]+1;
- }
- }
- # create data frame of closes, dates, and their tradingDay numbers
- data=data.frame(cbind(revTradingDay,tradingDay,days,months,closes,returns));
- rownames(data)=dates;
- colnames(data)=c("TradingDayRev","TradingDay","Day","Month","Close","Return");
- #populate avgReturnTables
- #first days of the month
- daysin = 22;
- avgReturnTableTemp = c();
- for (i in 1:daysin) {
- avgReturnTableTemp[i] = mean(data[data$TradingDay==i,]$Return[!is.na(data[data$TradingDay==i,]$Return)]);
- }
- #last days of the month
- avgReturnTableRevTemp = c();
- for (i in 1:daysin) {
- avgReturnTableRevTemp[1+daysin-i] = mean(data[data$TradingDayRev==i,]$Return[!is.na(data[data$TradingDayRev==i,]$Return)]);
- }
- avgReturnTable = cbind(avgReturnTable,avgReturnTableTemp);
- avgReturnTableRev = cbind(avgReturnTableRev,avgReturnTableRevTemp);
- }
- colnames(avgReturnTable)=symbols;
- colnames(avgReturnTableRev)=symbols;
- avgReturnTable = data.frame(avgReturnTable);
- avgReturnTableRev = data.frame(avgReturnTableRev);
- #matplot(avgReturnTable,type="l");
- #construct vector of avg returns from 10 to 1 TradingDayRev, then from 1 to 10 TradingDay
- avgReturnWindow = c();
- avgReturnWindow = rbind(avgReturnTableRev[10:1,],avgReturnTable[1:10,]);
- #plot
- arwf = data.frame(avgReturnWindow);
- arwf=cbind(c(-10,-9, -8, -7, -6, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10),arwf);
- names(arwf)[1]="day";
- matplot(arwf$day,arwf[-1],type="l");
- minor.tick(5);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement