求5天平均成交量及最后一天成交量

>>> import pymssql as pm
>>> import pymssql as pms
>>> import numpy as np
>>> conn=pms.connect(host='.',database='stocks')
>>> cur=conn.cursor()
>>> ret=cur.execute("select stk_id,jv from stocks_pool")
>>> rows=pd.DataFrame(cur,columns=["stk_id","jv"])
>>> result[["jv"]]=result[["jv"]].astype(float)

>>> def get_result(code,startdate,enddate):
    lg=bs.login(user_id='anonymous',password='123456')
    rs = bs.query_history_k_data_plus("%s"% code,
        "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
        start_date=startdate, end_date=enddate,
        frequency="d", adjustflag="3")

    data_list=[]
    while (rs.error_code=='0') & rs.next():
           data_list.append(rs.get_row_data())

           
    result = pd.DataFrame(data_list, columns=rs.fields)
    bs.logout ()
    return result

>>> startdate="2019-8-1"
>>> enddate="2019-9-27"


>>> code="sz.000983"
>>> data=get_result(code,startdate,enddate)
>>> data[['volume']]=data[['volume']].astype('int64')
>>> data['volume'][-6:-1].mean() ## 求倒数第二至倒数第六共5个数据的平均值。切片要理解清楚

##正式求解,完整代码:


>>> for i in range(len(rows)):
    stk_id=str(rows['stk_id'][i])
    if stk_id[0]=='6':
        code='sh.'+stk_id
    else:
        code='sz.'+stk_id
    code=code.strip()

    print(len(code))
    data=get_result(code,startdate,enddate)
    data[['volume']]=data[['volume']].astype('int64')
    vol_avg=data['volume'][-6:-1].mean()
    vol=np.array(data['volume'])[-1]
    cur.execute("update stocks_pool set vol='%d',vol_avg='%d' where stk_id='%s'"%(vol,vol_avg,stk_id))

###查看结果
>>> sql=" select stk_id,jv,vol,vol_avg,vol/vol_avg as ratio  from stocks_pool  order by ratio"
>>> cur.execute(sql)
>>> rslt=pd.DataFrame(cur.fetchall(),columns=['stk_id','jv','vol','vol_avg','ratio'])
>>> len(rslt)
81
>>> rslt.head()


posted @ 2019-10-09 08:03  warlf  阅读(134)  评论(0)    收藏  举报