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)
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
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)
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)
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)
def cix(): weight_range = [0, 10] items = Market.objects().order_by('date') for item in items: cix_one(item, weight_range)