def _passed_to(self, datei, point, last_pm=0): ''' return (True/False:If passed, Int:-1=out to down, 0=on, 1=out to up) ''' ret = (False, 0) if point <= 0: return ret (open, high, low, close, volume) = self._get_prices(datei, 2) tp = (high[1]+low[1]+close[1])/3 boxsize = kf.get_bollinger_boxsize(tp) cmp = tp - point if abs(cmp) < boxsize: return ret if max(high) >= point and min(low) <= point: if cmp > 0 and last_pm <= 0: return (True, 1) elif cmp < 0 and last_pm >= 0: return (True, -1) else: return ret else: if cmp > 0: return (False, 1) elif cmp < 0: return (False, -1) else: return ret
def _get_nearbys(self, price, points): points.insert(0, price) order = np.argsort(points) bef = [] aft = [] boxsize = kf.get_bollinger_boxsize(price) for j in range(order): i = order[j] if i == 0: if j > 0: bef = [order[j-1]] k=j-2 while k>=0: if points[order[k]] >= bef - boxsize: bef.append(order[k]) k -= 1 if j < len(order): aft = order[j+1] k=j+2 while k<len(order): if points[order[k]] <= aft + boxsize: aft.append(order[k]) k += 1 return bef, aft
def _passed_to(self, datei, point): ''' return (True/False:If passed, Int:-1=out to down, 0=on, 1=out to up) ''' (open, high, low, close) = self._get_prices(datei, 2) tp = (high[1]+low[1]+close[1])/3 boxsize = kf.get_bollinger_boxsize(point) cpm = tp - point if abs(cpm) < boxsize: return (True, 0) if max(high) >= point and min(low) <= point: if cmp > 0: return (True, 1) elif cmp < 0: return (True, -1) else: return (True, 0) else: if cmp > 0: return (False, 1) elif cmp < 0: return (False, -1) else: return (False, 0)
def _get_nearest_line_idxs(self, datei, line_points, exclude_idxs, trend): (open, high, low, close) = self._get_prices(datei, 1) tp = (high+low+close)/3 line_points.append(tp) tp_idx = len(line_points)-1 order = np.argsort(line_points) tp_order = -1 ex_order = [-1]*len(exclude_idxs) for i in range(len(order)): if order[i] == tp_idx: tp_order = i for j in range(len(exclude_idxs)): exi = exclude_idxs[j] if order[i] == exi: ex_order[j] = i boxsize = kf.get_bollinger_boxsize(tp) nearest_line_idxs = [] if tp_order > max(ex_order): if trend == "up": if tp_order == len(order)-1: return [-1] else: for i in range(tp_order+1,len(order)): if len(nearest_line_idxs) == 0: nearest_line_idxs = [order[i]] else: curr_point_idx = order[i] pre_point_idx = nearest_line_idxs[-1] if line_points[curr_point_idx] - boxsize <= line_points[pre_point_idx]: nearest_line_idxs.append(curr_point_idx) else: return [] if tp_order < min(ex_order): if trend == "down": if tp_order == 0: return [-1] else: r = range(tp_order).sort(reverse=True) for i in r: if len(nearest_line_idxs) == 0: nearest_line_idxs = [order[i]] else: curr_point_idx = order[i] pre_point_idx = nearest_line_idxs[-1] if line_points[curr_point_idx] + boxsize >= line_points[pre_point_idx]: nearest_line_idxs.append(curr_point_idx) else: return [] return nearest_line_idxs
def _get_touched_line_idxs(self, datei, line_points): (open, high, low, close) = self._get_prices(datei, 2) h = max(high) l = min(low) touched_line_idxs = [] price = (high[-1]+low[-1]+close[-1])/3 boxsize = kf.get_bollinger_boxsize(price) i = 0 for i in range(line_points): lp = line_points[i] if h+boxsize >= lp and l-boxsize <= lp: touched_line_idxs.append(i) return touched_line_idxs
def _get_trend_lines(self, joints, indexes, pmmask): j = 5 trend_lines = {} for i in range(5, len(indexes)): if pmmask[i] != pmmask[i-2] or pmmask[i] != pmmask[i-4]: continue df = indexes[i]-indexes[i-4] if df != 0: slope = (joints[i]-joints[i-4])*1.0/df else: slope = 0 const = joints[i-4]-slope*indexes[i-4] midrp = joints[i-2] midlp = self._eq(indexes[i-2], slope, const) boxsize = kf.get_bollinger_boxsize(midrp) if midlp - boxsize <= midrp and midlp + boxsize >= midrp: for d in range(indexes[i], indexes[i] + indexes[i]-indexes[i-4]+1): if trend_lines.has_key(d) == False: trend_lines[d] = [] trend_lines[d].append(self._eq(d, slope, const)) j += 1 self.trend_lines = trend_lines