python量化数据15:计算同花顺涨停次日涨跌幅表现

一、环境安装


pip install pandas
pip install requests
pip install mootdx

二、代码


from mootdx.quotes import Quotes
import pandas as pd
import requests
import time
import json
client = Quotes.factory(market='std')
def get_open_limit_pool(date='20241021'):
    '''
    炸板池
    '''
    url='https://data.10jqka.com.cn/dataapi/limit_up/open_limit_pool?'
    params={
        'page': '1',
        'limit': '15',
        'field': '199112,9002,48,1968584,19,3475914,9003,10,9004',
        'filter': 'HS,GEM2STAR',
        'order_field': '199112',
        'order_type': '0',
        'date':f'{date}',
        '_': '1695696646721',
    }
    res=requests.get(url=url,params=params)
    text=res.text
    if len(str(text))<70:
        return False,''
    else:
        try:
            text=res.json()
            df=pd.DataFrame(text['data']['info'])
            columns=['开板次数','首次涨停时间','最后涨停时间','证券代码','涨停形态','封单量',
                        '_','最近一年封板率','流通市值','_','_','涨跌幅','换手率','涨停原因',
                        '封单额','几天几板','股票名称','_','_','_','最新价','time_preview']
            #del df['_']
            return True,df
        except:
            return False,''
def read_func_data(func="get_open_limit_pool(date='20241021')"):
    '''
    读取同花顺返回的tuple数据转pandas
    '''
    text=func
    while True:
        stats,df=eval(text)
        if stats==True:
            df=df
            break
        else:
            print('获取不成功{}'.format(func))
    return df

catdate = '20241015'
catdate2 = '2024-10-15'
df = read_func_data(func="get_limit_up_pool(date='%s')"%catdate)
df['封单额'] = df['封单额']/100000000
df = df[['证券代码','股票名称','首次涨停时间','涨停形态','几天几板','封单额']] 
df = pd.DataFrame(df)
df['次日开盘涨幅'] = ""
df['次日收盘涨幅'] = ""
df = df.sort_values(by='首次涨停时间', ascending=True) #按首次涨停时间排序
for i in range(len(df)):
    code = df.iloc[i]['证券代码']
    name = df.iloc[i]['股票名称']
    data = client.bars(symbol=code, frequency=9, offset=10)  #获取最近300日贵州茅台k线
    # print(data.iloc)
    for j in range(len(data)):
        
        if catdate2 in str(data.iloc[j]['datetime']):
            lastclose = data.iloc[j]['close']
            open = data.iloc[j+1]['open']
            close = data.iloc[j+1]['close']
            try:
                copy = df.iloc[i] 
                copy['次日开盘涨幅'] = round((float(open)/float(lastclose)-1)*100,2)
                copy['次日收盘涨幅'] = round((float(close)/float(lastclose)-1)*100,2)
                #涨停时间戳转9:30 这种容易理解数字
                copy['首次涨停时间'] = time.strftime("%H:%M", time.localtime(int(copy['首次涨停时间'])))
                df.iloc[i]  = copy
            except Exception as e:
                print(code,name,'error')
            
            
print(df)
df.to_excel("涨停.xlsx")

python量化数据15:计算同花顺涨停次日涨跌幅表现_第1张图片

你可能感兴趣的:(linux,运维,服务器)