请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3365816 新帖:23

如何获取期货会员成交持仓龙虎榜

交易资深人士发表于:5 月 10 日 02:09回复(1)

聚宽提供了基础的数据,但如何可以直观的观测某天某个品种其会员持仓的龙虎榜数据呢,就像下图这样:
M1909合约,20190419的成交、多头持仓、空头持仓龙虎榜。
Img

本研究基于聚宽提供的数据,重现了这一龙虎榜,为后续研究提供支撑,为主观交易提供了参考:
(以下截图仅为部分)
Img
经比较可以看出,与东财网站上是一样的。

需要注意的是:
在计算净多头、净空头龙虎榜时,东财采用了只要是上榜会员直接相减的方法。
比如,华泰期货仅上了多头持仓龙虎榜,没有上空头持仓龙虎榜,但在计算净持仓时,东财把华泰的空头持仓当0处理,这是不合理的。
Img

本算法在计算净多头持仓与净空头持仓时,只计算同时上多头持仓龙虎榜,以及上空头持仓龙虎榜的会员单位,所以在净多龙虎榜与净空龙虎榜方面与东财的不一样:
Img

from jqdata import finance

def get_menber_vol_opid(day,code):
    """
    输入日期、代码
    输出9张龙虎榜数据
    """

    import pandas as pd

    #获取数据
    q=query(finance.FUT_MEMBER_POSITION_RANK.day,
            finance.FUT_MEMBER_POSITION_RANK.code,
            finance.FUT_MEMBER_POSITION_RANK.rank_type,
            finance.FUT_MEMBER_POSITION_RANK.rank,
            finance.FUT_MEMBER_POSITION_RANK.member_name,
            finance.FUT_MEMBER_POSITION_RANK.indicator,
            finance.FUT_MEMBER_POSITION_RANK.indicator_increase).\
            filter(finance.FUT_MEMBER_POSITION_RANK.code==code,
                   finance.FUT_MEMBER_POSITION_RANK.day==day)
    df=finance.run_query(q)
    
    #数据分离,得3张表
    df1 = df[df['rank_type']=='成交量排名'][['rank','member_name','indicator','indicator_increase']]
    df2 = df[df['rank_type']=='持买单量排名'][['rank','member_name','indicator','indicator_increase']]
    df3 = df[df['rank_type']=='持卖单量排名'][['rank','member_name','indicator','indicator_increase']]
    
    #-------------------------------------基础龙虎榜数据
    #成交量龙虎榜
    df1.columns = ['名次','会员简称','成交量','增减']
    sum1a = sum(df1['成交量'])
    sum1b = sum(df1['增减'])
    df1 = df1.append(pd.DataFrame(['成交量','本日合计',sum1a,sum1b],index=['名次','会员简称','成交量','增减']).T,sort=False)
    df1 = df1.reset_index(drop=True)
    
    #多头持仓龙虎榜
    df2.columns = ['名次','会员简称','多单量','增减']
    sum2a = sum(df2['多单量'])
    sum2b = sum(df2['增减'])
    df2 = df2.append(pd.DataFrame(['多头','本日合计',sum2a,sum2b],index=['名次','会员简称','多单量','增减']).T,sort=False)
    df2 = df2.reset_index(drop=True)
    
    #空头持仓龙虎榜
    df3.columns = ['名次','会员简称','空单量','增减']
    sum3a = sum(df3['空单量'])
    sum3b = sum(df3['增减'])
    df3 = df3.append(pd.DataFrame(['空头','本日合计',sum3a,sum3b],index=['名次','会员简称','空单量','增减']).T,sort=False)
    df3 = df3.reset_index(drop=True)
    
    #-----------------------------------计算持仓龙虎榜
    #持仓数据
    temp1 = df2[['会员简称','多单量']].set_index('会员简称')
    temp1.columns = ['持仓']
    temp2 = df3[['会员简称','空单量']].set_index('会员简称')
    temp2.columns = ['持仓']
    opid = temp1.iloc[:-1,:]-temp2.iloc[:-1,:]  #最后一行的本日合计不参与
    
    #增减数据
    temp3 = df2[['会员简称','增减']].set_index('会员简称')
    temp4 = df3[['会员简称','增减']].set_index('会员简称')
    opid_inc = temp3.iloc[:-1,:]-temp4.iloc[:-1,:]
    
    #合并持仓、增减
    #注意东方财富的结果不对(如果多头持仓龙虎榜中有,而空头持仓龙虎榜中没有,东财直接把多持仓龙虎榜中持仓当作净持仓)
    opid_result = pd.concat([opid,opid_inc],axis=1).sort_values(by='持仓',ascending=False)
    
    #---------净多头龙虎榜
    df4 = opid_result[opid_result['持仓']>0]
    temp1 = sum(df4['持仓'])
    temp2 = sum(df4['增减'])
    df4 = df4.reset_index()
    df4['名次']=range(1,len(df4)+1)
    df4 = df4[['名次','会员简称','持仓','增减']]
    #插入空行
    insert_row=pd.DataFrame([[' ',' ',' ',' ']],columns=['名次','会员简称','持仓','增减'])
    for i in range(20-len(df4)):
        df4=df4.append(insert_row,ignore_index=True)
    df4 = df4.append(pd.DataFrame(['净多','本日合计',temp1,temp2],index=['名次','会员简称','持仓','增减']).T,sort=False)
    df4 = df4.reset_index(drop=True)
    df4.columns=['名次','会员简称','净多量','增减']
    
    #---------净空头龙虎榜
    df7 = opid_result[opid_result['持仓']<0]
    df7 = 0-df7
    df7 = df7.sort_values(by='持仓',ascending=False)
    
    temp1 = sum(df7['持仓'])
    temp2 = sum(df7['增减'])
    df7 = df7.reset_index()
    df7['名次']=range(1,len(df7)+1)
    df7 = df7[['名次','会员简称','持仓','增减']]
    #插入空行
    insert_row=pd.DataFrame([[' ',' ',' ',' ']],columns=['名次','会员简称','持仓','增减'])
    for i in range(20-len(df7)):
        df7=df7.append(insert_row,ignore_index=True)
    df7 = df7.append(pd.DataFrame(['净空','本日合计',temp1,temp2],index=['名次','会员简称','持仓','增减']).T,sort=False)
    df7 = df7.reset_index(drop=True)
    df7.columns=['名次','会员简称','净空量','增减']
    
    
    #----------------多头增减仓龙虎榜
    import warnings
    warnings.filterwarnings('ignore')
    #多头增仓龙虎榜
    temp = df2.iloc[:-1,:].sort_values(by='增减',ascending=False)
    df5 = temp[temp['增减']>0]
    
    temp1 = sum(df5['多单量'])
    temp2 = sum(df5['增减'])
    
    df5.loc[:,'名次']=range(1,len(df5)+1)
    #插入空行
    insert_row=pd.DataFrame([[' ',' ',' ',' ']],columns=['名次','会员简称','多单量','增减'])
    for i in range(20-len(df5)):
        df5=df5.append(insert_row,ignore_index=True)
    df5 = df5.append(pd.DataFrame(['多增','本日合计',temp1,temp2],index=['名次','会员简称','多单量','增减']).T,sort=False)
    df5 = df5.reset_index(drop=True)
    df5 = df5[['名次','会员简称','增减','多单量']]
    
    #多头减仓龙虎榜
    temp = df2.iloc[:-1,:].sort_values(by='增减')
    df6 = temp[temp['增减']<0]
    
    temp1 = sum(df6['多单量'])
    temp2 = sum(df6['增减'])
    
    df6.loc[:,'名次']=range(1,len(df6)+1)
    #插入空行
    insert_row=pd.DataFrame([[' ',' ',' ',' ']],columns=['名次','会员简称','多单量','增减'])
    for i in range(20-len(df6)):
        df6=df6.append(insert_row,ignore_index=True)
    df6 = df6.append(pd.DataFrame(['多减','本日合计',temp1,temp2],index=['名次','会员简称','多单量','增减']).T,sort=False)
    df6 = df6.reset_index(drop=True)
    df6 = df6[['名次','会员简称','增减','多单量']]
    
    
    #---------------空头增减仓龙虎榜
    #空头增仓龙虎榜
    temp = df3.iloc[:-1,:].sort_values(by='增减',ascending=False)
    df8 = temp[temp['增减']>0]
    
    temp1 = sum(df8['空单量'])
    temp2 = sum(df8['增减'])
    
    df8.loc[:,'名次']=range(1,len(df8)+1)
    #插入空行
    insert_row=pd.DataFrame([[' ',' ',' ',' ']],columns=['名次','会员简称','空单量','增减'])
    for i in range(20-len(df8)):
        df8=df8.append(insert_row,ignore_index=True)
    df8 = df8.append(pd.DataFrame(['空增','本日合计',temp1,temp2],index=['名次','会员简称','空单量','增减']).T,sort=False)
    df8 = df8.reset_index(drop=True)
    df8 = df8[['名次','会员简称','增减','空单量']]
    
    #空头减仓龙虎榜
    temp = df3.iloc[:-1,:].sort_values(by='增减')
    df9 = temp[temp['增减']<0]
    
    temp1 = sum(df9['空单量'])
    temp2 = sum(df9['增减'])
    
    df9.loc[:,'名次']=range(1,len(df9)+1)
    #插入空行
    insert_row=pd.DataFrame([[' ',' ',' ',' ']],columns=['名次','会员简称','空单量','增减'])
    for i in range(20-len(df9)):
        df9=df9.append(insert_row,ignore_index=True)
    df9 = df9.append(pd.DataFrame(['空减','本日合计',temp1,temp2],index=['名次','会员简称','空单量','增减']).T,sort=False)
    df9 = df9.reset_index(drop=True)
    df9 = df9[['名次','会员简称','增减','空单量']]
    
    #-------------------------合并9个龙虎榜
    all_data = pd.concat([df1,df2,df3,df4,df5,df6,df7,df8,df9],axis=1)
    columns1 = all_data.columns
    all_data=pd.DataFrame(all_data.values,columns=[['成交量龙虎榜']*4+\
                                                   ['多头持仓龙虎榜']*4+\
                                                   ['空头持仓龙虎榜']*4+\
                                                   ['净多头龙虎榜']*4+\
                                                   ['多头增仓龙虎榜']*4+\
                                                   ['多头减仓龙虎榜']*4+\
                                                   ['净空头龙虎榜']*4+\
                                                   ['空头增仓龙虎榜']*4+\
                                                   ['空头减仓龙虎榜']*4,columns1])
    filename = day+'日'+code+'会员成交持仓龙虎榜数据.xlsx'
    all_data.to_excel(filename)
    return all_data


def test1():
    #大连品种
    code = 'M1909.XDCE'
    day = '2019-04-19'
    all_data = get_menber_vol_opid(day,code)
    return all_data

def test2():
    code = 'RB1905.XSGE'
    day = '2019-02-13'
    all_data = get_menber_vol_opid(day,code)
    return all_data

if __name__=='__main__':
    all_data = test1()
    #all_data2 = test2()
    
all_data
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead tr th { text-align: left; }
成交量龙虎榜 多头持仓龙虎榜 空头持仓龙虎榜 净多头龙虎榜 多头增仓龙虎榜 多头减仓龙虎榜 净空头龙虎榜 空头增仓龙虎榜 空头减仓龙虎榜
名次 会员简称 成交量 增减 名次 会员简称 多单量 增减 名次 会员简称 空单量 增减 名次 会员简称 净多量 增减 名次 会员简称 增减 多单量 名次 会员简称 增减 多单量 名次 会员简称 净空量 增减 名次 会员简称 增减 空单量 名次 会员简称 增减 空单量
0 1 东证期货 167963 -28903 1 中粮期货 51671 -2720 1 中粮期货 126984 -966 1 银河期货 15259 -4606 1 申银万国 2756 30427 1 一德期货 -4864 22861 1 中粮期货 75313 1754 1 方正中期 2828 18371 1 中信期货 -3570 32697
1 2 海通期货 70455 -27962 2 永安期货 49276 1333 2 国投安信 93509 -1645 2 方正中期 4792 -3409 2 国投安信 2542 22041 2 国泰君安 -3245 19410 2 国投安信 71468 -4187 2 银河期货 2384 28726 2 北京首创 -2114 36222
2 3 国富期货 60993 -18690 3 银河期货 43985 -2222 3 永安期货 73670 2376 3 光大期货 382 -6 3 永安期货 1333 49276 3 中粮期货 -2720 51671 3 永安期货 24394 1043 3 永安期货 2376 73670 3 南华期货 -1949 45790
3 4 国泰君安 37877 -15788 4 南华期货 41838 -1202 4 申银万国 54067 -466 4 浙商期货 938 16218 4 银河期货 -2222 43985 4 申银万国 23640 -3222 4 东证期货 629 35969 4 摩根大通 -1738 42481
4 5 徽商期货 36064 -15174 5 中信期货 31587 -437 5 南华期货 45790 -1949 5 徽商期货 784 21010 5 南华期货 -1202 41838 5 国泰君安 12491 2727 5 光大期货 352 23261 5 国投安信 -1645 93509
5 6 兴证期货 30143 -19621 6 申银万国 30427 2756 6 摩根大通 42481 -1738 6 中信建投 513 21174 6 广发期货 -951 23590 6 东证期货 9544 969 6 信达期货 157 26995 6 五矿经易 -1126 23954
6 7 南华期货 29217 -6258 7 华泰期货 29725 -904 7 北京首创 36222 -2114 7 长江期货 352 20424 7 华泰期货 -904 29725 7 浙商期货 7824 -1017 7 北京金鹏 156 17623 7 中粮期货 -966 126984
7 8 中信期货 28637 -17078 8 东证期货 26425 -340 8 东证期货 35969 629 8 光大期货 346 23643 8 方正中期 -581 23163 8 一德期货 7531 4639 8 国泰君安 -518 31901
8 9 方正中期 27759 -10930 9 光大期货 23643 346 9 中信期货 32697 -3570 9 中信期货 -437 31587 9 南华期货 3952 -747 9 申银万国 -466 54067
9 10 鲁证期货 24098 -3076 10 广发期货 23590 -951 10 国泰君安 31901 -518 10 五矿经易 -416 21868 10 五矿经易 2086 -710 10 中国国际 -240 28752
10 11 华安期货 21630 -1772 11 方正中期 23163 -581 11 一德期货 30392 -225 11 东证期货 -340 26425 11 中信期货 1110 -3133 11 一德期货 -225 30392
11 12 中信建投 21322 -14182 12 一德期货 22861 -4864 12 中国国际 28752 -240 12 新湖期货 -8 21107 12 中融汇信 -100 19705
12 13 银河期货 20512 -5124 13 国投安信 22041 2542 13 银河期货 28726 2384 13 浙商期货 -79 24042
13 14 永安期货 19911 -22506 14 五矿经易 21868 -416 14 信达期货 26995 157
14 15 华泰期货 19607 -1826 15 中信建投 21174 513 15 浙商期货 24042 -79
15 16 光大期货 19548 -8228 16 新湖期货 21107 -8 16 五矿经易 23954 -1126
16 17 东方财富 16779 -7289 17 徽商期货 21010 784 17 光大期货 23261 352
17 18 一德期货 15217 140 18 长江期货 20424 352 18 中融汇信 19705 -100
18 19 上海大陆 14985 7046 19 国泰君安 19410 -3245 19 方正中期 18371 2828
19 20 长江期货 14078 -5016 20 浙商期货 16218 938 20 北京金鹏 17623 156
20 成交量 本日合计 696795 -222237 多头 本日合计 561443 -8326 空头 本日合计 815111 -5854 净多 本日合计 20433 -8021 多增 本日合计 9564 204213 多减 本日合计 -17890 357230 净空 本日合计 239353 -1884 空增 本日合计 8882 224615 空减 本日合计 -14736 590496

全部回复

0/140

量化课程

    移动端课程