def get_bpdata(path, loc, classies): norm = MinMaxScaler() data = pd.DataFrame(pd.read_csv(path, header=None)) arrdata = np.array(data) print(arrdata[loc]) maxV = max(np.array(arrdata[:, 2:6]).reshape(-1, 1)) minV = min(np.array(arrdata[:, 2:6]).reshape(-1, 1)) normarrdata = norm.fit_transform(arrdata[:, 2:6]) adata = [] alable = [] normadata = [] normlable = [] if len(classies) == 1: # len(arrdata)-11: for z in range(2, 6): for y in range(10): adata.extend([arrdata[loc + y][z]]) normadata.extend([normarrdata[loc + y][z - 2]]) alable.extend([arrdata[loc + 11][z]]) normlable.extend([normarrdata[loc + 11][z - 2]]) else: print("classiss长度不为1,结果为", classies) return adata, normadata, alable, normlable, maxV, minV
def processdata(way,max_price,min_price,max_volume,min_volume): data = pd.DataFrame(pd.read_csv(way, header=0)) norm = MinMaxScaler() # 为了归一化数据 arrdata = np.array(data) # datetemp = list(arrdata[:, 0]) # date = list(set(datetemp)) # date.sort(key=datetemp.index) # 集合数据按照原来顺序进行排序 # 将所有数据按照30分钟进行切分,一天四个小时,240分钟 list_data = [] for i in range(0, len(data), 30): list_data.append(arrdata[i:i + 30, :]) # 数据的日期、时间、开、高、低、收、成交量、成交额 # print(len(list_data)) results = [] # 切分的数据按照十个30分钟一组垂直组合 for j in range(len(list_data) - 11): r = np.zeros([100, 10]) # 下跌,一行代表0.01 g = np.zeros([100, 10]) # 上涨 b = np.zeros([100, 10]) # 成交量 # if j >= 10: # break temp = np.concatenate((list_data[j], list_data[j + 1], list_data[j + 2], list_data[j + 3], list_data[j + 4], list_data[j + 5], list_data[j + 6], list_data[j + 7], list_data[j + 8], list_data[j + 9]), axis=0) # 共10天,垂直组合 # 组合后,归一化价格,绘制图像 price = np.array(temp[:, 3:7], dtype='float') volume = np.array(temp[:, 7], dtype='int') # 这里放的十天的数据 # norm_price = norm.fit_transform(price.reshape(-1, 1)) # 归一化价格 # norm_volume = norm.fit_transform(volume.reshape(-1, 1)) # 归一化成交量 # norm_price = norm_price.reshape(-1, 4) norm_price= normalize(price.reshape(-1, 1),max_price,min_price) # 归一化价格 norm_volume = normalize(volume.reshape(-1, 1),max_volume,min_volume) # 归一化成交量 norm_price = norm_price.reshape(-1, 4) # 切分归一化后的价格 days_normprice = [] days_normvolume = [] days_volume = [] for k in range(0, len(norm_price), 30): days_normprice.append(norm_price[k:k + 30, :]) days_normvolume.append(norm_volume[k:k + 30, :]) days_volume.append(volume[k:k + 30]) # 按天绘制图像 for l in range(len(days_normprice)): norm_open = float(days_normprice[l][0, 0]) # 开盘价 norm_close = float(days_normprice[l][-1, 3]) # 收盘价 norm_high = float(max(days_normprice[l][:, 1])) # 最高价 norm_low = float(min(days_normprice[l][:, 2])) # 最低价 print('open', norm_open, 'high', norm_high, 'low', norm_low, 'close', norm_close) loc_open = round(norm_open / 0.01) # 开盘价的位置 ,四舍五入 loc_high = round(norm_high / 0.01) # 开盘价的位置 loc_low = round(norm_low / 0.01) # 开盘价的位置 loc_close = round(norm_close / 0.01) # 开盘价的位置 body = loc_close - loc_open upper_shadow = loc_high - max([loc_open, loc_close]) lower_shadow = min(loc_open, loc_close) - loc_low if loc_close == 100: loc_close = 99 if loc_high == 100: loc_high = 99 if loc_open == 100: loc_open = 99 if loc_low == 100: loc_low = 99 print('body', body, "upper_shadow", upper_shadow, "lower_shadow", lower_shadow) if body >= 0: # 上涨,g矩阵改变 g[loc_close:loc_high, l] = 0.5 # 上影线 g[loc_open:loc_close, l] = 1 # 实体 g[loc_low:loc_open, l] = 0.5 # 下影线 if loc_open == loc_close: g[loc_open, l] = 1 # 实体 # print("g",g) else: # 下跌,body<0 r[loc_open:loc_high, l] = 0.5 # 上影线 r[loc_close:loc_open, l] = 1 # 实体 r[loc_low:loc_close, l] = 0.5 # 下影线 if loc_open == loc_close: r[loc_open, l] = 1 # 实体 # print("r", r) # 成交量改变b矩阵 for m in range(len(days_normprice[l])): begin_loc = int(round(days_normprice[l][m, 2] / 0.01)) end_loc = int(round(days_normprice[l][m, 1] / 0.01)) if begin_loc == 100: begin_loc=99 if end_loc == 100: end_loc = 99 # now_volume = days_normvolume[l][m] now_volume = days_volume[l][m] length = end_loc - begin_loc if length ==0: b[begin_loc, l] = round(now_volume / 1) + b[begin_loc,l] else: b[begin_loc:end_loc, l] = round(now_volume / length) + b[begin_loc:end_loc, l] # 这一价格区间的成交量被均匀分布在这一区间 # print('b',b) #print("最大成交量", max(max(b.reshape(1, -1)))) b = norm.fit_transform(b.reshape(-1, 1)) # 归一化成交量 b = b.reshape(100, 10) results.append([r,g,b]) return results
def processdata(way, way3): data = pd.DataFrame(pd.read_csv(way, header=0)) sum_data = pd.DataFrame(pd.read_csv(way3, header=0)) norm = MinMaxScaler() # 为了归一化数据 arrdata = np.array(data) sum_arrdata = np.array(sum_data) # 将所有数据按照一30分钟进行切分 list_data = [] sum_list_data = [] for i in range(0, len(data), 30): list_data.append(arrdata[i:i + 30, :]) #数据的 市场代码,合约代码,时间,开,高,低,收,成交量,成交额,持仓量 for i in range(0, len(sum_data), 30): sum_list_data.append( sum_arrdata[i:i + 30, :]) # 数据的 市场代码,合约代码,时间,开,高,低,收,成交量,成交额,持仓量 print(len(list_data)) print(len(sum_list_data)) results = [] # 切分的数据按照十个30分钟一组垂直组合 for j in range(len(sum_list_data) - 11): r = np.zeros([100, 10]) # 下跌,一行代表0.01 g = np.zeros([100, 10]) # 上涨 b = np.zeros([100, 10]) # 成交量 # if j >= 20: # break temp = np.concatenate( (sum_list_data[j], sum_list_data[j + 1], sum_list_data[j + 2], sum_list_data[j + 3], sum_list_data[j + 4], sum_list_data[j + 5], sum_list_data[j + 6], sum_list_data[j + 7], sum_list_data[j + 8], sum_list_data[j + 9]), axis=0) # 共10天,垂直组合 # 组合后,归一化价格,绘制图像 price = np.array(temp[:, 3:7], dtype='float') volume = np.array(temp[:, 7], dtype='int') # 这里放的十天的数据 # norm_price = norm.fit_transform(price.reshape(-1, 1)) # 归一化价格 # norm_volume = norm.fit_transform(volume.reshape(-1, 1)) # 归一化成交量 # norm_price = norm_price.reshape(-1, 4) norm_price, max_price, min_price = normalize(price.reshape(-1, 1)) # 归一化价格 norm_volume, max_volume, min_volume = normalize(volume.reshape( -1, 1)) # 归一化成交量 norm_price = norm_price.reshape(-1, 4) # 切分归一化后的价格 days_normprice = [] days_normvolume = [] days_volume = [] for k in range(0, len(norm_price), 30): days_normprice.append(norm_price[k:k + 30, :]) days_normvolume.append(norm_volume[k:k + 30, :]) days_volume.append(volume[k:k + 30]) # 按天绘制图像 for l in range(len(days_normprice)): norm_open = float(days_normprice[l][0, 0]) # 开盘价 norm_close = float(days_normprice[l][-1, 3]) # 收盘价 norm_high = float(max(days_normprice[l][:, 1])) # 最高价 norm_low = float(min(days_normprice[l][:, 2])) # 最低价 print('open', norm_open, 'high', norm_high, 'low', norm_low, 'close', norm_close) loc_open = round(norm_open / 0.01) # 开盘价的位置 ,四舍五入 loc_high = round(norm_high / 0.01) # 开盘价的位置 loc_low = round(norm_low / 0.01) # 开盘价的位置 loc_close = round(norm_close / 0.01) # 开盘价的位置 body = loc_close - loc_open upper_shadow = loc_high - max([loc_open, loc_close]) lower_shadow = min(loc_open, loc_close) - loc_low if loc_close == 100: loc_close = 99 if loc_high == 100: loc_high = 99 if loc_open == 100: loc_open = 99 if loc_low == 100: loc_low = 99 print('body', body, "upper_shadow", upper_shadow, "lower_shadow", lower_shadow) if body >= 0: # 上涨,g矩阵改变 g[loc_close:loc_high, l] = 0.5 # 上影线 g[loc_open:loc_close, l] = 1 # 实体 g[loc_low:loc_open, l] = 0.5 # 下影线 if loc_open == loc_close: g[loc_open, l] = 1 # 实体 # print("g",g) else: # 下跌,body<0 r[loc_open:loc_high, l] = 0.5 # 上影线 r[loc_close:loc_open, l] = 1 # 实体 r[loc_low:loc_close, l] = 0.5 # 下影线 if loc_open == loc_close: r[loc_open, l] = 1 # 实体 # print("r", r) # 成交量改变b矩阵 for m in range(len(days_normprice[l])): begin_loc = int(round(days_normprice[l][m, 2] / 0.01)) end_loc = int(round(days_normprice[l][m, 1] / 0.01)) if begin_loc == 100: begin_loc = 99 if end_loc == 100: end_loc = 99 # now_volume = days_normvolume[l][m] now_volume = days_volume[l][m] length = end_loc - begin_loc if length == 0: b[begin_loc, l] = round(now_volume / 1) + b[begin_loc, l] else: b[begin_loc:end_loc, l] = round( now_volume / length) + b[begin_loc:end_loc, l] # 这一价格区间的成交量被均匀分布在这一区间 # print('b',b) #print("最大成交量", max(max(b.reshape(1, -1)))) b = norm.fit_transform(b.reshape(-1, 1)) # 归一化成交量 b = b.reshape(100, 10) #将RGB转化为灰度图像 M = np.dstack([r, g, b]) * 255 im = Image.fromarray(np.uint8(M)) im = im.convert('L') imdata = im.getdata() M = np.array(imdata).reshape((100, 10)) # print('imshape', np.array(imdata).shape) # plt.imshow(M, origin='lower') # plt.imshow(im, origin='lower', cmap='gray') # plt.show() #results.append([r,g,b]) results.append([M]) return np.array( results[:len(list_data)]), max_price, min_price, max_volume, min_volume