Commit 1f273295 authored by pengxiong@wealthgrow.cn's avatar pengxiong@wealthgrow.cn

Merge remote-tracking branch 'origin/dev' into dev

parents e9c3018a 2c4e102c
...@@ -6,14 +6,12 @@ ...@@ -6,14 +6,12 @@
# @Email : acepengxiong@163.com # @Email : acepengxiong@163.com
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
from sqlalchemy.ext.declarative import declarative_base, declared_attr from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base() Base = declarative_base()
metadata = Base.metadata
class BaseModel(): class BaseModel():
""".""" """."""
__abstract__ = True
def __init__(self): def __init__(self):
pass pass
......
This diff is collapsed.
This diff is collapsed.
...@@ -12,19 +12,23 @@ from sqlalchemy import and_ ...@@ -12,19 +12,23 @@ from sqlalchemy import and_
import tushare as ts import tushare as ts
import datetime 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:
user_id = "" user_id = ""
customer_id = "" customer_id = ""
start_date = "" start_date = ""
end_date = ""
group_data = {} group_data = {}
def __init__(self, user_id, customer_id): def __init__(self, user_id, customer_id, end_date=str(datetime.date.today())):
self.user_id = user_id self.user_id = user_id
self.customer_id = customer_id self.customer_id = customer_id
p_end_date = pd.to_datetime(end_date).date()
p_end_date = datetime.date(year=p_end_date.year, month=p_end_date.month, day=1) - datetime.timedelta(days=1)
self.end_date = pd.to_datetime(str(p_end_date))
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.fund_nav_total = self.get_customer_fund_nav_data()
self.get_customer_index_nav_data() self.get_customer_index_nav_data()
...@@ -69,7 +73,6 @@ class UserCustomerDataAdaptor: ...@@ -69,7 +73,6 @@ class UserCustomerDataAdaptor:
# 获取客户持有的基金净值数据 # 获取客户持有的基金净值数据
def get_customer_fund_nav_data(self): def get_customer_fund_nav_data(self):
now_date = datetime.datetime.now().strftime("%Y%m%d") 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) trade_date_df = self.get_trade_cal("20000101", now_date)
all_fund_nav = pd.DataFrame(index=trade_date_df["datetime"]) all_fund_nav = pd.DataFrame(index=trade_date_df["datetime"])
...@@ -88,9 +91,10 @@ class UserCustomerDataAdaptor: ...@@ -88,9 +91,10 @@ class UserCustomerDataAdaptor:
# 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["price_date"] = pd.to_datetime(cur_fund_nav_df["price_date"])
cur_fund_nav_df.set_index("price_date", inplace=True) cur_fund_nav_df.set_index("price_date", inplace=True)
all_fund_nav[cur_fund_id] = cur_fund_nav_df["cnav"] all_fund_nav[cur_fund_id] = cur_fund_nav_df["cnav"]
all_fund_nav = all_fund_nav[all_fund_nav.index <= self.end_date]
return all_fund_nav return all_fund_nav
# 获取客户对比指数净值数据 # 获取客户对比指数净值数据
...@@ -114,6 +118,34 @@ class UserCustomerDataAdaptor: ...@@ -114,6 +118,34 @@ class UserCustomerDataAdaptor:
fund_id_list = list(self.user_customer_order_df["fund_id"].unique()) fund_id_list = list(self.user_customer_order_df["fund_id"].unique())
fund_id_list.append("index") fund_id_list.append("index")
cur_folio_nav_df = self.fund_nav_total[fund_id_list] cur_folio_nav_df = self.fund_nav_total[fund_id_list]
self.signal_folio_operate(folio, cur_folio_order_df, cur_folio_nav_df)
continue continue
# 单个组合数据操作
def signal_folio_operate(self, p_folio, p_order_df, p_nav_df):
start_date = pd.to_datetime(p_order_df["confirm_share_date"].min())
nav_df = p_nav_df[p_nav_df.index >= start_date].copy()
for index, row in p_order_df.iterrows():
cur_fund_id = str(row["fund_id"])
confirm_share_date = pd.to_datetime(row["confirm_share_date"])
if cur_fund_id+"_amount" not in nav_df:
nav_df[cur_fund_id + "_profit"] = (nav_df[cur_fund_id].dropna() - nav_df[cur_fund_id].dropna().shift(1))
nav_df[cur_fund_id+"_amount"] = 0
nav_df[cur_fund_id + "_earn"] = 0
nav_df[cur_fund_id + "_share"] = 0
# buy
if row['order_type'] == 1:
nav_df.loc[confirm_share_date:, cur_fund_id + "_amount"] += row["confirm_amount"]
nav_df.loc[confirm_share_date:, cur_fund_id + "_share"] += row["confirm_share"]
# sell
elif row['order_type'] == 2:
nav_df.loc[confirm_share_date:, cur_fund_id + "_amount"] -= row["confirm_amount"]
nav_df.loc[confirm_share_date:, cur_fund_id + "_share"] -= row["confirm_share"]
nav_df[cur_fund_id + "_earn"] = nav_df[cur_fund_id + "_profit"] * nav_df[cur_fund_id + "_share"]
self.group_data[p_folio] = {"basic_data": nav_df}
return nav_df
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/11/23 15:29
# @Author : Jie. Z
# @Email : zhaojiestudy@163.com
# @File : result_service.py
# @Software: PyCharm
import pandas as pd
import numpy as np
import datetime
from app.service.data_service import UserCustomerDataAdaptor
class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
def __init__(self, user_id, customer_id, end_date=str(datetime.date.today())):
UserCustomerDataAdaptor.__init__(user_id, customer_id, end_date)
# 综述数据
def get_total_data(self):
pass
# 组合数据
def get_group_data(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