Commit 390152e0 authored by Dr.李's avatar Dr.李

update optimizer

parent e0bfc963
...@@ -7,13 +7,14 @@ Created on 2017-7-20 ...@@ -7,13 +7,14 @@ Created on 2017-7-20
""" """
cimport numpy as cnp cimport numpy as cnp
from libcpp.string cimport string
from libcpp.vector cimport vector from libcpp.vector cimport vector
import numpy as np import numpy as np
cdef extern from "lpoptimizer.hpp" namespace "pfopt": cdef extern from "lpoptimizer.hpp" namespace "pfopt":
cdef cppclass LpOptimizer: cdef cppclass LpOptimizer:
LpOptimizer(int, int, double*, double*, double*, double*) except + LpOptimizer(int, int, double*, double*, double*, double*, string) except +
vector[double] xValue() vector[double] xValue()
double feval() double feval()
int status() int status()
...@@ -26,12 +27,15 @@ cdef class LPOptimizer: ...@@ -26,12 +27,15 @@ cdef class LPOptimizer:
cdef int m cdef int m
def __cinit__(self, def __cinit__(self,
cnp.ndarray[double, ndim=2] cons_matrix, cnp.ndarray[double, ndim=2] cons_matrix,
double[:] lbound, double[:] lbound,
double[:] ubound, double[:] ubound,
double[:] objective): double[:] objective,
str method='simplex'):
self.n = lbound.shape[0] self.n = lbound.shape[0]
self.m = cons_matrix.shape[0] self.m = cons_matrix.shape[0]
py_bytes = method.encode('ascii')
cdef char* c_str = py_bytes
cdef double[:] cons = cons_matrix.flatten(order='C'); cdef double[:] cons = cons_matrix.flatten(order='C');
self.cobj = new LpOptimizer(self.n, self.cobj = new LpOptimizer(self.n,
...@@ -39,7 +43,8 @@ cdef class LPOptimizer: ...@@ -39,7 +43,8 @@ cdef class LPOptimizer:
&cons[0], &cons[0],
&lbound[0], &lbound[0],
&ubound[0], &ubound[0],
&objective[0]) &objective[0],
c_str)
def __dealloc__(self): def __dealloc__(self):
del self.cobj del self.cobj
...@@ -151,9 +156,25 @@ cdef extern from "mvoptimizer.hpp" namespace "pfopt": ...@@ -151,9 +156,25 @@ cdef extern from "mvoptimizer.hpp" namespace "pfopt":
int status() int status()
cdef extern from "qpalglib.hpp" namespace "pfopt":
cdef cppclass QPAlglib:
QPAlglib(int,
double*,
double*,
double*,
double*,
double) except +
vector[double] xValue()
int status()
cdef class QPOptimizer: cdef class QPOptimizer:
cdef MVOptimizer* cobj cdef MVOptimizer* cobj
cdef QPAlglib* cobj2
cdef cnp.ndarray er
cdef cnp.ndarray cov
cdef double risk_aversion
cdef int n cdef int n
cdef int m cdef int m
...@@ -169,12 +190,15 @@ cdef class QPOptimizer: ...@@ -169,12 +190,15 @@ cdef class QPOptimizer:
self.n = lbound.shape[0] self.n = lbound.shape[0]
self.m = 0 self.m = 0
self.er = np.array(expected_return)
self.cov = np.array(cov_matrix)
self.risk_aversion = risk_aversion
cdef double[:] cov = cov_matrix.flatten(order='C') cdef double[:] cov = cov_matrix.flatten(order='C')
cdef double[:] cons cdef double[:] cons
if cons_matrix is not None: if cons_matrix is not None:
self.m = cons_matrix.shape[0] self.m = cons_matrix.shape[0]
cons = cons_matrix.flatten(order='C'); cons = cons_matrix.flatten(order='C')
self.cobj = new MVOptimizer(self.n, self.cobj = new MVOptimizer(self.n,
&expected_return[0], &expected_return[0],
...@@ -187,25 +211,39 @@ cdef class QPOptimizer: ...@@ -187,25 +211,39 @@ cdef class QPOptimizer:
&cubound[0], &cubound[0],
risk_aversion) risk_aversion)
else: else:
self.cobj = new MVOptimizer(self.n, self.cobj2 = new QPAlglib(self.n,
&expected_return[0], &expected_return[0],
&cov[0], &cov[0],
&lbound[0], &lbound[0],
&ubound[0], &ubound[0],
0, risk_aversion)
NULL,
NULL,
NULL,
risk_aversion)
def __dealloc__(self): def __dealloc__(self):
del self.cobj if self.cobj:
del self.cobj
else:
del self.cobj2
def feval(self): def feval(self):
return self.cobj.feval() if self.cobj:
return self.cobj.feval()
else:
x = np.array(self.cobj2.xValue())
return 0.5 * self.risk_aversion * x @ self.cov @ x - self.er @ x
def x_value(self): def x_value(self):
return np.array(self.cobj.xValue()) if self.cobj:
return np.array(self.cobj.xValue())
else:
return np.array(self.cobj2.xValue())
def status(self): def status(self):
return self.cobj.status() if self.cobj:
\ No newline at end of file return self.cobj.status()
else:
status = self.cobj2.status()
if 1 <= status <= 4:
return 0
else:
return status
Subproject commit 7e81e8ec55c9f43bb6256eeb78d744f4670dae1d Subproject commit 1ed77b10dab76d88b09a057670a3c01276bc82d0
...@@ -17,7 +17,8 @@ def linear_builder(er: np.ndarray, ...@@ -17,7 +17,8 @@ def linear_builder(er: np.ndarray,
risk_constraints: np.ndarray, risk_constraints: np.ndarray,
risk_target: Tuple[np.ndarray, np.ndarray], risk_target: Tuple[np.ndarray, np.ndarray],
turn_over_target: float = None, turn_over_target: float = None,
current_position: np.ndarray = None) -> Tuple[str, np.ndarray, np.ndarray]: current_position: np.ndarray = None,
method: str='simplex') -> Tuple[str, np.ndarray, np.ndarray]:
er = er.flatten() er = er.flatten()
n, m = risk_constraints.shape n, m = risk_constraints.shape
...@@ -36,7 +37,7 @@ def linear_builder(er: np.ndarray, ...@@ -36,7 +37,7 @@ def linear_builder(er: np.ndarray,
if not turn_over_target: if not turn_over_target:
cons_matrix = np.concatenate((risk_constraints.T, risk_lbound, risk_ubound), axis=1) cons_matrix = np.concatenate((risk_constraints.T, risk_lbound, risk_ubound), axis=1)
opt = LPOptimizer(cons_matrix, lbound, ubound, -er) opt = LPOptimizer(cons_matrix, lbound, ubound, -er, method)
status = opt.status() status = opt.status()
...@@ -77,7 +78,7 @@ def linear_builder(er: np.ndarray, ...@@ -77,7 +78,7 @@ def linear_builder(er: np.ndarray,
risk_ubound = np.concatenate((risk_ubound, np.inf * np.ones((n, 1))), axis=0) risk_ubound = np.concatenate((risk_ubound, np.inf * np.ones((n, 1))), axis=0)
cons_matrix = np.concatenate((risk_constraints, risk_lbound, risk_ubound), axis=1) cons_matrix = np.concatenate((risk_constraints, risk_lbound, risk_ubound), axis=1)
opt = LPOptimizer(cons_matrix, lbound, ubound, -er) opt = LPOptimizer(cons_matrix, lbound, ubound, -er, method)
status = opt.status() status = opt.status()
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
"factor = 'EPS'\n", "factor = 'EPS'\n",
"lb = 0.0\n", "lb = 0.0\n",
"ub = 0.1\n", "ub = 0.1\n",
"data_source = 'postgres+psycopg2://postgres:A12345678!@10.63.6.220/alpha'\n", "data_source = 'postgres+psycopg2://postgres:we083826@localhost/alpha'\n",
"engine = SqlEngine(data_source)\n", "engine = SqlEngine(data_source)\n",
"\n", "\n",
"universes = [Universe('custom', [u_name]) for u_name in u_names]\n", "universes = [Universe('custom', [u_name]) for u_name in u_names]\n",
...@@ -82,12 +82,12 @@ ...@@ -82,12 +82,12 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"2018-03-28 12:46:50,110 - ALPHA_MIND - INFO - sh50 is finished\n", "2018-03-29 23:27:41,866 - ALPHA_MIND - INFO - sh50 is finished\n",
"2018-03-28 12:46:50,131 - ALPHA_MIND - INFO - hs300 is finished\n", "2018-03-29 23:27:41,879 - ALPHA_MIND - INFO - hs300 is finished\n",
"2018-03-28 12:46:50,156 - ALPHA_MIND - INFO - zz500 is finished\n", "2018-03-29 23:27:41,897 - ALPHA_MIND - INFO - zz500 is finished\n",
"2018-03-28 12:46:50,193 - ALPHA_MIND - INFO - zz800 is finished\n", "2018-03-29 23:27:41,925 - ALPHA_MIND - INFO - zz800 is finished\n",
"2018-03-28 12:46:50,244 - ALPHA_MIND - INFO - zz1000 is finished\n", "2018-03-29 23:27:41,966 - ALPHA_MIND - INFO - zz1000 is finished\n",
"2018-03-28 12:46:50,830 - ALPHA_MIND - INFO - ashare_ex is finished\n" "2018-03-29 23:27:42,244 - ALPHA_MIND - INFO - ashare_ex is finished\n"
] ]
} }
], ],
...@@ -171,21 +171,21 @@ ...@@ -171,21 +171,21 @@
" <tbody>\n", " <tbody>\n",
" <tr>\n", " <tr>\n",
" <th>cvxpy</th>\n", " <th>cvxpy</th>\n",
" <td>2.69</td>\n", " <td>1.63</td>\n",
" <td>6.37</td>\n", " <td>3.53</td>\n",
" <td>7.28</td>\n", " <td>5.47</td>\n",
" <td>12.55</td>\n", " <td>10.00</td>\n",
" <td>20.09</td>\n", " <td>16.80</td>\n",
" <td>325.88</td>\n", " <td>128.58</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>alphamind</th>\n", " <th>alphamind</th>\n",
" <td>0.34</td>\n", " <td>0.21</td>\n",
" <td>0.58</td>\n", " <td>0.37</td>\n",
" <td>0.70</td>\n", " <td>0.45</td>\n",
" <td>0.92</td>\n", " <td>0.65</td>\n",
" <td>1.08</td>\n", " <td>0.80</td>\n",
" <td>3.08</td>\n", " <td>2.43</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
"</table>\n", "</table>\n",
...@@ -193,8 +193,8 @@ ...@@ -193,8 +193,8 @@
], ],
"text/plain": [ "text/plain": [
" sh50 hs300 zz500 zz800 zz1000 ashare_ex\n", " sh50 hs300 zz500 zz800 zz1000 ashare_ex\n",
"cvxpy 2.69 6.37 7.28 12.55 20.09 325.88\n", "cvxpy 1.63 3.53 5.47 10.00 16.80 128.58\n",
"alphamind 0.34 0.58 0.70 0.92 1.08 3.08" "alphamind 0.21 0.37 0.45 0.65 0.80 2.43"
] ]
}, },
"execution_count": 4, "execution_count": 4,
...@@ -223,23 +223,20 @@ ...@@ -223,23 +223,20 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"2018-03-28 12:46:51,048 - ALPHA_MIND - INFO - sh50 is finished\n", "2018-03-29 23:28:14,838 - ALPHA_MIND - INFO - sh50 is finished\n",
"2018-03-28 12:46:51,157 - ALPHA_MIND - INFO - hs300 is finished\n", "2018-03-29 23:28:15,575 - ALPHA_MIND - INFO - hs300 is finished\n",
"2018-03-28 12:46:51,442 - ALPHA_MIND - INFO - zz500 is finished\n", "2018-03-29 23:28:18,310 - ALPHA_MIND - INFO - zz500 is finished\n"
"2018-03-28 12:46:52,102 - ALPHA_MIND - INFO - zz800 is finished\n",
"2018-03-28 12:46:53,172 - ALPHA_MIND - INFO - zz1000 is finished\n",
"2018-03-28 12:47:04,916 - ALPHA_MIND - INFO - ashare_ex is finished\n"
] ]
} }
], ],
"source": [ "source": [
"from cvxpy import pnorm\n", "from cvxpy import pnorm\n",
"\n", "\n",
"df = pd.DataFrame(columns=u_names, index=['cvxpy', 'alphamind'])\n", "df = pd.DataFrame(columns=u_names[:3], index=['cvxpy', 'alphamind'])\n",
"turn_over_target = 0.5\n", "turn_over_target = 0.5\n",
"number = 1\n", "number = 1\n",
"\n", "\n",
"for u_name, sample_data in zip(u_names, data_set):\n", "for u_name, sample_data in zip(u_names[:3], data_set):\n",
" factor_data = sample_data['factor']\n", " factor_data = sample_data['factor']\n",
" er = factor_data[factor].values\n", " er = factor_data[factor].values\n",
" n = len(er)\n", " n = len(er)\n",
...@@ -254,8 +251,22 @@ ...@@ -254,8 +251,22 @@
" risk_constraints = np.ones((len(er), 1))\n", " risk_constraints = np.ones((len(er), 1))\n",
" risk_target = (np.array([1.]), np.array([1.]))\n", " risk_target = (np.array([1.]), np.array([1.]))\n",
"\n", "\n",
" status, y, x1 = linear_builder(er, lbound, ubound, risk_constraints, risk_target, turn_over_target=turn_over_target, current_position=current_position)\n", " status, y, x1 = linear_builder(er,\n",
" elasped_time1 = timeit.timeit(\"linear_builder(er, lbound, ubound, risk_constraints, risk_target, turn_over_target=turn_over_target, current_position=current_position)\", number=number, globals=globals()) / number * 1000\n", " lbound,\n",
" ubound,\n",
" risk_constraints,\n",
" risk_target,\n",
" turn_over_target=turn_over_target,\n",
" current_position=current_position,\n",
" method='simplex')\n",
" elasped_time1 = timeit.timeit(\"\"\"linear_builder(er,\n",
" lbound,\n",
" ubound,\n",
" risk_constraints,\n",
" risk_target,\n",
" turn_over_target=turn_over_target,\n",
" current_position=current_position,\n",
" method='simplex')\"\"\", number=number, globals=globals()) / number * 1000\n",
" \n", " \n",
" w = cvxpy.Variable(n)\n", " w = cvxpy.Variable(n)\n",
" curr_risk_exposure = risk_constraints.T @ w\n", " curr_risk_exposure = risk_constraints.T @ w\n",
...@@ -315,21 +326,21 @@ ...@@ -315,21 +326,21 @@
" <tbody>\n", " <tbody>\n",
" <tr>\n", " <tr>\n",
" <th>cvxpy</th>\n", " <th>cvxpy</th>\n",
" <td>4.26</td>\n", " <td>2.50</td>\n",
" <td>28.31</td>\n", " <td>20.24</td>\n",
" <td>67.48</td>\n", " <td>52.74</td>\n",
" <td>164.81</td>\n", " <td>125.65</td>\n",
" <td>256.14</td>\n", " <td>204.18</td>\n",
" <td>2,561.17</td>\n", " <td>1,789.07</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>alphamind</th>\n", " <th>alphamind</th>\n",
" <td>1.22</td>\n", " <td>1.34</td>\n",
" <td>20.28</td>\n", " <td>9.60</td>\n",
" <td>67.10</td>\n", " <td>28.20</td>\n",
" <td>154.95</td>\n", " <td>81.53</td>\n",
" <td>267.17</td>\n", " <td>106.00</td>\n",
" <td>3,314.10</td>\n", " <td>1,213.77</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
"</table>\n", "</table>\n",
...@@ -337,8 +348,8 @@ ...@@ -337,8 +348,8 @@
], ],
"text/plain": [ "text/plain": [
" sh50 hs300 zz500 zz800 zz1000 ashare_ex\n", " sh50 hs300 zz500 zz800 zz1000 ashare_ex\n",
"cvxpy 4.26 28.31 67.48 164.81 256.14 2,561.17\n", "cvxpy 2.50 20.24 52.74 125.65 204.18 1,789.07\n",
"alphamind 1.22 20.28 67.10 154.95 267.17 3,314.10" "alphamind 1.34 9.60 28.20 81.53 106.00 1,213.77"
] ]
}, },
"execution_count": 6, "execution_count": 6,
...@@ -369,12 +380,12 @@ ...@@ -369,12 +380,12 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"2018-03-28 12:47:05,225 - ALPHA_MIND - INFO - sh50 is finished\n", "2018-03-29 23:20:00,988 - ALPHA_MIND - INFO - sh50 is finished\n",
"2018-03-28 12:47:06,047 - ALPHA_MIND - INFO - hs300 is finished\n", "2018-03-29 23:20:01,378 - ALPHA_MIND - INFO - hs300 is finished\n",
"2018-03-28 12:47:07,931 - ALPHA_MIND - INFO - zz500 is finished\n", "2018-03-29 23:20:02,793 - ALPHA_MIND - INFO - zz500 is finished\n",
"2018-03-28 12:47:13,124 - ALPHA_MIND - INFO - zz800 is finished\n", "2018-03-29 23:20:07,901 - ALPHA_MIND - INFO - zz800 is finished\n",
"2018-03-28 12:47:20,586 - ALPHA_MIND - INFO - zz1000 is finished\n", "2018-03-29 23:20:15,170 - ALPHA_MIND - INFO - zz1000 is finished\n",
"2018-03-28 12:50:28,528 - ALPHA_MIND - INFO - ashare_ex is finished\n" "2018-03-29 23:23:37,330 - ALPHA_MIND - INFO - ashare_ex is finished\n"
] ]
} }
], ],
...@@ -458,30 +469,30 @@ ...@@ -458,30 +469,30 @@
" <tbody>\n", " <tbody>\n",
" <tr>\n", " <tr>\n",
" <th>cvxpy</th>\n", " <th>cvxpy</th>\n",
" <td>13.26</td>\n", " <td>8.30</td>\n",
" <td>166.37</td>\n", " <td>164.79</td>\n",
" <td>493.95</td>\n", " <td>620.38</td>\n",
" <td>1,635.71</td>\n", " <td>2,280.32</td>\n",
" <td>2,359.22</td>\n", " <td>3,124.51</td>\n",
" <td>51,708.15</td>\n", " <td>87,652.78</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>alphamind</th>\n", " <th>alphamind</th>\n",
" <td>68.57</td>\n", " <td>0.38</td>\n",
" <td>205.78</td>\n", " <td>4.29</td>\n",
" <td>317.68</td>\n", " <td>16.04</td>\n",
" <td>670.81</td>\n", " <td>49.93</td>\n",
" <td>915.77</td>\n", " <td>71.42</td>\n",
" <td>32,733.73</td>\n", " <td>2,238.11</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
"</table>\n", "</table>\n",
"</div>" "</div>"
], ],
"text/plain": [ "text/plain": [
" sh50 hs300 zz500 zz800 zz1000 ashare_ex\n", " sh50 hs300 zz500 zz800 zz1000 ashare_ex\n",
"cvxpy 13.26 166.37 493.95 1,635.71 2,359.22 51,708.15\n", "cvxpy 8.30 164.79 620.38 2,280.32 3,124.51 87,652.78\n",
"alphamind 68.57 205.78 317.68 670.81 915.77 32,733.73" "alphamind 0.38 4.29 16.04 49.93 71.42 2,238.11"
] ]
}, },
"execution_count": 8, "execution_count": 8,
...@@ -497,27 +508,92 @@ ...@@ -497,27 +508,92 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 4. Mean - Variance 优化 (Box约束以及线性约束)" "## 4. Mean - Variance 优化 (Box约束)\n",
"---------------"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"2018-03-28 12:50:29,489 - ALPHA_MIND - INFO - sh50 is finished\n", "2018-03-29 23:23:37,938 - ALPHA_MIND - INFO - sh50 is finished\n",
"2018-03-28 12:50:30,295 - ALPHA_MIND - INFO - hs300 is finished\n", "2018-03-29 23:23:38,599 - ALPHA_MIND - INFO - hs300 is finished\n",
"2018-03-28 12:50:33,286 - ALPHA_MIND - INFO - zz500 is finished\n", "2018-03-29 23:23:41,505 - ALPHA_MIND - INFO - zz500 is finished\n",
"2018-03-28 12:50:39,842 - ALPHA_MIND - INFO - zz800 is finished\n", "2018-03-29 23:23:51,712 - ALPHA_MIND - INFO - zz800 is finished\n",
"2018-03-28 12:50:55,691 - ALPHA_MIND - INFO - zz1000 is finished\n", "2018-03-29 23:24:05,999 - ALPHA_MIND - INFO - zz1000 is finished\n"
"2018-03-28 12:57:46,604 - ALPHA_MIND - INFO - ashare_ex is finished\n"
] ]
} }
], ],
"source": [
"df = pd.DataFrame(columns=u_names, index=['cvxpy', 'alphamind'])\n",
"number = 1\n",
"\n",
"for u_name, sample_data in zip(u_names, data_set):\n",
" all_styles = risk_styles + industry_styles + ['COUNTRY']\n",
" factor_data = sample_data['factor']\n",
" risk_cov = sample_data['risk_cov'][all_styles].values\n",
" risk_exposure = factor_data[all_styles].values\n",
" special_risk = factor_data.srisk.values\n",
" sec_cov = risk_exposure @ risk_cov @ risk_exposure.T / 10000 + np.diag(special_risk ** 2) / 10000\n",
" er = factor_data[factor].values\n",
" n = len(er)\n",
"\n",
" bm = np.zeros(n)\n",
" lbound = np.zeros(n)\n",
" ubound = np.ones(n) * 0.1\n",
"\n",
" status, y, x1 = mean_variance_builder(er, sec_cov, bm, lbound, ubound, None, None, lam=1)\n",
" elasped_time1 = timeit.timeit(\"mean_variance_builder(er, sec_cov, bm, lbound, ubound, None, None, lam=1)\",\n",
" number=number, globals=globals()) / number * 1000\n",
" \n",
" w = cvxpy.Variable(n)\n",
" risk = quad_form(w, sec_cov)\n",
" objective = cvxpy.Minimize(-w.T * er + 0.5 * risk)\n",
" constraints = [w >= lbound,\n",
" w <= ubound]\n",
" prob = cvxpy.Problem(objective, constraints)\n",
" prob.solve(solver='CVXOPT')\n",
" elasped_time2 = timeit.timeit(\"prob.solve(solver='CVXOPT')\",\n",
" number=number, globals=globals()) / number * 1000\n",
" \n",
" u1 = -x1 @ er + 0.5 * x1 @ sec_cov @ x1\n",
" x2 = np.array(w.value).flatten()\n",
" u2 = -x2 @ er + 0.5 * x2 @ sec_cov @ x2\n",
" \n",
" np.testing.assert_array_almost_equal(u1, u2, 4)\n",
"\n",
" df.loc['alphamind', u_name] = elasped_time1\n",
" df.loc['cvxpy', u_name] = elasped_time2\n",
" alpha_logger.info(f\"{u_name} is finished\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. Mean - Variance 优化 (Box约束以及线性约束)\n",
"----------------"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [ "source": [
"df = pd.DataFrame(columns=u_names, index=['cvxpy', 'alphamind'])\n", "df = pd.DataFrame(columns=u_names, index=['cvxpy', 'alphamind'])\n",
"number = 1\n", "number = 1\n",
...@@ -568,72 +644,9 @@ ...@@ -568,72 +644,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 10, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sh50</th>\n",
" <th>hs300</th>\n",
" <th>zz500</th>\n",
" <th>zz800</th>\n",
" <th>zz1000</th>\n",
" <th>ashare_ex</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>cvxpy</th>\n",
" <td>20.25</td>\n",
" <td>314.35</td>\n",
" <td>1,306.26</td>\n",
" <td>2,795.40</td>\n",
" <td>7,386.27</td>\n",
" <td>195,024.34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>alphamind</th>\n",
" <td>21.20</td>\n",
" <td>41.34</td>\n",
" <td>60.28</td>\n",
" <td>91.30</td>\n",
" <td>77.67</td>\n",
" <td>868.86</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sh50 hs300 zz500 zz800 zz1000 ashare_ex\n",
"cvxpy 20.25 314.35 1,306.26 2,795.40 7,386.27 195,024.34\n",
"alphamind 21.20 41.34 60.28 91.30 77.67 868.86"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"df" "df"
] ]
...@@ -642,28 +655,15 @@ ...@@ -642,28 +655,15 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 5. 线性优化(带二次限制条件)\n", "## 6. 线性优化(带二次限制条件)\n",
"-------------------------" "-------------------------"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 11, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stderr",
"output_type": "stream",
"text": [
"2018-03-28 12:57:47,308 - ALPHA_MIND - INFO - sh50 is finished\n",
"2018-03-28 12:57:48,181 - ALPHA_MIND - INFO - hs300 is finished\n",
"2018-03-28 12:57:51,075 - ALPHA_MIND - INFO - zz500 is finished\n",
"2018-03-28 12:58:05,881 - ALPHA_MIND - INFO - zz800 is finished\n",
"2018-03-28 12:58:19,775 - ALPHA_MIND - INFO - zz1000 is finished\n",
"2018-03-28 13:05:47,684 - ALPHA_MIND - INFO - ashare_ex is finished\n"
]
}
],
"source": [ "source": [
"df = pd.DataFrame(columns=u_names, index=['cvxpy', 'alphamind'])\n", "df = pd.DataFrame(columns=u_names, index=['cvxpy', 'alphamind'])\n",
"number = 1\n", "number = 1\n",
...@@ -720,72 +720,9 @@ ...@@ -720,72 +720,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sh50</th>\n",
" <th>hs300</th>\n",
" <th>zz500</th>\n",
" <th>zz800</th>\n",
" <th>zz1000</th>\n",
" <th>ashare_ex</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>cvxpy</th>\n",
" <td>23.83</td>\n",
" <td>360.10</td>\n",
" <td>1,261.50</td>\n",
" <td>9,555.63</td>\n",
" <td>6,260.97</td>\n",
" <td>212,776.88</td>\n",
" </tr>\n",
" <tr>\n",
" <th>alphamind</th>\n",
" <td>22.55</td>\n",
" <td>32.70</td>\n",
" <td>60.94</td>\n",
" <td>59.65</td>\n",
" <td>116.27</td>\n",
" <td>824.79</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sh50 hs300 zz500 zz800 zz1000 ashare_ex\n",
"cvxpy 23.83 360.10 1,261.50 9,555.63 6,260.97 212,776.88\n",
"alphamind 22.55 32.70 60.94 59.65 116.27 824.79"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"df" "df"
] ]
......
Subproject commit bf4367184164e593cd2856ef38f8dd4f8cc76999 Subproject commit a187ed6c8f3aa40b47d5be80667cbbe6a6fd563d
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment