-
Notifications
You must be signed in to change notification settings - Fork 228
/
Copy path20_PredictorPorts.R
111 lines (87 loc) · 2.54 KB
/
20_PredictorPorts.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# For baseline portfolio tests
# Andrew Chen 2020 01
# ENVIRONMENT AND DATA ====
crspinfo = read.fst(
paste0(pathProject,'Portfolios/Data/Intermediate/crspminfo.fst')
) %>% # me, screens,
setDT()
crspret = read.fst(
paste0(pathProject,'Portfolios/Data/Intermediate/crspmret.fst')
) %>% # returns
setDT()
# SELECT SIGNALS AND CHECK FOR CSVS ====
strategylist0 <- alldocumentation %>% filter(Cat.Signal == "Predictor")
strategylist0 <- ifquickrun()
csvlist = list.files(pathPredictors) %>% as_tibble() %>% rename(signalname=value) %>%
mutate(
signalname = substr(signalname,1,str_length(signalname)-4)
, in_csv = 1
)
missing = strategylist0 %>% select(signalname) %>% left_join(csvlist) %>%
filter(is.na(in_csv)) # note: CRSP predictors are put into pathPredictors by 11_CreateCRSPPredictors.R
if (dim(missing)[1]>0){
print('Warning: the following predictor signal csvs are missing:')
print(missing$signalname)
temp = readline('press enter to continue, type quit to quit: ')
if (temp=='quit'){print('erroring out'); stop()}
}
# BASE PORTS ====
port <- loop_over_strategies(
strategylist0
)
# feedback
checkport(port)
## EXPORT
writestandard(port, pathDataPortfolios, "PredictorPortsFull.csv")
### OUTPUT WIDE ###
portlswide <- port %>%
filter(port == "LS") %>%
select(date, signalname, ret) %>%
pivot_wider(names_from = signalname, values_from = ret) %>%
arrange(date)
writestandard(
portlswide,
pathDataPortfolios,
"PredictorLSretWide.csv"
)
# SUMMARY STATS BY SIGNAL ====
# reread in case you want to edit the summary later
port = read.csv(paste0(pathDataPortfolios, "PredictorPortsFull.csv"))
sumbase <- sumportmonth(
port,
groupme = c("signalname", "port", "samptype"), Nstocksmin = 1
) %>%
left_join(
alldocumentation
, by = "signalname"
)
sumshort = sumbase %>%
filter(
samptype == "insamp",
port == "LS"
) %>%
arrange(
signalname
) %>%
select(-signallag)
## export
write_xlsx(
list(
short = sumshort
, full = sumbase
),
paste0(pathDataPortfolios, "PredictorSummary.xlsx")
)
# FEEDBACK ON ERRORS ====
print("The following ports are computed succesfully")
print(
sumbase %>% filter(port == "LS", samptype == "insamp") %>% arrange(tstat) %>% as.data.frame()
)
print("The following ports failed to compute")
print(
sumbase %>% filter(is.na(port)) %>% arrange(tstat) %>% as.data.frame() %>%
select(signalname,port)
)
if (dim(sumbase %>% filter(is.na(port)))[1] == 0){
print('20_PredictorPorts.R: all portfolios successfully computed')
}