def get_bool_average(self, average_data): self.average_data = average_data length = len(average_data) ref_al = REF(average_data, 1).series[length - 500 - 1:] ref_al_2 = REF(average_data, 2).series[length - 500 - 2:] average_line = average_data.series[length - 500:] if (len(average_line) != len(ref_al)): return None, None ref_bool_data_position_2 = np.where(ref_al < ref_al_2) ref_bool_data_position = np.where(ref_al < average_line) intersect1d_list = np.intersect1d(ref_bool_data_position_2, ref_bool_data_position) self.average_axis_buy = {} temp1 = np.where(average_line < 0.5)[-1] self.average_axis_buy["X"] = np.intersect1d(intersect1d_list, temp1) # 买点 小于 0.5 self.average_axis_buy["Z"] = average_line[self.average_axis_buy["X"]] self.average_axis_sell = {} self.average_axis_sell["X"] = np.where(average_line < ref_al)[-1] ref_data = average_line - ref_al ref_bool_data = ref_data > 0 if True else False average_map = {} average_map["X"] = self.average_axis_buy["X"] average_map["Y"] = self.average_axis_buy["Z"] average_map["C"] = "#DC143C" self.additional_average_map_list.append(average_map) return ref_bool_data, average_line
def get_buy_bottomUp_flag_list(self): intersect1d_list = self.average_axis_buy["X"] ref_ma3_1 = REF(self.ma3, 1) ref_ma3_2 = REF(self.ma3, 2) ma3_up_flag = np.where( self.ma3.series[-500:] > ref_ma3_1.series[-500:]) ma3_down_flag = np.where( ref_ma3_2.series[-500:] > ref_ma3_1.series[-500:]) right_flag = np.intersect1d(ma3_up_flag, ma3_down_flag) X = self.X my_close_list = np.array(X[:, 4], dtype=np.float) my_close_list = pd.Series(my_close_list) close_data = np.array(my_close_list) close_data = NumericSeries(close_data) my_open_list = np.array(X[:, 1], dtype=np.float) my_open_list = pd.Series(my_open_list) open_data = np.array(my_open_list) open_data = NumericSeries(open_data) columns = np.abs(my_close_list / my_open_list - 1) columns = columns[-500:] wanted_columns1 = np.where(0.0005 < columns)[0] wanted_columns2 = np.where(columns < 0.005)[0] wanted_columns = np.intersect1d(wanted_columns1, wanted_columns2) right_flag = np.intersect1d(right_flag, wanted_columns) right_flag = np.intersect1d(right_flag, intersect1d_list) #高价等差 hhv_20 = HHV(self.ma3, 50) hhv_rate_list = hhv_20 / close_data hhv_rate_list = hhv_rate_list.series[-500:] hhv_rate_list_flag = np.where(hhv_rate_list > 1.05) right_flag = np.intersect1d(right_flag, hhv_rate_list_flag) self.zhibiao_axis_map = {} self.zhibiao_axis_map["X"] = right_flag my_close_list = my_close_list.values[-500:] self.zhibiao_axis_map["Y"] = my_close_list[right_flag] numbers_columns = {} numbers_columns["X"] = np.where(columns > 0.01)[0] numbers_columns["Y"] = my_close_list[numbers_columns["X"]] numbers_columns["Z"] = columns.values[numbers_columns["X"]] self.additional_map_list.append(numbers_columns) self.get_top_flag_position_list() if len(right_flag) > 0: flag = right_flag[-1] == 499 return flag return False
def get_top_flag_position_list(self): abs_close_list = self.abs_close_list() close_series = NumericSeries(abs_close_list) ref_close_2 = REF(close_series, 2) ref_close_1 = REF(close_series, 1) list1 = np.where(ref_close_1.series[-500:] > ref_close_2.series[-500:]) list2 = np.where( ref_close_1.series[-500:] > close_series.series[-500:]) intersect1d_list = np.intersect1d(list1, list2) self.top_flag_position_list = intersect1d_list
def getMountainAverage(self, my_close_list): temp = NumericSeries(self.average_axis_buy["Z"]) ref_temp = REF(temp, 1) size = ref_temp.series.size if (size < 1): return False temp = temp.series[-size:] temp_average = self.average_data.series[-500:] buy_axis = {} buy_axis["X"] = [] buy_axis["Y"] = [] buy_axis["Z"] = [] #找出买点 point_save = 0 for i in range(size): if i + 1 <= size and i >= point_save: i1 = self.average_axis_buy["X"][i] value_i1 = temp[i] for j in range(i + 1, size): j1 = self.average_axis_buy["X"][j] value_j1 = temp[j] gap_length = j1 - i1 if (gap_length < 100 and gap_length > 20): gap_abs = np.abs(value_i1 - value_j1) if (gap_abs < 0.08): #找出两点之间最高值 temp_y = temp_average[i1:j1] temp_area = sum(temp_y) - value_i1 * (len(temp_y) - 2) if temp_area > 0: buy_axis["X"].append(i1) buy_axis["X"].append(j1) buy_axis["Y"].append(value_i1) buy_axis["Y"].append(value_j1) buy_axis["Z"].append(temp_area) buy_axis["Z"].append(temp_area) point_save = j break if len(buy_axis["X"]) == 0: return False temp_map = {} temp_map["X"] = np.array(buy_axis["X"]) temp_map["Y"] = temp_average[temp_map["X"]] temp_map["Z"] = np.array(buy_axis["Z"]) temp_map["C"] = "#0A0A0A" self.additional_average_map_list.append(temp_map) temp_map2 = {} temp_map2["X"] = temp_map["X"] temp_map2["Y"] = my_close_list[temp_map2["X"]] self.zhibiao_axis_map = temp_map2 if temp_map["X"].size > 0 and temp_map["X"][-1] == 499: return True return False
def divergence_average(self, average_line,my_close_list,bool_data): self.average_line=average_line bool_data = NumericSeries(bool_data) ref_bool_data = REF(bool_data,1) select_bool = bool_data >ref_bool_data ret=np.where(select_bool.series==True)[0] if select_bool==True: first_one_position = ret[-1] first_average = average_line[first_one_position] first_close = my_close_list[first_one_position] second_one_position = ret[-2] second_average = average_line[second_one_position] second_close = my_close_list[second_one_position] #不是底分型,就去除 high_data=np.array(self.X[:,2],dtype=np.float) bottom_up=my_close_list[-1]>high_data[-2] #divergence_average 背驰 flag=first_average <1.5 and second_average<1.5 and first_average>second_average and first_close< second_close \ and bottom_up if(flag): return True self.get_buy_flag_list(ret, average_line, my_close_list) return False
def get_sell_flag(self, average_line): ref_average = REF(self.average_data, 1) temp_flag = self.average_data < ref_average temp_flag = temp_flag.series[-500:] positions = np.where(temp_flag == True)[0] temp = {} temp["X"] = positions temp["Y"] = average_line[positions] temp["C"] = "#7FFF00" self.additional_average_map_list.append(temp) if positions[-1] == 499: return True return False
def double_cross(self, average_line, average_data, bool_data): bool_data = NumericSeries(bool_data) ref_bool_data = REF(bool_data, 1) select_bool = bool_data > ref_bool_data select_bool = select_bool.series[99 - 20:] ret = np.where(select_bool == True) size = ret[0].size if (size < 2): return False average_line = average_line[100 - 20:] first_one_position = ret[0][-1] first_one = average_line[first_one_position] second_one_position = ret[0][-2] second_one = average_line[second_one_position] if (first_one > second_one and select_bool[-1] == True): return True return False
def getBreakthroughHighPoint(self, my_close_list): temp = NumericSeries(self.average_axis_buy["Z"]) ref_temp = REF(temp, 1) size = ref_temp.series.size if (size < 1): return False temp = temp.series[-size:] bool_temp = temp - ref_temp.series > 0.25 bool_temp = np.insert(bool_temp, 0, False) position_list = np.where(bool_temp == True)[0] temp_map = {} temp_map["X"] = self.average_axis_buy["X"][position_list] temp_map["Y"] = self.average_axis_buy["Z"][position_list] temp_map["C"] = "#0A0A0A" self.additional_average_map_list.append(temp_map) temp_map2 = {} temp_map2["X"] = self.average_axis_buy["X"][position_list] temp_map2["Y"] = my_close_list[temp_map2["X"]] self.zhibiao_axis_map = temp_map2 if temp_map["X"].size > 0 and temp_map["X"][-1] == 499: return True return False