Пример #1
0
def cix_one(item, weight_range):
    value = 0
    cix_data = {}
    try:
        # 1 PE
        index = Index.objects.get(name='沪深300', date=item.date)
        print(index)
        avg_pe = 13.58
        # pe = interp(index.pe, [8.0159, 50], [0, 50])
        pe = interp(index.pe, [avg_pe*0.6, avg_pe*2], [0, 50])
        # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
        value += pe
        cix_data.update({'pe': pe})

        # 2 破净率
        min_low_pb = 0.02
        max_low_pb = 0.15
        broken_net_ratio = item.broken_net_ratio
        pb = interp(-broken_net_ratio, [-max_low_pb, min_low_pb], weight_range)
        value += pb
        cix_data.update({'broken_net': pb})

        # 3 AH premium index
        try:
            avg_ah = 120
            equity = Equity.objects.get(code='HKHSAHP', date=item.date)
            ah = interp(equity.close, [avg_ah*0.7, avg_ah*1.3], weight_range)
            value += ah
            cix_data.update({'ah': ah})
        except:
            print('error')

        # 4 GDP rate
        print(item.gdp)
        if item.gdp:
            gdp = interp(item.gdp, [0.4, 1], weight_range)
            value += gdp
            cix_data.update({'gdp': gdp})

        # 5 百元股 [0,3.6%]
        g100_ratio = item.over_100_ratio
        if g100_ratio:
            high = interp(g100_ratio, [0, 0.036], weight_range)
            value += high
            cix_data.update({'over_100': high})

        # 8 NHNL
        n = interp(item.nhnl, [-1000, 1000], weight_range)
        value += n
        cix_data.update({'nhnl': n})

        print(cix_data)
        Market.objects(date=item.date).update_one(cix=value, cix_data=cix_data, upsert=True)
    except DoesNotExist as e:
        import sys, traceback
        traceback.print_exc(file=sys.stdout)
Пример #2
0
def cix():
    weight_range = [0, 10]
    items = Market.objects().order_by('date')
    for item in items:
        value = 0
        cix_data = {}
        try:
            index = Index.objects.get(name='沪深A股', date=item.date)
            print(index)
            pe = interp(index.pe, [10, 20], [0, 50])
            # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
            value += pe
            cix_data.update({'pe': pe})

            min_low_pb = 0.02
            max_low_pb = 0.15
            broken_net_ratio = item.broken_net_ratio
            pb = interp(-broken_net_ratio, [-max_low_pb, min_low_pb], weight_range)
            value += pb
            cix_data.update({'broken_net': pb})

            # 3 AH premium index
            equity = Equity.objects.get(code='HKHSAHP', date=item.date)
            ah = interp(equity.close, [100, 130], weight_range)
            value += ah
            cix_data.update({'ah': ah})

            # 4 GDP rate
            print(item.gdp)
            if item.gdp:
                gdp = interp(item.gdp, [0.4, 1], weight_range)
                value += gdp
                cix_data.update({'gdp': gdp})

            # 5 百元股 [0,3.6%]
            g100_ratio = item.over_100_ratio
            if g100_ratio:
                high = interp(g100_ratio, [0, 0.036], weight_range)
                value += high
                cix_data.update({'over_100': high})

            # 8 NHNL
            n = interp(item.nhnl, [-1000, 1000], weight_range)
            value += n
            cix_data.update({'nhnl': n})

            print(cix_data)
            Market.objects(date=item.date).update_one(cix=value, cix_data=cix_data, upsert=True)
        except DoesNotExist as e:
            continue
Пример #3
0
 def get(self, request, *args, **kw):
     # Process any get params that you may need
     # If you don't need to process get params,
     # you can skip this part
     data = Market.objects().order_by('date')
     print(data)
     # df = DataFrame(list(data))
     # print df
     # max_ah = df['value'].max()
     # min_ah = df['value'].min()
     # avg_ah = df['value'].mean()
     # print('PE max:{} min:{} average:{} median:{}'.format(max_ah, min_ah, avg_ah))
     serializer = MarketListSerializer({'items': data})
     # content = JSONRenderer().render(serializer.data)
     # print '**********content:{}'.format(content)
     # json_output = json.loads(content)
     # print '****json:{}'.format(json_output)
     result = get_market_result(serializer)
     response = Response(result, status=status.HTTP_200_OK)
     return get_response_cors(response)
Пример #4
0
 def get(self, request, *args, **kw):
     # Process any get params that you may need
     # If you don't need to process get params,
     # you can skip this part
     data = Market.objects().order_by('date')
     print(data)
     # df = DataFrame(list(data))
     # print df
     # max_ah = df['value'].max()
     # min_ah = df['value'].min()
     # avg_ah = df['value'].mean()
     # print('PE max:{} min:{} average:{} median:{}'.format(max_ah, min_ah, avg_ah))
     serializer = MarketListSerializer({'items': data})
     # content = JSONRenderer().render(serializer.data)
     # print '**********content:{}'.format(content)
     # json_output = json.loads(content)
     # print '****json:{}'.format(json_output)
     result = get_market_result(serializer)
     response = Response(result, status=status.HTTP_200_OK)
     return get_response_cors(response)
Пример #5
0
def read_market(nh, nl, date):
    # 破净率
    low_pb = low_pb_ratio()
    print(low_pb)
    broken_net_ratio = low_pb[0]
    broken_net = low_pb[1]
    stock_count = low_pb[3]
    nh_ratio = float(nh)/stock_count
    nl_ratio = float(nl)/stock_count
    nhnl = nh - nl

    # 跌停板
    dt = screen_by_pencentage(-10.11, -9.9)
    dt_ratio = dt/stock_count
    # 涨停板
    zt = screen_by_pencentage(9.9, 10.11)
    zt_ratio = zt/stock_count
    zdr = zt-dt
    print('dtb:{} ztb:{} zdr'.format(dt, zt, zdr))

    # 仙股
    penny_stocks = screen_by_price(0.1, 1)['count']
    penny_stocks_ratio = penny_stocks/stock_count

    #  破发率
    broken_ipo_count, total_ipo, broken_ipo_rate, broken_list = broken_ipo()

    # CIX范围从0到100,由10个指标组成
    cix = 0
    cix_data = {}
    weight_range = [0, 10]

    # 1 SH PE
    # pe_df = avg_sh_pe('2000-1-31')
    # max_pe = pe_df['PE'].max()
    # min_pe = pe_df['PE'].min()
    # # get latest PE DF by tail()
    # # latest_pe_df = pe_df.tail(1)
    # # latest_pe = latest_pe_df.iloc[0][1]
    # # print 'latest PE:{}'.format(latest_pe)
    # latest_sh = Index.objects(name='上海A股').order_by('-date').first()
    # print('items***{}'.format(latest_sh))
    # pe = interp(latest_sh.pe, [min_pe, max_pe], weight_range)
    # # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
    # cix += pe

    # 1 替换为沪深A股PE TODO
    max_pe = 30
    min_pe = 12
    # get latest PE DF by tail()
    # latest_pe_df = pe_df.tail(1)
    # latest_pe = latest_pe_df.iloc[0][1]
    # print 'latest PE:{}'.format(latest_pe)
    latest_sh = Index.objects(name='沪深A股').order_by('-date').first()
    print('items***{}'.format(latest_sh))
    pe = interp(latest_sh.pe, [min_pe, max_pe], [0, 50])
    # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
    cix += pe
    cix_data.update({'pe': pe})

    # 2 破净率
    min_low_pb = 0.02
    max_low_pb = 0.15
    pb = interp(-broken_net_ratio, [-max_low_pb, min_low_pb], weight_range)
    cix += pb
    cix_data.update({'broken_net': pb})

    # 3 AH premium index
    ah_now = xueqiu('HKHSAHP')
    ah_current = ah_now.current
    ah = interp(ah_current, [100, 130], weight_range)
    cix += ah
    cix_data.update({'ah': ah})

    # 4 GDP rate
    rate = gdp_rate()
    gdp = interp(rate, [0.4, 1], weight_range)
    cix += gdp
    cix_data.update({'gdp': gdp})

    # 5 百元股 [0,3.6%]
    high_price = high_price_ratio()
    g100 = high_price[0]
    g100_ratio = high_price[1]
    high = interp(g100_ratio, [0, 0.036], weight_range)
    cix += high
    cix_data.update({'over_100': high})

    # 8 NHNL
    n = interp(nhnl, [-1000, 1000], weight_range)
    cix += n
    cix_data.update({'nhnl': n})

    # 9 融资规模及占比 TODO tushare

    # 10 社交媒体挖掘 TODO xueqiu

    # 5 SH换手率 [1%,3%]
    sh = read_index_market('SH000001')
    turnover_rate = sh['turnover_rate']
    turnover = interp(turnover_rate, [1, 3], weight_range)
    # cix += turnover

    # 6 涨跌停差额

    # 7 TODO 最近一年IPO、可转债涨幅或破发率

    # low price
    low_price = low_price_ratio()
    print('low_price***{}'.format(low_price))
    print(cix_data)
    # TODO cix 映射到0.5-1.5区间,代表持仓比例
    Market.objects(date=get_date(date)).update_one(nh=nh, nl=nl, nhnl=nhnl, nh_ratio=nh_ratio, nl_ratio=nl_ratio,
                                                   stock_count=stock_count,
                                                   over_100=g100, over_100_ratio=g100_ratio,
                                                   penny_stocks=penny_stocks, penny_stocks_ratio=penny_stocks_ratio,
                                                   low_price_ratio=low_price,
                                                   pe=latest_sh.pe, turnover=turnover_rate,
                                                   ah=ah_current, gdp=rate, cix=cix,cix_data=cix_data,
                                                   broken_net=broken_net, broken_net_ratio=broken_net_ratio,
                                                   broken_net_stocks=low_pb[2],
                                                   dt=dt, dt_ratio=dt_ratio, zt=zt, zt_ratio=zt_ratio, zdr=zdr,
                                                   ipo=total_ipo, broken_ipo=broken_ipo_count,
                                                   broken_ipo_ratio=broken_ipo_rate,broken_ipo_list=broken_list,
                                                   upsert=True)
Пример #6
0
def read_market(nh, nl, date):
    # 破净率
    low_pb = low_pb_ratio()
    print(low_pb)
    broken_net_ratio = low_pb[0]
    broken_net = low_pb[1]
    stock_count = low_pb[3]
    nh_ratio = float(nh) / stock_count
    nl_ratio = float(nl) / stock_count

    # 跌停板
    dt = screen_by_pencentage(-10.11, -9.9)
    dt_ratio = dt / stock_count
    # 涨停板
    zt = screen_by_pencentage(9.9, 10.11)
    zt_ratio = zt / stock_count
    zdr = zt / dt
    print('dtb:{} ztb:{} zdr'.format(dt, zt, zdr))

    # 仙股
    penny_stocks = screen_by_price(0.1, 1)['count']
    penny_stocks_ratio = penny_stocks / stock_count

    #  破发率
    broken_ipo_count, total_ipo, broken_ipo_rate, broken_list = broken_ipo()

    cix = 0
    weight_range = [0, 10]

    # 1 latest SH PE
    pe_df = avg_sh_pe('2000-1-31')
    max_pe = pe_df['PE'].max()
    min_pe = pe_df['PE'].min()
    # get latest PE DF by tail()
    # latest_pe_df = pe_df.tail(1)
    # latest_pe = latest_pe_df.iloc[0][1]
    # print 'latest PE:{}'.format(latest_pe)
    latest_sh = Index.objects(name='上海A股').order_by('-date').first()
    print('items***{}'.format(latest_sh))
    pe = interp(latest_sh.pe, [min_pe, max_pe], weight_range)
    # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
    cix += pe

    # 2 破净率
    min_low_pb = 0
    max_low_pb = 0.1
    pb = interp(-broken_net_ratio, [-max_low_pb, min_low_pb], weight_range)
    cix += pb

    # 3 AH premium index
    ah_now = xueqiu('HKHSAHP')
    ah_current = ah_now.current
    ah = interp(ah_current, [100, 150], weight_range)
    cix += ah

    # 4 GDP rate
    rate = gdp_rate()
    gdp = interp(rate, [0.4, 1], weight_range)
    cix += gdp

    # 5 百元股 [0,3.6%]
    high_price = high_price_ratio()
    g100 = high_price[0]
    g100_ratio = high_price[1]
    high = interp(g100_ratio, [0, 0.036], weight_range)
    cix += high

    # 5 low price
    low_price = low_price_ratio()
    print('low_price***{}'.format(low_price))

    # 6 SH换手率 [1%,3%]
    sh = read_index_market('SH000001')
    turnover_rate = sh['turnover_rate']
    turnover = interp(turnover_rate, [1, 3], weight_range)
    cix += turnover

    Market.objects(date=get_date(date)).update_one(
        nh=nh,
        nl=nl,
        nhnl=nh - nl,
        nh_ratio=nh_ratio,
        nl_ratio=nl_ratio,
        stock_count=stock_count,
        over_100=g100,
        over_100_ratio=g100_ratio,
        penny_stocks=penny_stocks,
        penny_stocks_ratio=penny_stocks_ratio,
        low_price_ratio=low_price,
        pe=latest_sh.pe,
        turnover=turnover_rate,
        ah=ah_current,
        gdp=rate,
        cix=cix,
        broken_net=broken_net,
        broken_net_ratio=broken_net_ratio,
        broken_net_stocks=low_pb[2],
        dt=dt,
        dt_ratio=dt_ratio,
        zt=zt,
        zt_ratio=zt_ratio,
        zdr=zdr,
        ipo=total_ipo,
        broken_ipo=broken_ipo_count,
        broken_ipo_ratio=broken_ipo_rate,
        broken_ipo_list=broken_list,
        upsert=True)
Пример #7
0
def cix():
    weight_range = [0, 10]
    items = Market.objects().order_by('date')
    for item in items:
        cix_one(item, weight_range)
Пример #8
0
def read_market(nh, nl, date):
    # 破净率
    low_pb = low_pb_ratio()
    print(low_pb)
    broken_net_ratio = low_pb[0]
    broken_net = low_pb[1]
    stock_count = low_pb[3]
    nh_ratio = float(nh)/stock_count
    nl_ratio = float(nl)/stock_count
    nhnl = nh - nl

    # 跌停板
    dt = screen_by_pencentage(-10.11, -9.9)
    dt_ratio = dt/stock_count
    # 涨停板
    zt = screen_by_pencentage(9.9, 10.11)
    zt_ratio = zt/stock_count
    zdr = zt-dt
    print('dtb:{} ztb:{} zdr'.format(dt, zt, zdr))

    # 仙股
    penny_stocks = screen_by_price(0.1, 1)['count']
    penny_stocks_ratio = penny_stocks/stock_count

    #  破发率
    broken_ipo_count, total_ipo, broken_ipo_rate, broken_list = broken_ipo()

    # CIX范围从0到100,由10个指标组成
    cix = 0
    cix_data = {}
    weight_range = [0, 10]

    # 1 SH PE
    # pe_df = avg_sh_pe('2000-1-31')
    # max_pe = pe_df['PE'].max()
    # min_pe = pe_df['PE'].min()
    # # get latest PE DF by tail()
    # # latest_pe_df = pe_df.tail(1)
    # # latest_pe = latest_pe_df.iloc[0][1]
    # # print 'latest PE:{}'.format(latest_pe)
    # latest_sh = Index.objects(name='上海A股').order_by('-date').first()
    # print('items***{}'.format(latest_sh))
    # pe = interp(latest_sh.pe, [min_pe, max_pe], weight_range)
    # # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
    # cix += pe

    # 1 替换为沪深A股PE TODO
    max_pe = 30
    min_pe = 12
    # get latest PE DF by tail()
    # latest_pe_df = pe_df.tail(1)
    # latest_pe = latest_pe_df.iloc[0][1]
    # print 'latest PE:{}'.format(latest_pe)
    latest_sh = Index.objects(name='沪深A股').order_by('-date').first()
    print('items***{}'.format(latest_sh))
    pe = interp(latest_sh.pe, [min_pe, max_pe], [0, 50])
    # print('min_pe:{} max_pe:{} latest_pe:{} pe:{}'.format(min_pe, max_pe, latest_pe, pe))
    cix += pe
    cix_data.update({'pe': pe})

    # 2 破净率
    min_low_pb = 0.02
    max_low_pb = 0.15
    pb = interp(-broken_net_ratio, [-max_low_pb, min_low_pb], weight_range)
    cix += pb
    cix_data.update({'broken_net': pb})

    # 3 AH premium index
    ah_now = xueqiu('HKHSAHP')
    ah_current = ah_now.current
    ah = interp(ah_current, [100, 130], weight_range)
    cix += ah
    cix_data.update({'ah': ah})

    # 4 GDP rate
    rate = gdp_rate()
    gdp = interp(rate, [0.4, 1], weight_range)
    cix += gdp
    cix_data.update({'gdp': gdp})

    # 5 百元股 [0,3.6%]
    high_price = high_price_ratio()
    g100 = high_price[0]
    g100_ratio = high_price[1]
    high = interp(g100_ratio, [0, 0.036], weight_range)
    cix += high
    cix_data.update({'over_100': high})

    # 8 NHNL
    n = interp(nhnl, [-1000, 1000], weight_range)
    cix += n
    cix_data.update({'nhnl': n})

    # 9 融资规模及占比 TODO tushare

    # 10 社交媒体挖掘 TODO xueqiu

    # 5 SH换手率 [1%,3%]
    sh = read_index_market('SH000001')
    turnover_rate = sh['turnover_rate']
    turnover = interp(turnover_rate, [1, 3], weight_range)
    # cix += turnover

    # 6 涨跌停差额

    # 7 TODO 最近一年IPO、可转债涨幅或破发率

    # low price
    low_price = low_price_ratio()
    print('low_price***{}'.format(low_price))
    print(cix_data)
    # TODO cix 映射到0.5-1.5区间,代表持仓比例
    Market.objects(date=get_date(date)).update_one(nh=nh, nl=nl, nhnl=nhnl, nh_ratio=nh_ratio, nl_ratio=nl_ratio,
                                                   stock_count=stock_count,
                                                   over_100=g100, over_100_ratio=g100_ratio,
                                                   penny_stocks=penny_stocks, penny_stocks_ratio=penny_stocks_ratio,
                                                   low_price_ratio=low_price,
                                                   pe=latest_sh.pe, turnover=turnover_rate,
                                                   ah=ah_current, gdp=rate, cix=cix,cix_data=cix_data,
                                                   broken_net=broken_net, broken_net_ratio=broken_net_ratio,
                                                   broken_net_stocks=low_pb[2],
                                                   dt=dt, dt_ratio=dt_ratio, zt=zt, zt_ratio=zt_ratio, zdr=zdr,
                                                   ipo=total_ipo, broken_ipo=broken_ipo_count,
                                                   broken_ipo_ratio=broken_ipo_rate,broken_ipo_list=broken_list,
                                                   upsert=True)