Example #1
0
def top10_holders():
    n = 0
    stock_count = len(stock_list(coll_stock_cache))
    for code in stock_list(coll_stock_cache):
        try:
            print('开始读取code:', code)
            df, data = ts.top10_holders(code=code, gdtype='1')
            data['code'] = code
            coll.insert(json.loads(data.to_json(orient='records')))
            print('保存code:', code)
            coll_stock_cache.delete_one({'code': code})
            print('从缓存中删除code:', code)
            n += 1
            sleep_time = n / 100
            print('当前进度{}:{}/{}'.format(code, n, stock_count))
            print('▂▃▄▅▆▇█▉▉█▇▆▅▄▃▂暂停区')
            if sleep_time.is_integer():
                print('休息三分钟')
                time.sleep(180)
        except:
            try:
                # coll.deleteMany({'code': code})
                update_new_cache(coll_stock_cache, coll_new_cache, code)
            except:
                coll_stock_cache.delete_one({'code': code})
            finally:
                print('重新开始top10_holders')
                restar(top10_holders())
    print('开始转换时间')
    holders_time_convert(coll)
    print('任务完成')
Example #2
0
def update_top10_holders():
    n = 0
    stock_count = len(stock_list(coll_stock_cache))
    for code in stock_list(coll_stock_cache):
        try:
            print('开始读取code:', code)
            # 新股等,列表不存在,返回233
            if date_holders(code) == 233:
                query = {
                    'code': code,
                }
                field = {
                    'code': 1,
                    '_id': 1,  # mogodb中连_id字段在内都相同的完全一样的字段不能插入
                }
                coll_new_cache.insert(coll_stock_cache.find(query, field))
                print('可能为新股,不存在该代码,读取下一个')
            # 不用更新的情况,返回[]
            elif not date_holders(code):
                print('未到更新时间,请等待')
            # 报错为数据还未出来的股票
            else:
                for i in date_holders(code):
                    for k, v in i.items():
                        year = k
                        quarter = int(v)
                        df, data = ts.top10_holders(code=code,
                                                    year=year,
                                                    quarter=quarter,
                                                    gdtype='1')
                        data['code'] = code
                        coll.insert(json.loads(data.to_json(orient='records')))
                        print('保存{}:{}年第{}季度:'.format(code, year, quarter))
            coll_stock_cache.delete_one({'code': code})
            print('从缓存中删除code:', code)
            n += 1
            sleep_time = n / 100
            print('当前进度{}:{}/{}'.format(code, n, stock_count))
            print('▂▃▄▅▆▇█▉▉█▇▆▅▄▃▂暂停区')
            if sleep_time.is_integer():
                print('休息三分钟')
                time.sleep(180)
        except:
            try:
                update_new_cache(coll_stock_cache, coll_new_cache, code)
            except:
                # 出现new_cache中有重复code
                coll_stock_cache.delete_one({'code': code})
            finally:
                print('重新开始update_top10_holders')
                restar(update_top10_holders())
    print('开始转换时间')
    holders_time_convert(coll)
    print('任务完成')
Example #3
0
File: invest.py Project: cnslyq/ts
def top10_holders_worker(engine, codes, year, quarter):
    pid = os.getpid()
    tsl.log("pid %i start with %i codes..." % (pid, len(codes)))
    df = pd.DataFrame()
    temp = []
    for code in codes:
        try:
            newdf = ts.top10_holders(code, year, quarter)[1]
            if newdf is not None:
                newdf['code'] = code
                df = df.append(newdf, ignore_index=True)
        except BaseException, e:
            if 'timed out' in str(e) or 'urlopen error' in str(e):
                temp.append(code)
            else:
                print e
                tsl.log("pid %i error for %s" % (pid, code))
Example #4
0
def refreshTop10Holders():
    logger.info("refreshTop10Holders...")
    mongoService.drop_collection('top10Holders')
    mongoService.drop_collection('stockHoldersChanges')
    res = mongoService.find('stocksBasics', {})
    count = 1
    for row in res:
        try:
            logger.info('count %d' % count)
            logger.info('code is %s' % row['code'])
            df = ts.top10_holders(row['code'], 2018, 3)
            df[0]['code'] = row['code']
            df[1]['code'] = row['code']
            logger.info('Top10 Holders of %s' % (row['code']))
            insertAndPrintResult('stockHoldersChanges', df[0])
            insertAndPrintResult('top10Holders', df[1])
            count += 1
        except Exception:
            logger.error(traceback.format_exc())
Example #5
0
 def Get_Top10_holders(self):
     df = ts.top10_holders('600848')
     # print df
     # print type(df)
     obj_series_tuple = pd.Series(df, index=list('abcdefgsll'))
     print obj_series_tuple
Example #6
0
def generate_stock_line(stock_id, Type, start_date, end_date, interval):
    start_data = start_date.replace("/", "-").replace(
        "\n", "")  #convert to tushare readable date
    end_data = end_date.replace("/", "-").replace("\n", "")
    current_time = time.strftime("%Y/%m/%d")
    if Type == "分笔":
        if start_date != current_time:
            array = ts.get_tick_data(stock_id, date=start_data)  #分笔
            if array is None:
                return
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            price = array["price"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):  #if卖盘,交易变成负数
                if val == "卖盘":
                    amount[idx] = -amount[idx]
                if val == "中性盘":  #if中性盘,则忽略. Might have a problem with this part??
                    amount[idx] = 0
            returnarray = zip(date, amount, flag, price)
            return returnarray
        else:
            array = ts.get_today_ticks(stock_id)  #Tushare里今日分笔和历史分笔需要分别对待
            if array is None:
                return
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):
                if val == "卖盘":
                    amount[idx] = -amount[idx]
                if val == "中性盘":
                    amount[idx] = 0
            returnarray = zip(date, amount, flag)
            return returnarray

    if Type == "季度饼图":
        datestr = start_date.split("/")
        thisyear = datestr[0]
        df2 = ts.top10_holders(code=stock_id, gdtype="1")
        test = df2[1]["quarter"].tolist()
        df_ready = df2[1]
        idxlist = []
        for idx, val in enumerate(test):
            a = val.split("-")
            if a[0] == thisyear:
                # print a[0],idx
                idxlist.append(idx)
        thing = df_ready.loc[idxlist]
        thing = thing.sort_values(["quarter", "name"])
        # print a[0],id
        name = thing["name"].tolist()
        value = thing["hold"].tolist()
        quarter = thing["quarter"].tolist()
        namearray = [name[i:i + 10] for i in xrange(0, len(name), 10)]
        valuearray = [value[j:j + 10] for j in xrange(0, len(value), 10)]
        quarterarray = [quarter[k:k + 10] for k in xrange(0, len(quarter), 10)]

        flag = ["pie" for i in namearray]
        num = [len(value) for k in namearray]
        returnarray = zip(namearray, valuearray, quarterarray, flag, num)
        return returnarray

    if interval != "qfq" and interval != "hfq":
        if interval == "1min" or interval == "5min" or interval == "15min" or interval == "30min" or interval == "60min":
            df = ts.get_tick_data(stock_id, date=start_data)
            df.sort_values("time")
            a = start_data + " " + df["time"]
            df["time"] = a
            df["time"] = pd.to_datetime(a)
            df = df.set_index("time")
            price_df = df["price"].resample(interval).ohlc()
            price_df = price_df.dropna()
            vols = df["volume"].resample(interval).sum(
            )  #relevant data processing algorithm taken from Jimmy, Creator of Tushare
            vols = vols.dropna()
            vol_df = pd.DataFrame(vols, columns=["volume"])
            amounts = df["amount"].resample(interval).sum()
            amounts = amounts.dropna()
            amount_df = pd.DataFrame(amounts, columns=["amount"])
            newdf = price_df.merge(vol_df, left_index=True,
                                   right_index=True).merge(amount_df,
                                                           left_index=True,
                                                           right_index=True)
            if Type != "Kline":
                Type1 = firstletter(Type)
                target = newdf[Type1].tolist()
                date = newdf.index.format()
                returnarray = zip(date, target)
                return returnarray
            else:
                Date = newdf.index.format()
                Open = newdf["open"].tolist()
                Close = newdf["close"].tolist()
                High = newdf["high"].tolist()
                Low = newdf["low"].tolist()
                Candlestick = zip(*[Date, Open, Close, Low, High])
                return Candlestick

        #正常历史k线
        if Type != "Kline":
            array = ts.get_k_data(stock_id,
                                  start=start_data,
                                  end=end_data,
                                  ktype=interval)
            if array is None:
                return
            Type1 = firstletter(Type)
            target = array[Type1].tolist()
            date = array["date"].tolist()
            returnarray = zip(date, target)
            return returnarray
        else:
            array = ts.get_k_data(stock_id,
                                  start=start_data,
                                  end=end_data,
                                  ktype=interval)
            if array is None:
                return
            Date = array["date"].tolist()
            Open = array["open"].tolist()
            Close = array["close"].tolist()
            High = array["high"].tolist()
            Low = array["low"].tolist()
            Candlestick = zip(*[Date, Open, Close, Low, High])
            return Candlestick
    else:
        if Type != "Kline":  # 复权
            array = ts.get_h_data(stock_id,
                                  start=start_data,
                                  end=end_data,
                                  autype=interval)
            if array is None:
                return
            Type1 = firstletter(Type)
            array = array.sort_index()
            target = array[Type1].tolist()
            date = array.index.format()
            returnarray = zip(date, target)
            return returnarray
        else:
            array = ts.get_h_data(stock_id,
                                  start=start_data,
                                  end=end_data,
                                  autype=15)
            if array is None:
                return
            array = array.sort_index()
            Date = array.index.format()
            Open = array["open"].tolist()
            Close = array["close"].tolist()
            High = array["high"].tolist()
            Low = array["low"].tolist()
            # list_array = [Date, Open, Close, Low, High]
            Candlestick = zip(*[Date, Open, Close, Low, High])
            return Candlestick
Example #7
0
def Top10Holder(codenumber, startdate='2014-10-10'):
    """
    Top10 holde 是将top10 股东用Pie 图进行可视化,其中包含一年股东变化的河流图.
    

    Parameters
    ----------
    codenumber: stock 代码
    startdate='2014-10-10': 起始时间 

    Returns
    -------
    输出为 当前文件夹下 html :top10.html

    """

    if len(codenumber) != 6:  #检查 code 长度 不符合6位全部错误
        return False
    elif len(codenumber) == 6:
        datestr = startdate.split("-")
        thisyear = datestr[0]

        df2 = ts.top10_holders(code=codenumber, gdtype="1")  # 下载数据

        test = df2[1]["quarter"].tolist()  #获取季度列表

        df_ready = df2[1]
        idxlist = []
        for idx, val in enumerate(test):
            a = val.split("-")
            if a[0] == thisyear:
                # print a[0],idx
                idxlist.append(idx)
            elif a[0] > thisyear:
                idxlist.append(idx)
        thing = df_ready.loc[idxlist]
        thing = pd.DataFrame(thing)

        thing = thing.sort_values(["quarter", "name"])  #排序所有流通股股东

        quarterlist = thing.quarter.value_counts()
        quarterlist = quarterlist.index.sort_values()
        timeline = Timeline(
            height=600,
            width=800,
            timeline_left=20,
            timeline_right=100,
            is_auto_play=False,
            timeline_bottom=0,
            timeline_symbol='diamond',
        )
        year_index = thing.quarter.apply(
            lambda x: x[0:4])  # year list ('20xx')
        yearlist = year_index.value_counts()
        yearlist = yearlist.index.sort_values()

        #print(quarterlist,year)
        for quarters in list(quarterlist):  # 将每个季度画成PIE 加入TIMELINE
            df = thing[thing["quarter"] == quarters]
            df.h_pro = df.h_pro.apply(lambda x: float(x))
            df.hold = df.hold.apply(lambda x: float(x))
            sum_pro = round(df.h_pro.sum(), 2)
            sum_hold = round(np.mean(df.hold / df.h_pro) * sum_pro, 0)

            s = pd.Series({
                'name': '其他',
                'h_pro': 100 - sum_pro,
                'hold': sum_hold
            })
            df = df.append(s, ignore_index=True)
            #df=df.sort_values(["name"])

            pie = Pie('%s' % quarters + "-" + "top10holder",
                      title_pos='outside')
            TopPie = pie.add(
                '',
                df.name,
                df.hold,
                radius=[20, 45],
                center=[45, 50],
                is_legend_show=True,
                is_label_show=True,
                # is_visualmap=True,
                is_more_utils=True,
                is_toolbox_show=True,
                legend_pos='left',
                legend_orient='vertical',
                legend_top=25,
                legend_text_size=12,
                label_text_size=10,
                label_text_color="#100",
                tooltip_text_color="#F0F",
                #is_label_emphasis=False,#是否显示高亮
                label_formatter="{b}:\n {c}万股\n{d}%")

            #gird= Grid()
            #gird.add(pie,grid_bottom="20%")
            #gird.add(tab,grid_bottom="60%")
            #pietimeline.add(pie, quarters,)
            timeline.add(
                pie,
                quarters,
            )
            #page = pyecharts.Page()
            #page.add(pie)
            #page.add(_treemap)
            #timeline.add(pie,quarters,)
            #timeline.add(_treemap,quarters,)

            #pietimeline.top('40%')
        trmtimeline = Timeline(
            height=1200,
            width=800,
            timeline_left=20,
            timeline_right=100,
            is_auto_play=False,
            timeline_bottom=0,
            timeline_symbol='diamond',
        )
        #for y in list(yearlist):

        datas_index = []
        for i, _year in enumerate(year_index):  #获取datas_index
            if _year in list(yearlist)[-1:]:
                datas_index.append(i)
            else:
                pass

        print(thing.loc[datas_index, :])
        collect_datas = thing.iloc[datas_index, :3]
        collect_datas.hold = collect_datas.hold.apply(lambda x: float(x))
        print(collect_datas)
        name = collect_datas['name']
        collect_datas.drop(labels=['name'], axis=1, inplace=True)
        collect_datas.insert(2, 'name', name)
        print(collect_datas.get_values())
        tr = pyecharts.ThemeRiver(
            "TOP 10 hold 河流图 ",
            height=800,
            width=800,
        )
        tr.add(name.get_values(),
               collect_datas.get_values(),
               is_label_show=False)
        #trmtimeline.add(tr,"%s"%y,)
        page = pyecharts.Page()

        # page.add(trmtimeline)
        page.add(timeline)
        page.add(tr)
        '''
        them_dates=[]
        for i in thing.index:
            print (i)
            collect_datas=thing[thing.index==i].iloc[:, 0:3]
            name=collect_datas['name']
            collect_datas.drop(labels=['name'], axis=1,inplace = True)
            collect_datas.insert(2, 'name', name)
            print (collect_datas.get_values())
        '''

        print('time line done')

        return page
Example #8
0
def graphpage(labels,mode_combo,startdate,enddate,optInterval,width1, height1):
    #optInterval='D/W/M' labels

    startdate = startdate.replace("/","-")#convert to tushare readable date
    enddate = enddate.replace("/","-")

    page = Page()

    for label in labels:  # generate numbers of graphs according to numbers of queries in treewidget
        label1 = re.split("-", label)
        overlap = Overlap()

        if label1[2]!="分笔" and label1[2]!="季度饼图": #"K线" "复权" "历史分钟"
            if mode_combo == "复权":
            #if optInterval == "qfq" or optInterval == "hfq":#复权
                array = ts.get_h_data(label1[1], start=startdate, end=enddate, autype="qfq")
                array = array.sort_index()
                time = array.index.format()  # 日期正是index
            elif mode_combo == "K线":
            #elif optInterval.isalnum() :#历史K线
                array = ts.get_k_data(label1[1], start=startdate, end=enddate, ktype=optInterval)
                time = array['date'].tolist()  # array.date
            elif mode_combo == "历史分钟":
                array_bfr = ts.get_tick_data(label1[1], date=startdate)
                array_bfr.sort_values("time")
                a = startdate + " " + array_bfr["time"]
                array_bfr["time"] = a
                array_bfr["time"] = pd.to_datetime(a)
                array_bfr = array_bfr.set_index("time")
                if label1[2] != "Volume" and label1[2] != "Amount":
                    price_df = array_bfr["price"].resample(optInterval).ohlc()  # resample重新取样,选出ohlc=open/high/low,提取除价格之外另外4列.close,tushare是ohcl
                    price_df = price_df.dropna()
                    array = price_df
                    time = price_df.index.format()

                elif label1[2] == "Volume":
                    vols = array_bfr["volume"].resample(optInterval).sum()  #resample重新取样,累加间隔内数值 relevant data processing algorithm taken from Jimmy, Creator of Tushare
                    vols = vols.dropna()
                    vol_df = pd.DataFrame(vols, columns=["volume"])
                    array = vol_df
                    time = vol_df.index.format()
                else:
                    amounts = array_bfr["amount"].resample(optInterval).sum()
                    amounts = amounts.dropna()
                    amount_df = pd.DataFrame(amounts, columns=["amount"])
                    array = amount_df
                    time = amount_df.index.format()

            #绘图方法

            if label1[2] == 'Kline':
                re_array = array[['open', 'close', 'high', 'low']]
                data_li = list(row.tolist() for index, row in re_array.iterrows())  # data_list = list(re_array.as_matrix())
                close = array['close'].tolist()
                kline = Kline(label1[0] + "-" + optInterval, width=width1*10/11, height = (height1*10/11) / len(labels))
                kline.add(label1[0], time, data_li, is_datazoom_show=True, datazoom_type="slider", yaxis_interval=1)
                overlap.add(kline)

                if len(close) > 10:
                    ma10 = calculateMa(close, 10)
                    line1 = Line(title_color="#C0C0C0")
                    line1.add(label1[0] + "-" + "MA10", time, ma10)
                    overlap.add(line1)
                if len(close) > 20:
                    ma20 = calculateMa(close, 20)
                    line2 = Line(title_color="#C0C0C0")
                    line2.add(label1[0] + "-" + "MA20", time, ma20)
                    overlap.add(line2)
                if len(close) > 30:
                    ma30 = calculateMa(close, 30)
                    line3 = Line(title_color="#C0C0C0")
                    line3.add(label1[0] + "-" + "MA30", time, ma30)
                    overlap.add(line3)

                page.add(overlap)
            else:#When label1[2]==open/close/volume
                if label1[2] == 'Open':
                    list_aft = array['open'].tolist()
                elif label1[2] == 'Close':
                    list_aft = close
                elif label1[2] == 'High':
                    list_aft = array['high'].tolist()
                elif label1[2] == 'Low':
                    list_aft = array['low'].tolist()
                elif label1[2] == 'Volume':#volume
                    list_aft = array['volume'].tolist()
                else:#amount
                    list_aft = array['amount'].tolist()

                line = Line(label1[0] + "-" + label1[2], width=width1 * 10 / 11, height=(height1 * 10 / 11) / len(labels))
                line.add(label1[0] + "-" + label1[2], time, list_aft, is_datazoom_show=True, yaxis_max="dataMax",
                         yaxis_min="dataMin", datazoom_type="slider")
                overlap.add(line)
                page.add(overlap)


        elif label1[2]=="分笔":
            array = ts.get_tick_data(label1[1], date=startdate)
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            price = array["price"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):
                if val == "卖盘":
                    amount[idx] = -amount[idx]
                if val == "中性盘":
                    amount[idx] = 0

            returnarray = list(zip(date, amount, flag, price))

            form = [e[1] for e in returnarray]
            time = [d[0] for d in returnarray]

            bar = Bar(label1[0] + "-" + label1[2], width=width1 * 10 / 11, height=(height1 * 10 / 11) / len(labels))
            bar.add(label1[0] + "-" + label1[2], time, form, is_datazoom_show=True, datazoom_type="slider", yaxis_min="dataMin", yaxis_max="dataMax")
            overlap.add(bar)

            line = Line(label1[0] + "price", width=width1 * 10 / 11, height=(height1 * 10 / 11) / len(labels))
            price = [e[3] for e in returnarray]
            line.add(label1[0] + "price", time, price, yaxis_min="dataMin", yaxis_max="dataMax", is_datazoom_show=True,
                     datazoom_type="slider",
                     yaxis_type="value")
            overlap.add(line, yaxis_index=1, is_add_yaxis=True)
            page.add(overlap)
        elif label1[2]=="季度饼图":
            datestr = startdate.split("-")
            thisyear = datestr[0]
            df2 = ts.top10_holders(code=label1[1], gdtype="1")
            test = df2[1]["quarter"].tolist()
            df_ready = df2[1]
            idxlist = []
            for idx, val in enumerate(test):
                a = val.split("-")
                if a[0] == thisyear:
                    # print a[0],idx
                    idxlist.append(idx)
            thing = df_ready.loc[idxlist]
            thing = thing.sort_values(["quarter", "name"])
            # print a[0],id
            name = thing["name"].tolist()
            value = thing["hold"].tolist()
            quarter = thing["quarter"].tolist()
            namearray = [name[i:i + 10] for i in range(0, len(name), 10)]
            valuearray = [value[j:j + 10] for j in range(0, len(value), 10)]
            quarterarray = [quarter[k:k + 10] for k in range(0, len(quarter), 10)]

            flag = ["pie" for i in namearray]
            num = [len(value) for k in namearray]
            returnarray = list(zip(namearray, valuearray, quarterarray, flag, num))

            timeline = Timeline(is_auto_play=False, timeline_bottom=0)  # zip(namearray,valuearray,quarter,flag,num)
            namearray = [c[0] for c in returnarray]
            valuearray = [d[1] for d in returnarray]
            quarter = [e[2] for e in returnarray]
            num = returnarray[0][4]

            for x in range(0, int(num / 10)):
                list1 = valuearray[x]
                names = namearray[x]
                quarters = quarter[x][0]

                for idx, val in enumerate(list1):
                    list1[idx] = float(val)

                pie = Pie(label1[0] + "-" + "前十股东", width=width1 * 10 / 11, height=(height1 * 10 / 11))

                pie.add(label1[0] + "-" + "前十股东", names, list1, radius=[30, 55], is_legend_show=False,
                        is_label_show=True, label_formatter="{b}: {c}\n{d}%")
                timeline.add(pie, quarters)
                # namearray = [y for y in namearray[x]]
            timeline.render()

    page.render()
Example #9
0
def FindLowStock():
    
    shangHaiStockIds = utility.GetShangHaiStockIdStrArray()
    np.random.shuffle(shangHaiStockIds)
    
    mongoClient = MongoClient('127.0.0.1:27017')
    ShangHaiStockDB = mongoClient["ShangHaiStock"]
    dailyDataCollection = ShangHaiStockDB["DailyData"]
    
#     pdTopList = ts.top_list('2016-06-12')
#     print(pdTopList[ pdTopList["code"] == shangHaiStockIds[100] ].cout)
    for id in shangHaiStockIds:
        dupDate = []
        dateArrOrg = []
        valueCloseArrOrg = []
        valueLowArrOrg = []
        valueOpenArrOrg = []
        valueHighArrOrg = []
        valueExceptionDate = []
        valueMeanLowArrOrg= []
        volumeArrOrg = []
        preClosePrice = None
        preOpenPrice = None
        cursor = dailyDataCollection.find({"StockId":id, "Date_":{"$gte":checkStartDate, "$lte":checkEndDate}}).sort([("Date_", pymongo.ASCENDING)])
        for curItem in cursor:
            try:
                date = curItem["Date_"]
                if date in dupDate:
                    continue
                dupDate.append(date)
                
                adjClose = float(curItem["Adj Close"])
                openPrice = float(curItem["Open"])
                low = float(curItem["Low"])
                high = float(curItem["High"])
                volumenVal = float(curItem["Volume"])
                

            except:
                continue
            
            dateArrOrg.append(date)
            valueCloseArrOrg.append(adjClose)
            valueOpenArrOrg.append(openPrice)
            valueHighArrOrg.append(high)
            volumeArrOrg.append(volumenVal)
            valueLowArrOrg.append(low)
            
        if len(valueCloseArrOrg) < 200:
            continue
        
        dateArrOrg = np.array(dateArrOrg)
        valueCloseArrOrg = np.array(valueCloseArrOrg)
        volumeArrOrg = np.array(volumeArrOrg)
        
        checkIndexes = np.where(dateArrOrg < checkRealEndDate)[0]
        
        meanVal = np.mean(valueCloseArrOrg[checkIndexes])
        stdVal = np.std(valueCloseArrOrg[checkIndexes])
        
        meanVolumeVal = np.mean(volumeArrOrg[checkIndexes])
        stdVolumeVal = np.std(valueCloseArrOrg[checkIndexes])
        recentVolumeMean = np.mean(volumeArrOrg[checkIndexes][-20:])
        
        recentMeanVal1 = np.mean(valueCloseArrOrg[checkIndexes][-20:])
        recentMeanVal2 = np.mean(valueCloseArrOrg[checkIndexes][-40:-20])
        
        print(meanVal - 0.5*stdVal)
        if valueCloseArrOrg[checkIndexes][-1] < meanVal - stdVal and recentMeanVal1 < recentMeanVal2 and recentVolumeMean > meanVolumeVal + 1*stdVolumeVal:
            _, data2 = ts.top10_holders(code=id, year=2017, quarter=1, gdtype='1')
#             topBrokers = ts.broker_tops()
#             print(topBrokers)
            searchArr = ["中央汇金", "香港", "社保", "全国", "养老保险"] #  ,"BERKSHIRE"
            strHolders = str(data2)
            print(strHolders)
            bHave = False
            for item in searchArr:
                if strHolders.find(item)>0:
                    print(strHolders)
                    bHave = True
                    break
                
            if not bHave:
                print("no no no no no")
            
            print(id)
            fig, ax = plt.subplots()
            ax.plot(dateArrOrg, valueCloseArrOrg)
            ax.vlines([checkRealEndDate], np.min(valueCloseArrOrg), np.max(valueCloseArrOrg), color="red")
            plt.show()
Example #10
0
def generateline(stocknumber, Type, startdate, enddate, interval):
    startdata = startdate.encode("ascii").replace("/", "-").replace(
        "\n", "")  #convert to tushare readable date
    enddata = enddate.encode("ascii").replace("/", "-").replace("\n", "")
    #print startdata
    #print enddata

    current_time = time.strftime("%Y/%m/%d")
    if Type == "分笔".decode("utf-8"):
        if startdate != current_time:
            array = ts.get_tick_data(stocknumber, date=startdata)  #分笔
            if array is None:
                return
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            price = array["price"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):  #if卖盘,交易变成负数
                if val == "卖盘":
                    amount[idx] = -amount[idx]
                if val == "中性盘":  #if中性盘,则忽略. Might have a problem with this part??
                    amount[idx] = 0
            returnarray = zip(date, amount, flag, price)
            return returnarray
        else:
            array = ts.get_today_ticks(stocknumber)  #Tushare里今日分笔和历史分笔需要分别对待
            if array is None:
                return
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):
                if val == "卖盘".decode("utf-8"):
                    amount[idx] = -amount[idx]
                if val == "中性盘".decode("utf-8"):
                    amount[idx] = 0
            returnarray = zip(date, amount, flag)
            return returnarray

    if Type == "季度饼图".decode("utf-8"):
        datestr = startdate.split("/")
        thisyear = datestr[0]
        df2 = ts.top10_holders(code=stocknumber, gdtype="1")
        test = df2[1]["quarter"].tolist()
        df_ready = df2[1]
        idxlist = []
        for idx, val in enumerate(test):
            a = val.split("-")
            if a[0] == thisyear:
                # print a[0],idx
                idxlist.append(idx)
        thing = df_ready.loc[idxlist]
        thing = thing.sort_values(["quarter", "name"])
        # print a[0],id
        name = thing["name"].tolist()
        value = thing["hold"].tolist()
        quarter = thing["quarter"].tolist()
        namearray = [name[i:i + 10] for i in xrange(0, len(name), 10)]
        valuearray = [value[j:j + 10] for j in xrange(0, len(value), 10)]
        quarterarray = [quarter[k:k + 10] for k in xrange(0, len(quarter), 10)]

        flag = ["pie" for i in namearray]
        num = [len(value) for k in namearray]
        returnarray = zip(namearray, valuearray, quarterarray, flag, num)
        return returnarray

    if interval != "qfq" and interval != "hfq":
        if interval == "1min" or interval == "5min" or interval == "15min" or interval == "30min" or interval == "60min":
            df = ts.get_tick_data(stocknumber, date=startdata)
            df.sort_values("time")
            a = startdata + " " + df["time"]
            df["time"] = a
            df["time"] = pd.to_datetime(a)
            df = df.set_index("time")
            price_df = df["price"].resample(interval).ohlc()
            price_df = price_df.dropna()
            vols = df["volume"].resample(interval).sum(
            )  #relevant data processing algorithm taken from Jimmy, Creator of Tushare
            vols = vols.dropna()
            vol_df = pd.DataFrame(vols, columns=["volume"])
            amounts = df["amount"].resample(interval).sum()
            amounts = amounts.dropna()
            amount_df = pd.DataFrame(amounts, columns=["amount"])
            newdf = price_df.merge(vol_df, left_index=True,
                                   right_index=True).merge(amount_df,
                                                           left_index=True,
                                                           right_index=True)
            if Type != "Kline":
                Type1 = firstletter(Type).encode("ascii")
                target = newdf[Type1].tolist()
                date = newdf.index.format()
                returnarray = zip(date, target)
                return returnarray
            else:
                Date = newdf.index.format()
                Open = newdf["open"].tolist()
                Close = newdf["close"].tolist()
                High = newdf["high"].tolist()
                Low = newdf["low"].tolist()
                Candlestick = zip(*[Date, Open, Close, Low, High])
                return Candlestick

        #正常历史k线
        if Type == "差价图".decode("utf-8"):
            global array300
            if array300 is None:
                array300 = ts.get_k_data("sh",
                                         start=startdata,
                                         end=enddata,
                                         ktype=interval)
            array = ts.get_k_data(stocknumber,
                                  start=startdata,
                                  end=enddata,
                                  ktype=interval,
                                  autype='qfq')
            if array is None or array300 is None:
                return None

            target = []
            benchmark_list = []
            try:
                close_list = array["close"].tolist()
                date = array["date"].tolist()

                date300 = array300["date"].tolist()
                close300 = array300["close"].tolist()
                if len(close_list) is 0:
                    return None

                data_price_300_map = dict()

                benchmark300 = 100 / (close300[0])
                benchmark = 100 / (close_list[0])

                for index, day in zip(range(0, len(date300)), date300):
                    data_price_300_map[day] = close300[index]

                for index, close in zip(range(1, len(close_list)), close_list):
                    price300 = data_price_300_map[date[index]] * benchmark300
                    target.append(round(close * benchmark - price300, 3))
                    benchmark_list.append(0)

                returnarray = zip(date, target, benchmark_list)
                return returnarray
            except Exception as e:
                print e
                return None
        elif Type == "价格指数".decode("utf-8"):
            global array300
            if array300 is None:
                array300 = ts.get_k_data("sh",
                                         start=startdata,
                                         end=enddata,
                                         ktype=interval)
            array = ts.get_k_data(stocknumber,
                                  start=startdata,
                                  end=enddata,
                                  ktype=interval,
                                  autype='qfq')
            if array is None or array300 is None:
                return None

            price_list = []
            price300_list = []
            try:
                close_list = array["close"].tolist()
                date = array["date"].tolist()

                close300_list = array300["close"].tolist()

                if len(close_list) is 0:
                    return None

                benchmark300 = 100 / (close300_list[0])
                benchmark = 100 / (close_list[0])

                for close in close_list:
                    price_list.append(close * benchmark)

                for close300 in close300_list:
                    price300_list.append(close300 * benchmark300)

                returnarray = zip(date, price_list, price300_list)
                return returnarray
            except Exception as e:
                print e
                return None
        elif Type != "Kline":
            array = ts.get_k_data(stocknumber,
                                  start=startdata,
                                  end=enddata,
                                  ktype=interval)
            if array is None:
                return
            Type1 = firstletter(Type).encode("ascii")
            target = array[Type1].tolist()
            date = array["date"].tolist()
            returnarray = zip(date, target)
            return returnarray
        else:
            array = ts.get_k_data(stocknumber,
                                  start=startdata,
                                  end=enddata,
                                  ktype=interval)
            if array is None:
                return
            Date = array["date"].tolist()
            Open = array["open"].tolist()
            Close = array["close"].tolist()
            High = array["high"].tolist()
            Low = array["low"].tolist()
            Candlestick = zip(*[Date, Open, Close, Low, High])
            return Candlestick
    else:
        if Type != "Kline":  # 复权
            array = ts.get_h_data(stocknumber,
                                  start=startdata,
                                  end=enddata,
                                  autype=interval)
            if array is None:
                return
            Type1 = firstletter(Type).encode("ascii")
            array = array.sort_index()
            target = array[Type1].tolist()
            date = array.index.format()
            returnarray = zip(date, target)
            return returnarray
        else:
            array = ts.get_h_data(stocknumber,
                                  start=startdata,
                                  end=enddata,
                                  autype=interval)
            if array is None:
                return
            array = array.sort_index()
            Date = array.index.format()
            Open = array["open"].tolist()
            Close = array["close"].tolist()
            High = array["high"].tolist()
            Low = array["low"].tolist()
            Candlestick = zip(*[Date, Open, Close, Low, High])
            return Candlestick
Example #11
0
def graphpage(labels, mode_combo, startdate, enddate, optInterval, width1,
              height1):
    #optInterval='D/W/M' labels

    startdate = startdate.replace("/", "-")  #convert to tushare readable date
    enddate = enddate.replace("/", "-")

    page = Page()

    for label in labels:  # generate numbers of graphs according to numbers of queries in treewidget
        label1 = re.split("-", label)
        overlap = Overlap()

        if label1[2] != "分笔" and label1[2] != "季度饼图":  #"K线" "复权" "历史分钟"
            if mode_combo == "复权":
                #if optInterval == "qfq" or optInterval == "hfq":#复权
                array = ts.get_h_data(label1[1],
                                      start=startdate,
                                      end=enddate,
                                      autype="qfq")
                array = array.sort_index()
                time = array.index.format()  # 日期正是index
            elif mode_combo == "K线":
                #elif optInterval.isalnum() :#历史K线
                array = ts.get_k_data(label1[1],
                                      start=startdate,
                                      end=enddate,
                                      ktype=optInterval)
                time = array['date'].tolist()  # array.date
            elif mode_combo == "历史分钟":
                array_bfr = ts.get_tick_data(label1[1], date=startdate)
                array_bfr.sort_values("time")
                a = startdate + " " + array_bfr["time"]
                array_bfr["time"] = a
                array_bfr["time"] = pd.to_datetime(a)
                array_bfr = array_bfr.set_index("time")
                if label1[2] != "Volume" and label1[2] != "Amount":
                    price_df = array_bfr["price"].resample(optInterval).ohlc(
                    )  # resample重新取样,选出ohlc=open/high/low,提取除价格之外另外4列.close,tushare是ohcl
                    price_df = price_df.dropna()
                    array = price_df
                    time = price_df.index.format()

                elif label1[2] == "Volume":
                    vols = array_bfr["volume"].resample(optInterval).sum(
                    )  #resample重新取样,累加间隔内数值 relevant data processing algorithm taken from Jimmy, Creator of Tushare
                    vols = vols.dropna()
                    vol_df = pd.DataFrame(vols, columns=["volume"])
                    array = vol_df
                    time = vol_df.index.format()
                else:
                    amounts = array_bfr["amount"].resample(optInterval).sum()
                    amounts = amounts.dropna()
                    amount_df = pd.DataFrame(amounts, columns=["amount"])
                    array = amount_df
                    time = amount_df.index.format()

            #绘图方法

            if label1[2] == 'Kline':
                re_array = array[['open', 'close', 'high', 'low']]
                data_li = list(row.tolist()
                               for index, row in re_array.iterrows()
                               )  # data_list = list(re_array.as_matrix())
                close = array['close'].tolist()
                kline = Kline(label1[0] + "-" + optInterval,
                              width=width1 * 10 / 11,
                              height=(height1 * 10 / 11) / len(labels))
                kline.add(label1[0],
                          time,
                          data_li,
                          is_datazoom_show=True,
                          datazoom_type="slider",
                          yaxis_interval=1)
                overlap.add(kline)

                if len(close) > 10:
                    ma10 = calculateMa(close, 10)
                    line1 = Line(title_color="#C0C0C0")
                    line1.add(label1[0] + "-" + "MA10", time, ma10)
                    overlap.add(line1)
                if len(close) > 20:
                    ma20 = calculateMa(close, 20)
                    line2 = Line(title_color="#C0C0C0")
                    line2.add(label1[0] + "-" + "MA20", time, ma20)
                    overlap.add(line2)
                if len(close) > 30:
                    ma30 = calculateMa(close, 30)
                    line3 = Line(title_color="#C0C0C0")
                    line3.add(label1[0] + "-" + "MA30", time, ma30)
                    overlap.add(line3)

                page.add(overlap)
            else:  #When label1[2]==open/close/volume
                if label1[2] == 'Open':
                    list_aft = array['open'].tolist()
                elif label1[2] == 'Close':
                    list_aft = array['close'].tolist()
                elif label1[2] == 'High':
                    list_aft = array['high'].tolist()
                elif label1[2] == 'Low':
                    list_aft = array['low'].tolist()
                elif label1[2] == 'Volume':  #volume
                    list_aft = array['volume'].tolist()
                else:  #amount
                    list_aft = array['amount'].tolist()

                line = Line(label1[0] + "-" + label1[2],
                            width=width1 * 10 / 11,
                            height=(height1 * 10 / 11) / len(labels))
                line.add(label1[0] + "-" + label1[2],
                         time,
                         list_aft,
                         is_datazoom_show=True,
                         yaxis_max="dataMax",
                         yaxis_min="dataMin",
                         datazoom_type="slider")
                overlap.add(line)
                page.add(overlap)

        elif label1[2] == "分笔":
            array = ts.get_tick_data(label1[1], date=startdate)
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            price = array["price"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):
                if val == "卖盘":
                    amount[idx] = -amount[idx]
                if val == "中性盘":
                    amount[idx] = 0

            returnarray = list(zip(date, amount, flag, price))

            form = [e[1] for e in returnarray]
            time = [d[0] for d in returnarray]

            bar = Bar(label1[0] + "-" + label1[2],
                      width=width1 * 10 / 11,
                      height=(height1 * 10 / 11) / len(labels))
            bar.add(label1[0] + "-" + label1[2],
                    time,
                    form,
                    is_datazoom_show=True,
                    datazoom_type="slider",
                    yaxis_min="dataMin",
                    yaxis_max="dataMax")
            overlap.add(bar)

            line = Line(label1[0] + "price",
                        width=width1 * 10 / 11,
                        height=(height1 * 10 / 11) / len(labels))
            price = [e[3] for e in returnarray]
            line.add(label1[0] + "price",
                     time,
                     price,
                     yaxis_min="dataMin",
                     yaxis_max="dataMax",
                     is_datazoom_show=True,
                     datazoom_type="slider",
                     yaxis_type="value")
            overlap.add(line, yaxis_index=1, is_add_yaxis=True)
            page.add(overlap)
        elif label1[2] == "季度饼图":
            datestr = startdate.split("-")
            thisyear = datestr[0]
            df2 = ts.top10_holders(code=label1[1], gdtype="1")
            test = df2[1]["quarter"].tolist()
            df_ready = df2[1]
            idxlist = []
            for idx, val in enumerate(test):
                a = val.split("-")
                if a[0] == thisyear:
                    # print a[0],idx
                    idxlist.append(idx)
            thing = df_ready.loc[idxlist]
            thing = thing.sort_values(["quarter", "name"])
            # print a[0],id
            name = thing["name"].tolist()
            value = thing["hold"].tolist()
            quarter = thing["quarter"].tolist()
            namearray = [name[i:i + 10] for i in range(0, len(name), 10)]
            valuearray = [value[j:j + 10] for j in range(0, len(value), 10)]
            quarterarray = [
                quarter[k:k + 10] for k in range(0, len(quarter), 10)
            ]

            flag = ["pie" for i in namearray]
            num = [len(value) for k in namearray]
            returnarray = list(
                zip(namearray, valuearray, quarterarray, flag, num))

            timeline = Timeline(is_auto_play=False, timeline_bottom=0
                                )  # zip(namearray,valuearray,quarter,flag,num)
            namearray = [c[0] for c in returnarray]
            valuearray = [d[1] for d in returnarray]
            quarter = [e[2] for e in returnarray]
            num = returnarray[0][4]

            for x in range(0, int(num / 10)):
                list1 = valuearray[x]
                names = namearray[x]
                quarters = quarter[x][0]

                for idx, val in enumerate(list1):
                    list1[idx] = float(val)

                pie = Pie(label1[0] + "-" + "前十股东",
                          width=width1 * 10 / 11,
                          height=(height1 * 10 / 11))

                pie.add(label1[0] + "-" + "前十股东",
                        names,
                        list1,
                        radius=[30, 55],
                        is_legend_show=False,
                        is_label_show=True,
                        label_formatter="{b}: {c}\n{d}%")
                timeline.add(pie, quarters)
                # namearray = [y for y in namearray[x]]
            timeline.render()

    page.render()
Example #12
0
import tushare as ts
import pandas as pd
from IPython.display import HTML

StockCode = '300036'

#历年前十大股东持股情况
#df1为季度统计摘要,data1为前十大持股明细统计
df1, data1 = ts.top10_holders(code=StockCode,
                              gdtype='1')  #gdtype等于1时表示流通股,默认为0

df1 = df1.sort_values('quarter', ascending=True)

qts = list(df1['quarter'])
data = list(df1['props'])

lgdstr = """
var axisData = """ + str(qts) + """;
var data = """ + str(data) + """;
var links = data.map(function (item, i) {
    return {
        source: i,
        target: i + 1
    };
});
links.pop();
option = {
    title: {
        text: '【超图软件】前十大流通股东持股占比'
    },
    tooltip: {
Example #13
0
def generateline(stocknumber,Type,startdate,enddate,interval):
    startdata = startdate.encode("ascii").replace("/","-").replace("\n","") #convert to tushare readable date
    enddata = enddate.encode("ascii").replace("/","-").replace("\n","")
    #print startdata
    #print enddata

    current_time = time.strftime("%Y/%m/%d")
    if Type ==  "分笔".decode("utf-8"):
        if startdate!=current_time:
            array = ts.get_tick_data(stocknumber, date = startdata)#分笔
            if array is None:
                return
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            price = array["price"].tolist()
            flag = ["bar" for i in date]
            for idx,val in enumerate(atype):#if卖盘,交易变成负数
                if val == "卖盘":
                    amount[idx] = -amount[idx]
                if val == "中性盘":#if中性盘,则忽略. Might have a problem with this part??
                    amount[idx] = 0
            returnarray = zip(date,amount,flag,price)
            return returnarray
        else:
            array = ts.get_today_ticks(stocknumber)#Tushare里今日分笔和历史分笔需要分别对待
            if array is None:
                return
            array = array.sort_values("time")
            date = array["time"].tolist()
            amount = array["amount"].tolist()
            atype = array["type"].tolist()
            flag = ["bar" for i in date]
            for idx, val in enumerate(atype):
                if val == "卖盘".decode("utf-8"):
                    amount[idx] = -amount[idx]
                if val == "中性盘".decode("utf-8"):
                    amount[idx] = 0
            returnarray = zip(date, amount, flag)
            return returnarray

    if Type=="季度饼图".decode("utf-8"):
        datestr = startdate.split("/")
        thisyear = datestr[0]
        df2 = ts.top10_holders(code=stocknumber, gdtype="1")
        test = df2[1]["quarter"].tolist()
        df_ready = df2[1]
        idxlist = []
        for idx, val in enumerate(test):
            a = val.split("-")
            if a[0] == thisyear:
                # print a[0],idx
                idxlist.append(idx)
        thing = df_ready.loc[idxlist]
        thing = thing.sort_values(["quarter", "name"])
        # print a[0],id
        name = thing["name"].tolist()
        value = thing["hold"].tolist()
        quarter = thing["quarter"].tolist()
        namearray = [name[i:i + 10] for i in xrange(0, len(name), 10)]
        valuearray = [value[j:j + 10] for j in xrange(0, len(value), 10)]
        quarterarray = [quarter[k:k + 10] for k in xrange(0, len(quarter), 10)]

        flag = ["pie" for i in namearray]
        num = [len(value) for k in namearray]
        returnarray = zip(namearray,valuearray,quarterarray,flag,num)
        return returnarray





    if interval!="qfq" and interval!="hfq":
        if interval=="1min" or interval=="5min" or interval=="15min" or interval=="30min" or interval=="60min":
            df = ts.get_tick_data(stocknumber, date=startdata)
            df.sort_values("time")
            a = startdata + " " + df["time"]
            df["time"] = a
            df["time"] = pd.to_datetime(a)
            df = df.set_index("time")
            price_df = df["price"].resample(interval).ohlc()
            price_df = price_df.dropna()
            vols = df["volume"].resample(interval).sum() #relevant data processing algorithm taken from Jimmy, Creator of Tushare
            vols = vols.dropna()
            vol_df = pd.DataFrame(vols, columns=["volume"])
            amounts = df["amount"].resample(interval).sum()
            amounts = amounts.dropna()
            amount_df = pd.DataFrame(amounts, columns=["amount"])
            newdf = price_df.merge(vol_df, left_index=True, right_index=True).merge(amount_df, left_index=True,
                                                                                right_index=True)
            if Type != "Kline":
                Type1 = firstletter(Type).encode("ascii")
                target = newdf[Type1].tolist()
                date = newdf.index.format()
                returnarray = zip(date, target)
                return returnarray
            else:
                Date = newdf.index.format()
                Open = newdf["open"].tolist()
                Close = newdf["close"].tolist()
                High = newdf["high"].tolist()
                Low = newdf["low"].tolist()
                Candlestick = zip(*[Date, Open, Close, Low, High])
                return Candlestick


        #正常历史k线
        if Type!="Kline":
            array = ts.get_k_data(stocknumber, start=startdata, end=enddata, ktype=interval)
            if array is None:
                return
            Type1 = firstletter(Type).encode("ascii")
            target = array[Type1].tolist()
            date = array["date"].tolist()
            returnarray = zip(date,target)
            return returnarray
        else:
            array = ts.get_k_data(stocknumber, start=startdata, end=enddata, ktype=interval)
            if array is None:
                return
            Date = array["date"].tolist()
            Open = array["open"].tolist()
            Close = array["close"].tolist()
            High = array["high"].tolist()
            Low = array["low"].tolist()
            Candlestick = zip(*[Date,Open,Close,Low,High])
            return Candlestick
    else:
        if Type!="Kline": # 复权
            array = ts.get_h_data(stocknumber, start = startdata, end = enddata, autype= interval)
            if array is None:
                return
            Type1 = firstletter(Type).encode("ascii")
            array = array.sort_index()
            target = array[Type1].tolist()
            date = array.index.format()
            returnarray = zip(date, target)
            return returnarray
        else :
            array = ts.get_h_data(stocknumber, start=startdata, end=enddata, autype=interval)
            if array is None:
                return
            array = array.sort_index()
            Date = array.index.format()
            Open = array["open"].tolist()
            Close = array["close"].tolist()
            High = array["high"].tolist()
            Low = array["low"].tolist()
            Candlestick = zip(*[Date, Open, Close, Low, High])
            return Candlestick