def get_weights(self): code_list = list_jq2wind(self.code_list) code_weights = {} return_value = self._get_return(code_list) def optimization_target(weight_temp): weight_temp = weight_temp[:, np.newaxis] portfolio_return_value = np.matmul(weight_temp.transpose(), return_value)[0, :] # 组合的投资回报序列 mean = np.mean(portfolio_return_value) var = np.var(portfolio_return_value) skew = scipy.stats.skew(portfolio_return_value) kurtosis = scipy.stats.kurtosis(portfolio_return_value) loss = self.w2 * var + self.w3 * skew + self.w4 * kurtosis # 对方差、偏度、峰度进行优化,期望值最小越好 return loss def constraint(weight_temp): return np.sum(weight_temp) - 1.0 n = len(self.code_list) # 资产个数 x_0 = np.ones((n,)) * 1.0 / n bounds = n * ((0.0, None),) # 权重非负约束条件 res = scipy.optimize.minimize(optimization_target, x_0, method='SLSQP', bounds=bounds, constraints={'type': 'eq', 'fun': constraint}) # print(res) if res.success: # 优化成功 x = res.x else: # 优化失败,用等权 x = x_0 for i in range(len(code_list)): code = code_list[i] code_weights[list_wind2jq([code])[0]] = x[i] return code_weights
def get_weights(self): code_list = list_jq2wind(self.code_list) weight_value = self._calc_weights(code_list) code_weights = {} for i in range(len(code_list)): code = code_list[i] code_weights[list_wind2jq([code])[0]] = weight_value[i] return code_weights
def get_weights(self): code_list = list_jq2wind(self.code_list) code_weights = {} w.start() weight_data = np.array(w.wss(code_list, "mkt_cap_ard", "unit=1;tradeDate=" + self.date + ";currencyType=").Data[0]) weight_data = weight_data / np.sum(weight_data) for i in range(len(code_list)): code = code_list[i] code_weights[list_wind2jq([code])[0]] = weight_data[i] return code_weights
def get_weights(self): code_list = list_jq2wind(self.code_list) w.start() return_value = np.array(w.wsd(code_list, "pct_chg", "ED-" + str(self.N - 1) + "TD", self.date, "").Data) return_value = return_value.transpose() return_value = pd.DataFrame(return_value, columns=code_list) optimizer = HRPOpt(return_value) hrp_portfolio = optimizer.hrp_portfolio() hrp_portfolio = dict(zip(list_wind2jq(list(hrp_portfolio.keys())), hrp_portfolio.values())) return hrp_portfolio
def get_weights(self): w.start() index_data = w.wset("indexconstituent", "date="+self.date+";windcode="+self.index_code).Data index_data_code = index_data[1] index_data_weight = index_data[3] code_weights_all = dict(zip(index_data_code, index_data_weight)) code_weights = {} for code in self.code_list: try: code_weights[code] = code_weights_all[list_jq2wind([code])[0]] except KeyError: code_weights[code] = 0.0 all_weights = np.sum(np.array([t for t in code_weights.values()])) for code in self.code_list: try: code_weights[code] = code_weights_all[list_jq2wind([code])[0]] / all_weights except KeyError: code_weights[code] = 0.0 return code_weights
def get_weights(self): code_list = list_jq2wind(self.code_list) SW1_code_list = [t[0] for t in SW1_INDEX] weight_value = self._calc_weights(SW1_code_list) # 提取行业权重 industry_list = w.wss(code_list, "indexcode_sw", "tradeDate="+self.date+";industryType=1").Data[0] weight_value_temp = [] for i in range(len(code_list)): industry_temp = industry_list[i] if industry_temp is None: # 个股无行业分类数据的处理 weight_value_temp.append(0.0) else: industry_index = SW1_code_list.index(industry_temp) weight_value_temp.append(weight_value[industry_index]) weight_value_temp = np.array(weight_value_temp) weight_value_temp = weight_value_temp / np.sum(weight_value_temp) # 权重归一化 code_weights = dict([[list_wind2jq([code_list[i]])[0], weight_value_temp[i]] for i in range(len(code_list))]) return code_weights
def get_weights(self): code_list = list_jq2wind(self.code_list) stock_ZX1_industry_code_list = w.wss( code_list, "indexcode_citic", "industryType=1;tradeDate=" + self.date).Data[0] ZX1_industry_code_list = list(set(stock_ZX1_industry_code_list)) weight_value = self._calc_weights(list( set(ZX1_industry_code_list))) # 计算股票涉及到的行业权重 # industry_list = w.wss(code_list, "indexcode_sw", "tradeDate="+self.date+";industryType=1").Data[0] weight_value_temp = [] for i in range(len(code_list)): industry_temp = stock_ZX1_industry_code_list[i] if industry_temp is None: # 个股无行业分类数据的处理 weight_value_temp.append(0.0) else: industry_index = ZX1_industry_code_list.index(industry_temp) weight_value_temp.append(weight_value[industry_index]) weight_value_temp = np.array(weight_value_temp) weight_value_temp = weight_value_temp / np.sum( weight_value_temp) # 权重归一化 code_weights = dict( [[list_wind2jq([code_list[i]])[0], weight_value_temp[i]] for i in range(len(code_list))]) return code_weights