test/hk_qfqV1.py
2025-03-06 14:35:29 +08:00

121 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 30 16:57:10 2021
@author: Administrator
"""
import pandas as pd
import akshare as ak
from sqlalchemy import create_engine,text
import datetime
import sys
sys.path.append(r'C:\Users\marui\Desktop\mamama\AKshare\daily_update.py')
sys.path.append(r'C:\workspace\daily_price')
import daily_update
today = str(datetime.date.today()).replace('-','')
# today = '20241225'
def update_data():
#取港股实时数据
c = ak.stock_hk_spot_em()
a = c[c['最新价']=='-'].index.tolist()
b = c.drop(a)
ticker = b['代码'].tolist()
return ticker
#未复权
def hk_daily_prices(table_name):
table_name = 'ticker_daily_original_database.hk_daily_prices'
engine = create_engine(engine_server)
ticker = update_data()
all_data = []
for x in ticker:
stock_hk_hist_df = ak.stock_hk_hist(symbol=x, start_date=today, end_date=today, adjust="")
stock_hk_hist_df['Ticker'] = x
stock_hk_hist_df['Adjustflag'] = '3'
stock_hk_hist_df.columns = ['As_Of_Date','Open','Close','High','Low','Volume_Shares','Volume_Money','Amplitude','Pct_Chg','Change','Turnover','Ticker','Adjustflag']
all_data.append(stock_hk_hist_df)
all_dataframe = pd.concat(all_data)
all_dataframe.to_sql(table_name.split('.')[1],engine,schema = table_name.split('.')[0], index = False, index_label=False,if_exists = 'append')
print('港股 未复权数据已更新')
#前复权S
def hk_daily_prices_qfq(table_name):
table_name = 'ticker_daily_original_database.hk_daily_prices_qfq'
engine = create_engine(engine_server)
ticker = update_data()
a = ['06186','00700']
b = [i for i in ticker if i not in a]
ticker = a+b
with engine.connect() as connection:
trans = connection.begin() # 开始事务
try:
sql = f'TRUNCATE TABLE {table_name}'
connection.execute(text(sql))
trans.commit() # 提交事务
except Exception as e:
trans.rollback() # 回滚事务
print(f"Error occurred: {e}")
for j in ticker:
print(j)
stock_hk_hist_qfq_df = ak.stock_hk_hist(symbol=j, start_date="19700101", end_date=today, adjust="qfq")
stock_hk_hist_qfq_df_rename = stock_hk_hist_qfq_df.rename(columns={'日期':'As_Of_Date','开盘':'Open','收盘':'Close','最高':'High',\
'最低':'Low','成交量':'Volume_Shares','成交额':'Volume_Money',\
'振幅':'Amplitude','涨跌幅':'Pct_Chg','涨跌额':'Change','换手率':'Turnover'})
stock_hk_hist_qfq_df_rename['Ticker'] = j
stock_hk_hist_qfq_df_rename['Adjustflag'] = '2'
if j == '01405':
stock_hk_hist_qfq_df_rename = stock_hk_hist_qfq_df_rename[~(stock_hk_hist_qfq_df_rename['As_Of_Date'] =='2009-10-27')|(stock_hk_hist_qfq_df_rename['Volume_Money'] == 0)]
else:
pass
stock_hk_hist_qfq_df_rename = stock_hk_hist_qfq_df_rename.drop_duplicates()
stock_hk_hist_qfq_df_rename.to_sql(table_name.split('.')[1],engine,schema = table_name.split('.')[0], index = False, index_label=False,if_exists = 'append')
print('港股 前复权数据已更新')
#后复权
def hk_daily_prices_hfq(table_name):
table_name = 'ticker_daily_original_database.hk_daily_prices_hfq'
engine = create_engine(engine_server)
ticker = update_data()
for c in ticker:
stock_hk_hist_hfq_df = ak.stock_hk_hist(symbol=c, start_date=today, end_date=today, adjust="hfq")
stock_hk_hist_hfq_df_rename = stock_hk_hist_hfq_df.rename(columns = {'日期':'As_Of_Date','开盘':'Open','收盘':'Close','最高':'High',\
'最低':'Low','成交量':'Volume_Shares','成交额':'Volume_Money',\
'振幅':'Amplitude','涨跌幅':'Pct_Chg','涨跌额':'Change','换手率':'Turnover'})
stock_hk_hist_hfq_df_rename['Ticker'] = c
stock_hk_hist_hfq_df_rename['Adjustflag'] = '1'
stock_hk_hist_hfq_df_rename.to_sql(table_name.split('.')[1],engine,schema = table_name.split('.')[0], index = False, index_label=False,if_exists = 'append')
print('港股 后复权数据已更新')
if __name__ == '__main__':
engine_server = "mysql+pymysql://cn_ainvest_db:cn_ainvest_sd3a1@rm-2zewagytttzk6f24xno.mysql.rds.aliyuncs.com/"
update_servers = '152.136.226.199'
table_name_list = ['ticker_daily_original_database.hk_daily_prices','ticker_daily_original_database.hk_daily_prices_qfq','ticker_daily_original_database.hk_daily_prices_hfq']
for table_name in table_name_list:
try:
if table_name == 'ticker_daily_original_database.hk_daily_prices':
hk_daily_prices(table_name)
elif table_name == 'ticker_daily_original_database.hk_daily_prices_qfq':
hk_daily_prices_qfq(table_name)
else:
hk_daily_prices_hfq(table_name)
daily_update.update_end_date(engine_server,table_name)
except Exception as e :
print(e)
#daily_update.send_email("数据更新报错","数据库:"+table_name+"\n更新服务器"+update_servers)
print('wrong')