Commit c0494dcc authored by Dr.李's avatar Dr.李

added something about risk attribution

parent 8b7a000b
......@@ -3,4 +3,7 @@ __pycache__
*.pyc
.virtual_documents
*.xlsx
.idea
\ No newline at end of file
.idea
*.docx
*.zip
*.pdf
\ No newline at end of file
This diff is collapsed.
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "a1fbf6c8-e22a-4d0d-b3d8-c6c54d60bce1",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
......@@ -3,11 +3,58 @@ import calendar
import sqlalchemy as sa
import pandas as pd
CONN = "mssql+pymssql://readdnds:reader%402021@121.37.138.1:14331/dnds"
MSSQL_CONN = "mssql+pymssql://readdnds:reader%402021@121.37.138.1:14331/dnds"
MYSQL_CONN = "mysql+pymysql://reader:Reader#2020@121.37.138.1:13316/vision_product"
def read_sql(query):
engine = sa.create_engine(CONN, connect_args={"charset": "GBK"})
RISK_STYLES = ['BETA',
'MOMENTUM',
'SIZE',
'EARNYILD',
'RESVOL',
'GROWTH',
'BTOP',
'LEVERAGE',
'LIQUIDTY',
'SIZENL']
INDUSTRY_STYLES = [
'Bank',
'RealEstate',
'Health',
'Transportation',
'Mining',
'NonFerMetal',
'HouseApp',
'LeiService',
'MachiEquip',
'BuildDeco',
'CommeTrade',
'CONMAT',
'Auto',
'Textile',
'FoodBever',
'Electronics',
'Computer',
'LightIndus',
'Utilities',
'Telecom',
'AgriForest',
'CHEM',
'Media',
'IronSteel',
'NonBankFinan',
'ELECEQP',
'AERODEF',
'Conglomerates'
]
def read_sql(query, source="mssql"):
if source == "mssql":
engine = sa.create_engine(MSSQL_CONN, connect_args={"charset": "GBK"})
elif source == "mysql":
engine = sa.create_engine(MYSQL_CONN)
return pd.read_sql(query, con=engine)
......@@ -27,7 +74,7 @@ def nearest_report_date(date):
def fd_alive_funds(trade_dt, class_code=None):
if class_code:
query = f"""
select SECODE from TQ_FD_TYPE
select SECODE FROM TQ_FD_TYPE
WHERE
ISVALID = 1 AND
TYPESTYLE = '{str(class_code)[0]}' AND
......@@ -38,7 +85,7 @@ def fd_alive_funds(trade_dt, class_code=None):
"""
else:
query = f"""
select SECODE from TQ_FD_TYPE
select SECODE FROM TQ_FD_TYPE
WHERE
ISVALID = 1 AND
BEGINDATE <= '{trade_dt}' AND
......@@ -64,7 +111,7 @@ def fd_basicinfo(security_ids=None, trade_dt=None):
if sec_id_strs:
query = f"""
select SECODE as SECURITYID, FDNAME, SNAMECOMP, FSYMBOL, FDNATURE, INVESTSTYLE from TQ_FD_BASICINFO
select SECODE as SECURITYID, FDNAME, SNAMECOMP, FSYMBOL, FDNATURE, INVESTSTYLE FROM TQ_FD_BASICINFO
WHERE
ISVALID = 1 AND
SECODE in ({sec_id_strs}) AND
......@@ -72,7 +119,7 @@ def fd_basicinfo(security_ids=None, trade_dt=None):
"""
else:
query = f"""
select SECODE as SECURITYID, FDNAME, SNAMECOMP, FSYMBOL, FDNATURE, INVESTSTYLE from TQ_FD_BASICINFO
select SECODE as SECURITYID, FDNAME, SNAMECOMP, FSYMBOL, FDNATURE, INVESTSTYLE FROM TQ_FD_BASICINFO
WHERE
ISVALID = 1 AND
(LIQUENDDATE >= '{trade_dt}' or LIQUENDDATE = '19000101')
......@@ -117,7 +164,7 @@ def fd_hshkiport(security_ids, report_dates_begin, report_dates_end=None):
if report_dates_end:
query = f"""
select SECODE as SECURITYID, INDCLASSCODE, INDUSTRYCODE, INDUSTRYNAME, REPORTDATE, MVALUE, ACCNETMKTCAP from TQ_FD_HSHKIPORT
select SECODE as SECURITYID, INDCLASSCODE, INDUSTRYCODE, INDUSTRYNAME, REPORTDATE, MVALUE, ACCNETMKTCAP FROM TQ_FD_HSHKIPORT
WHERE
REPORTDATE >= '{report_dates_begin}' AND
REPORTDATE <= '{report_dates_end}' AND
......@@ -127,7 +174,7 @@ def fd_hshkiport(security_ids, report_dates_begin, report_dates_end=None):
"""
else:
query = f"""
select SECODE as SECURITYID, INDCLASSCODE, INDUSTRYCODE, INDUSTRYNAME, REPORTDATE, MVALUE, ACCNETMKTCAP from TQ_FD_HSHKIPORT
select SECODE as SECURITYID, INDCLASSCODE, INDUSTRYCODE, INDUSTRYNAME, REPORTDATE, MVALUE, ACCNETMKTCAP FROM TQ_FD_HSHKIPORT
WHERE
REPORTDATE >= '{report_dates_begin}' AND
ISVALID = 1 AND
......@@ -145,7 +192,7 @@ def fd_assetportfolio(security_ids, report_dates_begin, report_dates_end=None):
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
if report_dates_end:
query = f"""
SELECT SECODE as SECURITYID, REPORTDATE, BDRTO, CONVBDRTO, EQUITYINVERTO from TQ_FD_ASSETPORTFOLIO
SELECT SECODE as SECURITYID, REPORTDATE, BDRTO, CONVBDRTO, EQUITYINVERTO FROM TQ_FD_ASSETPORTFOLIO
WHERE
REPORTDATE >= '{report_dates_begin}' AND
REPORTDATE <= '{report_dates_end}' AND
......@@ -154,7 +201,7 @@ def fd_assetportfolio(security_ids, report_dates_begin, report_dates_end=None):
"""
else:
query = f"""
SELECT SECODE as SECURITYID, REPORTDATE, BDRTO, CONVBDRTO, EQUITYINVERTO from TQ_FD_ASSETPORTFOLIO
SELECT SECODE as SECURITYID, REPORTDATE, BDRTO, CONVBDRTO, EQUITYINVERTO FROM TQ_FD_ASSETPORTFOLIO
WHERE
REPORTDATE >= '{report_dates_begin}' AND
ISVALID = 1 AND
......@@ -168,12 +215,80 @@ def fd_qtfdnav(security_ids, trade_dt):
sec_id_strs = security_ids
else:
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
query = f"""
SELECT SECODE as SECURITYID, UNITNAV, UNITACCNAV, REPAIRUNITNAV, NAVGRTD FROM TQ_FD_DERIVEDN
WHERE
ENDDATE = '{trade_dt}' AND
ISVALID = 1 AND
SECODE in ({sec_id_strs})
"""
return read_sql(query).sort_values("SECURITYID")
def fd_skdetail(security_ids, trade_dt):
if isinstance(security_ids, str):
sec_id_strs = security_ids
else:
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
query = f"""
SELECT SECODE as SECURITYID, UNITNAV, UNITACCNAV, REPAIRUNITNAV, NAVGRTD from TQ_FD_DERIVEDN
SELECT SECODE as SECURITYID, SKCODE, SKNAME, HOLDMKTCAP, HOLDAMT, NAVRTO FROM TQ_FD_SKDETAIL
WHERE
ENDDATE = '{trade_dt}' AND
ISVALID = 1 AND
SECODE in ({sec_id_strs})
"""
return read_sql(query).sort_values("SECURITYID")
def _to_yyyy_mm_dd(trade_dt):
if len(trade_dt) == 10:
return trade_dt
else:
return f"{trade_dt[0:4]}-{trade_dt[4:6]}-{trade_dt[6:8]}"
def risk_exposure(security_ids, trade_dt):
if isinstance(security_ids, str):
sec_id_strs = security_ids
else:
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
query = f"""
SELECT * FROM risk_exposure
WHERE
trade_date = '{_to_yyyy_mm_dd(trade_dt)}' AND
is_verify = 1 AND
flag = 1 AND
security_code IN ({sec_id_strs})
"""
return read_sql(query, source="mysql").sort_values("security_code")
def risk_cov(trade_dt, model="short"):
query = f"""
SELECT * FROM risk_cov_{model}
WHERE
trade_date = '{_to_yyyy_mm_dd(trade_dt)}' AND
is_verify = 1 AND
flag = 1
"""
return read_sql(query, source="mysql").sort_values("FactorID")
def special_risk(security_ids, trade_dt, model="short"):
if isinstance(security_ids, str):
sec_id_strs = security_ids
else:
sec_id_strs = ",".join(["'" + s + "'" for s in security_ids])
query = f"""
SELECT trade_date, security_code, secShortName, symbol, SRISK FROM specific_risk_{model}
WHERE
trade_date = '{_to_yyyy_mm_dd(trade_dt)}' AND
is_verify = 1 AND
flag = 1 AND
security_code IN ({sec_id_strs})
"""
return read_sql(query, source="mysql").sort_values("security_code")
\ No newline at end of file
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