Commit 6fd5ac9b authored by 赵杰's avatar 赵杰

基础数据脚本更新

parent afb6928a
...@@ -9,20 +9,39 @@ ...@@ -9,20 +9,39 @@
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from sqlalchemy import and_ from sqlalchemy import and_
import tushare as ts
import datetime
from app.api.engine import tamp_user_session, tamp_product_session from app.api.engine import tamp_user_session, tamp_product_session
from app.model.tamp_user_models import t_customer_order, t_customer_info from app.model.tamp_user_models import t_customer_order, t_customer_info
from app.model.tamp_product_models import t_fund_info from app.model.tamp_product_models import t_fund_info
class UserCustomerDataAdaptor: class UserCustomerDataAdaptor:
fund_nav_total = pd.DataFrame()
user_id = "" user_id = ""
customer_id = "" customer_id = ""
start_date = ""
group_data = {}
def __init__(self, user_id, customer_id): def __init__(self, user_id, customer_id):
self.user_id = user_id self.user_id = user_id
self.customer_id = customer_id self.customer_id = customer_id
self.user_customer_order_df = self.get_user_customer_order_data() self.user_customer_order_df = self.get_user_customer_order_data()
self.fund_nav_total = self.get_customer_fund_nav_data()
self.get_customer_index_nav_data()
self.group_operate()
@staticmethod
def get_trade_cal(start_date, end_date):
ts.set_token('ac1f734f8a25651aa07319ca35b1b0c0854e361e306fe85d85e092bc')
pro = ts.pro_api()
if end_date is not None:
df = pro.trade_cal(exchange='SSE', start_date=start_date, end_date=end_date, is_open='1')
else:
df = pro.trade_cal(exchange='SSE', start_date=start_date, is_open='1')
df.drop(['exchange', 'is_open'], axis=1, inplace=True)
df.rename(columns={'cal_date': 'end_date'}, inplace=True)
df["datetime"] = df["end_date"].apply(lambda x: datetime.datetime.strptime(x, "%Y%m%d"))
return df
# 获取理财师下该用户所有订单列表 # 获取理财师下该用户所有订单列表
def get_user_customer_order_data(self): def get_user_customer_order_data(self):
...@@ -44,10 +63,15 @@ class UserCustomerDataAdaptor: ...@@ -44,10 +63,15 @@ class UserCustomerDataAdaptor:
product_df = pd.DataFrame(list(data), columns=['fund_id', 'fund_name', 'freq', 'substrategy']) product_df = pd.DataFrame(list(data), columns=['fund_id', 'fund_name', 'freq', 'substrategy'])
user_customer_order_df = order_df.set_index('fund_id').join(product_df.set_index('fund_id')).reset_index() user_customer_order_df = order_df.set_index('fund_id').join(product_df.set_index('fund_id')).reset_index()
self.start_date = user_customer_order_df["confirm_share_date"].min()
return user_customer_order_df return user_customer_order_df
# 获取客户持有的基金净值数据 # 获取客户持有的基金净值数据
def get_customer_fund_nav_data(self): def get_customer_fund_nav_data(self):
now_date = datetime.datetime.now().strftime("%Y%m%d")
# trade_date_df = self.get_trade_cal(str(self.start_date).replace("-", ""), now_date)
trade_date_df = self.get_trade_cal("20000101", now_date)
all_fund_nav = pd.DataFrame(index=trade_date_df["datetime"])
for cur_fund_id in self.user_customer_order_df["fund_id"].unique(): for cur_fund_id in self.user_customer_order_df["fund_id"].unique():
# 对应基金净值 # 对应基金净值
...@@ -56,20 +80,40 @@ class UserCustomerDataAdaptor: ...@@ -56,20 +80,40 @@ class UserCustomerDataAdaptor:
data = cur.fetchall() data = cur.fetchall()
cur_fund_nav_df = pd.DataFrame(list(data), columns=['price_date', 'nav', 'cnav']) cur_fund_nav_df = pd.DataFrame(list(data), columns=['price_date', 'nav', 'cnav'])
# 对应基金分红 # # 对应基金分红
sql = """select distinct `distribute_date`, `distribution` from `fund_distribution` where `fund_id`='{}' and `distribute_type`='1' order by `distribute_date` ASC""".format( # sql = """select distinct `distribute_date`, `distribution` from `fund_distribution` where `fund_id`='{}' and `distribute_type`='1' order by `distribute_date` ASC""".format(
cur_fund_id) # cur_fund_id)
cur = tamp_product_session.execute(sql) # cur = tamp_product_session.execute(sql)
data = cur.fetchall() # data = cur.fetchall()
cur_fund_distribution_df = pd.DataFrame(list(data), columns=['price_date', 'distribution']) # cur_fund_distribution_df = pd.DataFrame(list(data), columns=['price_date', 'distribution'])
cur_fund_nav_df["price_date"] = pd.to_datetime(cur_fund_nav_df["price_date"])
cur_fund_nav_df.set_index("price_date", inplace=True)
all_fund_nav[cur_fund_id] = cur_fund_nav_df["cnav"]
return all_fund_nav
print(cur_fund_id)
return
# 获取客户对比指数净值数据 # 获取客户对比指数净值数据
def get_customer_index_nav_data(self, index_id): def get_customer_index_nav_data(self, index_id="IN0000007M"):
pass
sql = "select distinct price_date,close from fund_market_indexes where index_id='{}' order by price_date ASC".format(index_id)
cur = tamp_product_session.execute(sql)
data = cur.fetchall()
index_df = pd.DataFrame(list(data), columns=['price_date', 'index'])
index_df["price_date"] = pd.to_datetime(index_df["price_date"])
index_df.set_index("price_date", inplace=True)
self.fund_nav_total["index"] = index_df["index"]
return index_df
# 分组合计算
def group_operate(self):
for folio in self.user_customer_order_df["folio_name"].unique():
cur_folio_order_df = self.user_customer_order_df[self.user_customer_order_df["folio_name"] == folio]
fund_id_list = list(self.user_customer_order_df["fund_id"].unique())
fund_id_list.append("index")
cur_folio_nav_df = self.fund_nav_total[fund_id_list]
continue
# 组合收益
def combine_ratio(self):
pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment