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
예제 #2
0
 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