示例#1
0
def select(stock_list, x_position=-1, zf=4, kline_type=StockConfig.kline_type_week, min_item=80):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        high = kline[:, 3].astype(np.float)
        low = kline[:, 4].astype(np.float)
        p_close = np.roll(close, 1)
        sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
        max_zf = StockIndicator.max_zf(kline)
        if max_zf[x_position] > zf and (low[x_position] < sma20[x_position]) and open[x_position] < close[x_position]:

            print(stock)
            result.append(stock)
    print(len(result))
    return result
示例#2
0
def select(x_position=-1):
    origin_stock = get_stock(x_position - 1)
    new_stock = get_stock(x_position)
    diff_stock = [x for x in new_stock if x in origin_stock]
    result = []

    for stock in diff_stock:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=StockConfig.kline_type_day)
        except Exception as e:
            print(e)
            continue

        if kline.shape[0] < 10:
            continue

        close = kline[:, 2].astype(np.float)
        cjl = StockIndicator.cjl(kline)
        sma_cjl5, smacjl10 = StockIndicator.asma(cjl, 5, 10)

        if close[x_position] > np.max(close[x_position - 10: x_position]):
            if cjl[x_position] > sma_cjl5[x_position] > smacjl10[x_position]:
                print(stock)
                result.append(stock)

    return result
示例#3
0
def stat_chg(stock_list,
             from_date,
             to_date,
             kline_type=StockConfig.kline_type_day):
    reports = []
    if len(stock_list) == 0:
        return reports

    for stock in stock_list:
        frome_position = StockIndicator.position(from_date, stock.stock_code,
                                                 kline_type)
        to_position = StockIndicator.position(to_date, stock.stock_code,
                                              kline_type)
        if frome_position is not None and to_position is not None:
            kline = StockIO.get_kline(stock.stock_code,
                                      kline_type=StockConfig.kline_type_day)
            pre_close = float(kline[frome_position][2])
            close = float(kline[to_position][2])
            reports.append(
                (stock.stock_code, stock.stock_name, close, close - pre_close,
                 (close - pre_close) / pre_close * 100))

    reports.sort(key=lambda x: x[4])

    print("%-10s %-10s %8s %8s %8s" %
          ('code', 'name', 'price', 'chg', 'chg_per'))
    for report in reports:
        print("%-10s %-10s %8.2f %8.2f %8.2f" %
              (report[0], report[1], report[2], report[3], report[4]))
    return reports
def select(stock_list,
           kline_type=StockConfig.kline_type_week,
           x_position=-1,
           abs_chg=15,
           min_vb=10,
           max_vb=100,
           min_item=120):
    """
    指定 振幅 或者 涨幅区间
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            close = kline[:, 2].astype(np.float)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        chg = StockIndicator.chg(kline)
        vb = StockIndicator.vibration(kline)
        if max_chg > chg[x_position] > min_chg or max_vb > vb[
                x_position] > min_vb:
            print(stock)
            result.append(stock)
    return result
示例#5
0
def select(stock_list,
           x_position=-1,
           df=-4,
           kline_type=StockConfig.kline_type_week,
           min_item=80):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < min_item:
            continue

        close = kline[:, 2].astype(np.float)
        sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
        max_df = StockIndicator.max_df(kline)
        if max_df[x_position] < df and (close[x_position] < sma10[x_position]):

            print(stock)
            result.append(stock)
    print(len(result))
    return result
示例#6
0
def select(stock_list,
           x_position=-1,
           kline_type=StockConfig.kline_type_day,
           min_item=120):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        low = kline[:, 4].astype(np.float)
        sma5, sma10, sma20, sma30, sma60 = StockIndicator.sma(
            kline, 5, 10, 20, 30, 60)
        zf = StockIndicator.zf(kline)

        if close[x_position] > sma5[x_position] > sma10[x_position] > open[
                x_position] and sma10[x_position] > sma20[x_position]:
            if zf[x_position] > 5:
                print(stock)
                result.append(stock)
    return result
示例#7
0
def select(stock_list, kline_type=StockConfig.kline_type_week, x_position=-1, min_vb=6, ratio=0.4, min_item=120):
    """
    振幅/涨幅
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        high = kline[:, 3].astype(np.float)
        low = kline[:, 4].astype(np.float)
        chg = StockIndicator.chg(kline)
        vb = StockIndicator.vibration(kline)
        entity = StockIndicator.entity(kline)
        sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
        if entity[x_position] / abs(chg[x_position]) > 1.5 and entity[x_position] > 3:
                print(stock)
                result.append(stock)
    return result
示例#8
0
def select(stock_list, x_position=-1, min_item=10):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=StockConfig.kline_type_day)
        except:
            continue
        if kline.shape[0] < min_item:
            continue
        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
        vb = StockIndicator.vibration(kline)
        chg = StockIndicator.chg(kline)
        chg_compress = StockAlgrithm.compress_array(chg)
        if chg[x_position] < 0:
            if sma5[x_position] > sma10[x_position] and  sma5[x_position] > sma20[x_position]:
                if chg_compress[-2] + chg_compress[-1] > 0:
                    print(stock)
                    result.append(stock)

    return result
示例#9
0
def select(stock_list, kline_type=StockConfig.kline_type_week, x_position=-1, min_vb=6, ratio=0.4, min_item=120, append_file='recent2.txt'):
    """
    下影线选股法
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        high = kline[:, 3].astype(np.float)
        low = kline[:, 4].astype(np.float)
        vb = StockIndicator.vibration(kline)
        chg = StockIndicator.chg(kline)
        sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)

        if StockShape.is_lower_shadow(open[x_position], close[x_position], high[x_position], low[x_position], min_vb=min_vb, ratio=ratio, red=True):
            print(stock)
            result.append(stock)
                # print(stock)
                # result.append(stock)
                # append to file
                # path = '{root}/{name}'.format(root=StockConfig.path_track, name=append_file)
                # with open(path, mode='a', encoding='utf-8') as f:
                #     value = low[-1] + (high[-1] - low[-1]) * 0.3
                #     f.write("{},{},{}\n".format(stock.stock_code, value, high[-1]))

    return result
def select(stock_list, kline_type=StockConfig.kline_type_week, x_position=-1, min_chg=-100, max_chg=100, min_vb = 15, max_vb=100, period=6,min_item=120):
    """
    根据 振幅区间 和 涨幅区间排序
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            close = kline[:, 2].astype(np.float)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        chg = StockIndicator.chg(kline)
        vb = StockIndicator.vibration(kline)
        if max_chg > chg[x_position] > min_chg and max_vb > vb[x_position] > min_vb:
            # 过滤掉单边上涨
            if not StockAlgrithm.sumOfSubArray(chg[-period:])[0] > 14:
                if np.max(vb[-period:]) > 14:
                    print(stock)
                    result.append(stock)
    return result
示例#11
0
def select(stock_list,
           x_position=-1,
           kline_type=StockConfig.kline_type_week,
           min_item=120):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except:
            continue
        if kline.shape[0] < min_item:
            continue
        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        sma5, sma10, sma20, sma30 = StockIndicator.sma(kline, 5, 10, 20, 30)
        cjl = StockIndicator.cjl(kline)
        if sma5[x_position] > sma10[x_position] > sma20[x_position] > sma30[
                x_position]:
            result.append(stock)
    return result
示例#12
0
def select_7(date):
    """
    还有about=False等
    :return:
    """
    filter_date = date
    fileter_x_position = None
    stock_list = StockFilter.find_kdj_jx('sza',
                                         kline_type=StockConfig.kline_type_day,
                                         x_position=fileter_x_position,
                                         date=filter_date,
                                         about=False)
    result = []
    hit = False
    for stock in stock_list:
        x_position = StockIndicator.position(
            filter_date, stock.stock_code, StockConfig.kline_type_day
        ) if filter_date is not None else fileter_x_position
        kline = StockIO.get_kline(stock.stock_code,
                                  kline_type=StockConfig.kline_type_day)
        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        vol = kline[:, 5].astype(np.float)
        sma5 = StockIndicator.sma(kline, 5)[0]
        if sma5.shape[0] < 5 + abs(x_position):
            continue
        if sma5[x_position] < open[x_position] < close[x_position]  \
            and sma5[x_position - 2] > close[x_position - 2] \
            and sma5[x_position - 3] > close[x_position - 3] \
                and sma5[x_position - 4] > close[x_position - 4] \
                and sma5[x_position - 5] < close[x_position - 5] :

            result.append(stock)
    return result
示例#13
0
def select(stock_list,
           kline_type=StockConfig.kline_type_week,
           x_position=-3,
           shadow_min_vb=3.5,
           shadow_ratio=0.4,
           min_chg=-100,
           max_chg=100,
           min_vb=6,
           max_vb=20,
           min_item=120):
    """
    根据 振幅区间 和 涨幅区间排序
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    result = []

    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            open = kline[:, 1].astype(np.float)
            close = kline[:, 2].astype(np.float)
            high = kline[:, 3].astype(np.float)
            low = kline[:, 4].astype(np.float)
            sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
            chg = StockIndicator.chg(kline)
            vb = StockIndicator.vibration(kline)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        if close[x_position] < sma5[x_position] < sma10[x_position] < sma20[
                x_position]:
            continue

        if max_chg > chg[x_position] > min_chg and max_vb > vb[
                x_position] > min_vb:
            result.append(stock)
            continue

        if StockShape.is_lower_shadow(open[x_position],
                                      close[x_position],
                                      high[x_position],
                                      low[x_position],
                                      min_vb=shadow_min_vb,
                                      ratio=shadow_ratio,
                                      red=False):
            result.append(stock)
            continue

            # if sma5[x_position] > sma10[x_position] > sma20[x_position] and vb[x_position] > shadow_min_vb:
            #     result.append(stock)
            continue

    return result
示例#14
0
def select(stock_list,
           x_position=-1,
           w_x_position=-1,
           kline_type=StockConfig.kline_type_week,
           min_item=80):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        low = kline[:, 4].astype(np.float)
        sma5, sma10, sma20, sma30, sma60 = StockIndicator.sma(
            kline, 5, 10, 20, 30, 60)
        cjl = StockIndicator.cjl(kline)
        add = False
        if close[x_position] > sma5[x_position] > sma10[x_position] and close[
                x_position] > sma20[x_position] and sma5[x_position] > sma20[
                    x_position]:
            if close[x_position] > np.max(close[x_position - 10:x_position]):
                add = False
                # 趋势
                count = 0
                while count < 10:
                    if StockFilter2.is_jx(sma5, sma10, x_position - count):

                        add = True
                        break
                    count += 1

        if add:
            max_exceed = 5
            while close[x_position] > np.max(
                    close[x_position - max_exceed:x_position]):
                max_exceed += 1
                if max_exceed > 200:
                    break

            stock.max_exceed = max_exceed
        if add:
            print(stock)
            result.append(stock)

    return result
示例#15
0
def select(stock_list,
           kline_type=StockConfig.kline_type_day,
           x_position=-1,
           min_item=120):
    """
    根据 振幅区间 和 涨幅区间排序
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            close = kline[:, 2].astype(np.float)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, -1].astype(np.float)
        close = kline[:, -2].astype(np.float)
        high = kline[:, -3].astype(np.float)
        low = kline[:, -4].astype(np.float)
        sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
        vb = StockIndicator.vibration(kline)
        count = 9
        stock.count = 0
        while count >= 0:
            strength = 0
            if high[x_position - count] > sma5[x_position -
                                               count] > low[x_position -
                                                            count]:
                strength += 1
            if high[x_position - count] > sma10[x_position -
                                                count] > low[x_position -
                                                             count]:
                strength += 1
            if high[x_position - count] > sma20[x_position -
                                                count] > low[x_position -
                                                             count]:
                strength += 1
            if strength >= 4 and vb[x_position - count] > 4:
                stock.count += 1
            count -= 1
        if stock.count > 3:
            result.append(stock)
            print(stock)
    return result
示例#16
0
def select_w_5(stock_list):
    """
    随机游走模型
    :return:
    """
    min_item = 120
    x_position = -1
    period = 5

    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=StockConfig.kline_type_week)
        except:
            continue
        if kline.shape[0] <= min_item:
            continue

        open = kline[:, 1].astype(np.float)[:None if x_position == -1 else (x_position + 1)]
        close = kline[:, 2].astype(np.float)[:None if x_position == -1 else (x_position + 1)]
        high = kline[:, 3].astype(np.float)[:None if x_position == -1 else (x_position + 1)]
        low = kline[:, 4].astype(np.float)[:None if x_position == -1 else (x_position + 1)]
        vb = StockIndicator.vibration(kline)[:None if x_position == -1 else (x_position + 1)][-period:]
        cg =  (close - open)[-period:]
        count = 0
        for index, z in enumerate(vb):
            if z > 15:
                count = count + 1

        if count >= 3 and not stock.stock_code.startswith('300'):
            result.append(stock)
            print(vb)
            print(stock)

    return result
示例#17
0
def select(stock_list,
           kline_type=StockConfig.kline_type_week,
           x_position=-1,
           min_hsl=10,
           max_hsl=100,
           min_item=120):
    """
    根据 换手率选择
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    ltgb = StockIO.get_ltgb()
    print(ltgb)
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            close = kline[:, 2].astype(np.float)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        hsl = StockIndicator.hsl(kline, ltgb.get(stock.stock_code, 0))
        if hsl is None:
            continue

            #print(stock.stock_code)
        if min_hsl < hsl[x_position] < max_hsl:
            print(stock)
            result.append(stock)
    return result
示例#18
0
def a(stock_list,
      kline_type=StockConfig.kline_type_day,
      x_position=-1,
      min_item=360):
    """
    一阳穿三线, 股票有启动迹象,观察后续均线走势
    :param stock_list:
    :param kline_type:
    :param x_position:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            origin_kline = StockIO.get_kline(stock.stock_code,
                                             kline_type=kline_type)
        except:
            continue

        if origin_kline.shape[0] < min_item:
            continue

        open = origin_kline[:, 1].astype(np.float)
        close = origin_kline[:, 2].astype(np.float)
        high = origin_kline[:, 3].astype(np.float)
        low = origin_kline[:, 4].astype(np.float)
        sma5, sma10, sma20 = StockIndicator.sma(origin_kline, 5, 10, 20)
        if close[x_position] > open[x_position]:
            if open[x_position] < min(
                    sma5[x_position], sma10[x_position],
                    sma20[x_position]) and close[x_position] > max(
                        sma5[x_position], sma10[x_position],
                        sma20[[x_position]]):
                result.append(stock)
    return result
示例#19
0
def day_tendency(x_position=-1):
    """
    收盘价 位于 20日线 或者 60日线之上
    :return:
    """
    stock_result = []
    stock_list_1 = StockIO.get_stock('sha')
    stock_list_2 = StockIO.get_stock('sza')
    stock_list = stock_list_1 + stock_list_2
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code,
                                      kline_type=StockConfig.kline_type_day)
            open = kline[:, 1].astype(np.float)
            close = kline[:, 2].astype(np.float)
            sma5, sma10, sma20, sma60 = StockIndicator.sma(
                kline, 5, 10, 20, 60)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < 360:
            continue

        if sma5[x_position] > sma20[x_position] and sma5[x_position] > sma60[
                x_position] and sma10[x_position] > sma20[
                    x_position] and sma10[x_position] > sma60[x_position]:
            if close[x_position] < sma5[x_position] and open[
                    x_position] > sma5[x_position]:
                stock_result.append(stock)
    return stock_result
示例#20
0
def select(stock_list,
           kline_type=StockConfig.kline_type_week,
           x_position=-1,
           min_item=120):
    """
    根据 换手率选择
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    ltgb = StockIO.get_ltgb()
    print(ltgb)
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            close = kline[:, 2].astype(np.float)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        sma30 = StockIndicator.sma(kline, 30)[0]

        if close[x_position] > sma30[x_position]:
            #print(stock)
            result.append(stock)
    return result
示例#21
0
def select(stock_list,
           x_position=-1,
           kline_type=StockConfig.kline_type_week,
           min_item=120):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except:
            continue
        if kline.shape[0] < min_item:
            continue
        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        high = kline[:, 3].astype(np.float)
        sma5, sma10, sma20, sma60 = StockIndicator.sma(kline, 5, 10, 20, 60)
        if not (close[x_position] > sma5[x_position] > sma10[x_position]
                and sma5[x_position] > sma20[x_position]):
            continue
        if not close[x_position] > max(
                np.max(open[x_position - 20:x_position]),
                np.max(close[x_position - 20:x_position])):
            continue

        print(stock)
        result.append(stock)

    return result
示例#22
0
def fei_lei():
    stock_result = []
    stock_list = StockIO.get_stock('sha')
    stock_list += StockIO.get_stock('sza')

    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code,
                                      kline_type=StockConfig.kline_type_day)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < 41:
            continue

        close = kline[:, 2].astype(np.float)
        sma5, sma10, sma20, sma30 = StockIndicator.sma(kline, 5, 10, 20, 30)

        if close[-1] > sma5[-1] > sma10[-1] > sma20[-1] > sma30[-1]:
            print(stock)
            stock_result.append(stock)

    StockIO.save_stock('day_up',
                       stock_result,
                       root=StockConfig.path_stock,
                       message='日线向上股')
示例#23
0
def select(stock_list, kline_type=StockConfig.kline_type_week, x_position=-1, min_vb=6, ratio=0.4, min_item=120):
    """
    影线选股法
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        high = kline[:, 3].astype(np.float)
        low = kline[:, 4].astype(np.float)
        chg = StockIndicator.chg(kline)
        #sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)

        if StockShape.is_shadow(open[x_position], close[x_position], high[x_position], low[x_position], min_vb=min_vb, ratio=ratio, red=False):
            if not StockAlgrithm.sumOfSubArray(chg[-15:])[0] > 15:
                print(stock)
                result.append(stock)
    return result
示例#24
0
def select(stock_list,
           kline_type=StockConfig.kline_type_week,
           x_position=-1,
           period=10,
           min_down=-5,
           max_down=-15,
           min_item=100):
    """
    根据跌幅来选择
    :param stock_list:
    :param kline_type:
    :param avg:d
    :return:
    """
    result = []
    from_position = x_position - period + 1
    to_position = None if x_position == -1 else (x_position + 1)
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            chg = StockIndicator.chg(kline)[from_position:to_position]
        except:
            continue
        if kline.shape[0] < min_item:
            continue

        up, down = StockAlgrithm.sumOfSubArray(chg)
        if max_down < down < min_down:
            result.append(stock)

    return result
示例#25
0
def week_tendency2():
    """
    收盘价 位于 20日线 或者 60日线之上
    :return:
    """
    stock_result = []
    stock_list_1 = StockIO.get_stock('sha')
    stock_list_2 = StockIO.get_stock('sza')
    stock_list = stock_list_1 + stock_list_2
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code,
                                      kline_type=StockConfig.kline_type_week)
            close = kline[:, 2].astype(np.float)
            sma5, sma10, sma20, sma60 = StockIndicator.sma(
                kline, 5, 10, 20, 60)
        except Exception as e:
            print(e)
            continue
        if kline.shape[0] < 41:
            continue

        if sma5[-2] > sma10[-2] and sma5[-2] > sma20[-2]:
            stock_result.append(stock)
    return stock_result
示例#26
0
def query_close(stock_list, date):
    reports = []
    if len(stock_list) == 0:
        return reports

    for stock in stock_list:
        position = StockIndicator.position(
            date, stock.stock_code, kline_type=StockConfig.kline_type_day)
        if position is not None:
            kline = StockIO.get_kline(stock.stock_code,
                                      kline_type=StockConfig.kline_type_day)
            kline_item = kline[position]
            pre_close = float(kline[position -
                                    1][2] if kline.shape[0] > abs(position)
                              else kline_item[1])
            close = float(kline_item[2])
            reports.append(
                (stock.stock_code, stock.stock_name, close, close - pre_close,
                 (close - pre_close) / pre_close * 100))

    reports.sort(key=lambda x: x[4])

    print("%-10s %-10s %8s %8s %8s" %
          ('code', 'name', 'price', 'chg', 'chg_per'))
    for report in reports:
        print("%-10s %-10s %8.2f %8.2f %8.2f" %
              (report[0], report[1], report[2], report[3], report[4]))
    return reports
示例#27
0
def delete_invalid_record():
    with open('{}/{}'.format(StockConfig.path_track, '2_sma_track.txt'),
              'r',
              encoding='utf-8') as f:
        lines = f.readlines()

    with open('{}/{}'.format(StockConfig.path_track, '2_sma_track.txt'),
              'w',
              encoding='utf-8') as f:
        for line in lines:
            if not line.startswith("#") and not '\n' == line:
                data = line.strip('\n').split(',')
                stock_code = data[0]
                target_sma = 0 if data[2].strip() == '' else int(data[2])
                target_price = 0 if data[3].strip() == '' else float(data[3])
                kline = StockIO.get_kline(stock_code,
                                          StockConfig.kline_type_day)
                close = kline[:, -2].astype(np.float)
                sma5, sma10, sma20 = StockIndicator.sma(kline, 5, 10, 20)
                if target_sma == 0 and target_price == 0:
                    if sma5[-1] < sma10[-1] and sma5[-1] < sma20[-1] or close[
                            -1] < sma20[-1]:
                        continue
                f.write(line)
            else:
                f.write(line)
示例#28
0
def select(stock_list,
           x_position=-1,
           w_x_position=-1,
           kline_type=StockConfig.kline_type_week,
           min_item=120):
    """
    均线选股法
    :param stock_list:
    :param kline_type:
    :param avg:
    :return:
    """
    result = []
    for stock in stock_list:
        try:
            kline = StockIO.get_kline(stock.stock_code, kline_type=kline_type)
            w_kline = StockIO.get_kline(stock.stock_code,
                                        kline_type=StockConfig.kline_type_week)
        except:
            continue
        if kline.shape[0] < min_item:
            continue
        open = kline[:, 1].astype(np.float)
        close = kline[:, 2].astype(np.float)
        sma5, sma10, sma20, sma30 = StockIndicator.sma(kline, 5, 10, 20, 30)
        cjl = StockIndicator.cjl(kline)
        w_close = w_kline[:, 2].astype(np.float)
        #if w_sma5[w_x_position] > w_sma10[w_x_position]:
        if close[x_position] > sma5[x_position] > sma10[x_position] and close[
                x_position] > sma30[x_position]:
            if close[x_position] > np.max(close[x_position - 8:x_position]):
                if cjl[x_position] > np.max(cjl[x_position - 8:x_position]):
                    count = 0
                    add = False
                    while count < 4:
                        if StockFilter2.is_jx(sma5, sma10, x_position - count):

                            add = True
                            break
                        count += 1

                    if add:
                        print(stock)
                        result.append(stock)

    return result
示例#29
0
def kdj_is_in(stock, kline_type, position=0, k_min=0, k_max=30):
    kline = StockIO.get_kline(stock.stock_code, kline_type)
    k, d = StockIndicator.kd(StockIO.get_kline(stock.stock_code, kline_type),
                             9)
    if k.shape[0] > abs(position) + 1:
        if k_max > k[position] > k[position - 1] > k_min:
            return True
    return False
示例#30
0
def bottom_shape(stock, kline_type, **args):
    """
    :param stock:
    :param kline_type:
    :param
    :return:
    """
    k_min = args.get('k_min', 0)
    k_max = args.get('k_max', 0)

    kline = StockIO.get_kline(stock.stock_code, kline_type)
    k, d = StockIndicator.kd(kline)
    sma5 = StockIndicator.sma(kline, 5)[0]
    # 形态确认
    #if(StockFilter.is_jx(k, d, True) or StockFilter.is_jx(k, d, False) or )
    # 强度确认
    return 9, 20,