def set_factors_labels(self, price=None, ta_list=None, lags=None): """ 根据价格数据及选定的指标计算特征 :return: the factors array DataFrame """ ta_fun_names = ta.get_functions() df_price = price if price else self.price_data ta_list = ta_list if ta_list else self.dic_factors lags = lags if lags else self.ta_lags ta_factors = df_price.copy() ii = 1 for j in ta_list: if j[0] in ta_fun_names: ta_fun = Function(j[0]) if j[1] == {}: ta_fun = ta_fun else: dic_param = dict(ta_fun.parameters) for key1 in dic_param: dic_param[key1] = j[1][key1] ta_fun.parameters = dic_param ta_value = ta_fun(df_price) if ta_value.size > len(ta_value): ta_factors["%s_%d" % (j[0], ii)] = ta_value.ix[:, 0] else: ta_factors["%s_%d" % (j[0], ii)] = ta_value ii += 1 ta_factors['ACC'] = TSSB_TA(df_price).ACC() ta_factors['ADOSC'] = TSSB_TA(df_price).ADOSC() # 计算lags指标 if lags > 0: ret = pd.DataFrame(index=ta_factors.index) columns = ta_factors.columns for col in columns: for lag in xrange(0, lags): ret[col + "_%s" % str(lag+1)] = ta_factors[col].shift(lag) else: ret = ta_factors # 定义标签: 上涨为1, 下跌为-1 if self.predict_type == 1: labels = df_price['close'].pct_change().shift(-1) # 预测明收盘与今收盘的涨跌 else: labels = (df_price['close'] - df_price['open']).shift(-1) # 预测明收盘与明开盘的涨跌 labels[labels >= 0] = 1 labels[labels < 0] = 0 ret = ret.dropna() labels = labels[ret.index] self.ta_factors, self.labels = ret, labels return ret, labels
def abstract_example(): sma = Function("sma") input_arrays = sma.get_input_arrays() for key in input_arrays.keys(): input_arrays[key] = idata sma.set_input_arrays(input_arrays) odata = sma(30) # timePeriod=30, specified as an arg bbands = Function("bbands", input_arrays) bbands.parameters = {"timeperiod": 20, "nbdevup": 2, "nbdevdn": 2} upper, middle, lower = bbands() # multiple output values unpacked (these will always have the correct order) kama = Function("kama").run(input_arrays) # alternative run() calling method. plot(odata, upper, middle, lower, kama)
def abstract_example(): sma = Function('sma') input_arrays = sma.get_input_arrays() for key in input_arrays.keys(): input_arrays[key] = idata sma.set_input_arrays(input_arrays) odata = sma(30) # timePeriod=30, specified as an arg bbands = Function('bbands', input_arrays) bbands.parameters = {'timeperiod': 20, 'nbdevup': 2, 'nbdevdn': 2} upper, middle, lower = bbands( ) # multiple output values unpacked (these will always have the correct order) kama = Function('kama').run( input_arrays) # alternative run() calling method. plot(odata, upper, middle, lower, kama)
def __ta_look_back(self): """ 获取所需回溯历史数据的长度,计算技术指标时需要n天前的数据,同时预测涨跌时又要windows_size的历史指标 :return: """ ta_fun_names = ta.get_functions() lk_list = [] for j in self.dic_factors: if j[0] in ta_fun_names: ta_fun = Function(j[0]) if j[1] == {}: continue else: dic_param = dict(ta_fun.parameters) for key1 in dic_param: dic_param[key1] = j[1][key1] ta_fun.parameters = dic_param lk = ta_fun.lookback lk_list.append(lk) else: pass ret = max(lk_list) return ret