-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0021_.py
67 lines (62 loc) · 1.86 KB
/
0021_.py
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
import numpy as np
from tqdm import tqdm
import pandas as pd
from portfolio import Portfolio
import matplotlib.pyplot as plt
from constants import *
"""_summary_
0021ExpCardinality
"""
def main():
i = 0 # loop counter
var = K_vec # which variable are we testing?
mean_time, std_time = np.zeros((len(var),)), np.zeros((len(var),))
mean_returns, std_returns = np.zeros_like(mean_time), np.zeros_like(mean_time)
m_obj, s_obj = np.zeros_like(mean_time), np.zeros_like(mean_time)
mean_var, std_var = np.zeros_like(mean_time), np.zeros_like(mean_time)
k_ = np.zeros_like(mean_time)
for k in tqdm(var):
df = df_.iloc[:,: ns]
#
ma = np.zeros((num_trials,))
re = np.zeros((num_trials,))
ov = np.zeros_like(re)
vv = np.zeros_like(re)
#
for j in range(num_trials):
p = Portfolio(stock_prices = df)
weights, assets = p.OptimizeSemiDef(method="mean-variance",cardinality=k)
try:
pass
except:
pass
ma[j] = p.total_time
re[j], _ = p.GetReturns()
ov[j] = p.obj_value
vv[j] = p.PortfolioVariance()
#
k_[i] = p.CheckCardinality(weights)
mean_time[i] = np.mean(ma)
std_time[i] = np.std(ma)
mean_returns[i] = np.mean(re)
std_returns[i] = np.std(re)
m_obj[i] = np.mean(ov)
s_obj[i] = np.std(ov)
mean_var[i] = np.mean(vv)
std_var[i] = np.std(vv)
i += 1
outfile = "data/0021.npz"
np.savez(
outfile,
K_vec = K_vec,
k_ = k_,
mean_time = mean_time,
mean_returns = mean_returns,
std_returns = std_returns,
std_time = std_time,
m_obj = m_obj,
s_obj = s_obj,
mean_var = mean_var
)
if __name__ == "__main__":
main()