Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
F
fof
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dr.李
fof
Commits
c0494dcc
Commit
c0494dcc
authored
Feb 03, 2022
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added something about risk attribution
parent
8b7a000b
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
594 additions
and
14 deletions
+594
-14
.gitignore
.gitignore
+4
-1
010 style attribution.ipynb
attribution/010 style attribution.ipynb
+429
-0
020 brison attribution.ipynb
attribution/020 brison attribution.ipynb
+33
-0
utility.py
fof/utility.py
+128
-13
No files found.
.gitignore
View file @
c0494dcc
...
...
@@ -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
attribution/010 style attribution.ipynb
0 → 100644
View file @
c0494dcc
This diff is collapsed.
Click to expand it.
attribution/020 brison attribution.ipynb
0 → 100644
View file @
c0494dcc
{
"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
}
fof/utility.py
View file @
c0494dcc
...
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment