Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
A
alpha-mind
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.李
alpha-mind
Commits
7f7d2df6
Commit
7f7d2df6
authored
Nov 14, 2020
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FIX: wrong calculation of returns
parent
c14a3881
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
357 additions
and
228 deletions
+357
-228
sqlengine_rl.py
alphamind/data/engines/sqlengine/sqlengine_rl.py
+54
-45
universe.py
alphamind/data/engines/universe.py
+3
-1
Example 1 - Factor IC analysis.ipynb
notebooks/Example 1 - Factor IC analysis.ipynb
+77
-23
Example 10 - Quadratic Optimizer Comparison with CVXOPT.ipynb
...ple 10 - Quadratic Optimizer Comparison with CVXOPT.ipynb
+169
-127
Example 11 - Long Short Strategy Model.ipynb
notebooks/Example 11 - Long Short Strategy Model.ipynb
+54
-32
No files found.
alphamind/data/engines/sqlengine/sqlengine_rl.py
View file @
7f7d2df6
...
...
@@ -90,7 +90,8 @@ macro_styles = ['COUNTRY']
total_risk_factors
=
risk_styles
+
industry_styles
+
macro_styles
_map_index_codes
=
{
300
:
"2070000060"
300
:
"2070000060"
,
905
:
"2070000187"
,
}
...
...
@@ -128,8 +129,8 @@ class SqlEngine:
def
_create_stats
(
self
,
df
,
horizon
,
offset
):
df
.
set_index
(
"trade_date"
,
inplace
=
True
)
df
[
"dx"
]
=
np
.
log
(
1.
+
df
[
"chgPct"
])
df
=
df
.
groupby
(
"code"
)
.
rolling
(
window
=
horizon
+
1
)[
'dx'
]
.
sum
()
.
shift
(
-
(
offset
+
1
))
.
dropna
()
.
reset_index
()
df
[
"dx"
]
=
np
.
log
(
1.
+
df
[
"chgPct"
]
/
100.
)
df
=
df
.
groupby
(
"code"
)
.
rolling
(
window
=
horizon
+
1
)[
'dx'
]
.
sum
()
.
groupby
(
level
=
0
)
.
shift
(
-
(
horizon
+
offset
+
1
))
.
dropna
()
.
reset_index
()
return
df
def
fetch_dx_return
(
self
,
...
...
@@ -271,6 +272,7 @@ class SqlEngine:
df
=
pd
.
read_sql
(
query
,
self
.
session
.
bind
)
.
dropna
()
df
=
self
.
_create_stats
(
df
,
horizon
,
offset
)
df
[
"trade_date"
]
=
pd
.
to_datetime
(
df
[
"trade_date"
])
if
dates
:
df
=
df
[
df
.
trade_date
.
isin
(
dates
)]
...
...
@@ -412,6 +414,7 @@ class SqlEngine:
res
[
'chgPct'
]
=
df
.
chgPct
res
[
'secShortName'
]
=
df
[
'secShortName'
]
res
=
res
.
reset_index
()
res
[
"trade_date"
]
=
pd
.
to_datetime
(
res
[
"trade_date"
])
return
pd
.
merge
(
res
,
universe_df
[[
'trade_date'
,
'code'
]],
how
=
'inner'
)
.
drop_duplicates
(
[
'trade_date'
,
'code'
])
...
...
@@ -487,7 +490,9 @@ class SqlEngine:
)
)
.
distinct
()
return
pd
.
read_sql
(
query
,
self
.
session
.
bind
)
df
=
pd
.
read_sql
(
query
,
self
.
session
.
bind
)
df
[
"trade_date"
]
=
pd
.
to_datetime
(
df
[
"trade_date"
])
return
df
def
fetch_risk_model
(
self
,
ref_date
:
str
,
...
...
@@ -561,6 +566,7 @@ class SqlEngine:
cond
)
risk_cov
=
pd
.
read_sql
(
query
,
self
.
engine
)
.
sort_values
([
'trade_date'
,
'FactorID'
])
risk_cov
[
"trade_date"
]
=
pd
.
to_datetime
(
risk_cov
[
"trade_date"
])
if
not
excluded
:
excluded
=
[]
...
...
@@ -591,6 +597,7 @@ class SqlEngine:
.
distinct
()
risk_exp
=
pd
.
read_sql
(
query
,
self
.
engine
)
.
sort_values
([
'trade_date'
,
'code'
])
.
dropna
()
risk_exp
[
"trade_date"
]
=
pd
.
to_datetime
(
risk_exp
[
"trade_date"
])
if
not
model_type
:
return
risk_cov
,
risk_exp
...
...
@@ -711,7 +718,9 @@ class SqlEngine:
IndexComponent
.
indexCode
==
benchmark
,
)
)
.
distinct
()
return
pd
.
read_sql
(
query
,
self
.
engine
)
df
=
pd
.
read_sql
(
query
,
self
.
engine
)
df
[
"trade_date"
]
=
pd
.
to_datetime
(
df
[
"trade_date"
])
return
df
def
fetch_data
(
self
,
ref_date
:
str
,
...
...
@@ -803,7 +812,7 @@ if __name__ == "__main__":
sql_engine
=
SqlEngine
(
db_url
=
db_url
)
universe
=
Universe
(
"hs300"
)
start_date
=
'2020-01-01'
end_date
=
'2020-0
4
-21'
end_date
=
'2020-0
2
-21'
benchmark
=
300
factors
=
[
"EMA5D"
,
"EMV6D"
]
ref_dates
=
makeSchedule
(
start_date
,
end_date
,
"10b"
,
'china.sse'
)
...
...
@@ -815,45 +824,45 @@ if __name__ == "__main__":
# print(df)
# df = sql_engine.fetch_dx_return("2020-10-09", codes=["2010031963"])
# print(df)
df
=
sql_engine
.
fetch_dx_return_range
(
universe
,
dates
=
ref_dates
,
horizon
=
9
)
print
(
df
)
df
=
sql_engine
.
fetch_dx_return_index
(
"2020-10-09"
,
index_code
=
benchmark
)
print
(
df
)
df
=
sql_engine
.
fetch_dx_return_index_range
(
start_date
=
start_date
,
end_date
=
end_date
,
index_code
=
benchmark
)
print
(
df
)
df
=
sql_engine
.
fetch_benchmark
(
"2020-10-09"
,
benchmark
=
benchmark
)
print
(
df
)
df
=
sql_engine
.
fetch_benchmark_range
(
start_date
=
start_date
,
end_date
=
end_date
,
benchmark
=
benchmark
)
print
(
df
)
df
=
sql_engine
.
fetch_industry
(
ref_date
=
"2020-10-09"
,
codes
=
[
"2010031963"
])
print
(
df
)
df
=
sql_engine
.
fetch_industry_matrix
(
ref_date
=
"2020-10-09"
,
codes
=
[
"2010031963"
])
print
(
df
)
df
=
sql_engine
.
fetch_industry_matrix_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
)
print
(
df
)
df
=
sql_engine
.
fetch_industry_range
(
start_date
=
start_date
,
end_date
=
end_date
,
universe
=
Universe
(
"hs300"
))
print
(
df
)
df
=
sql_engine
.
fetch_risk_model
(
"2020-02-21"
,
codes
=
[
"2010031963"
])
print
(
df
)
df
=
sql_engine
.
fetch_risk_model
(
"2020-02-21"
,
codes
=
[
"2010031963"
],
model_type
=
"factor"
)
print
(
df
)
df
=
sql_engine
.
fetch_risk_model_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
)
print
(
df
)
df
=
sql_engine
.
fetch_risk_model_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
,
model_type
=
"factor"
)
df
=
sql_engine
.
fetch_dx_return_range
(
universe
,
dates
=
ref_dates
,
horizon
=
9
,
offset
=
1
)
print
(
df
)
df
=
sql_engine
.
fetch_data
(
"2020-02-11"
,
factors
=
factors
,
codes
=
[
"2010031963"
],
benchmark
=
300
)
print
(
df
)
df
=
sql_engine
.
fetch_data_range
(
universe
,
factors
=
factors
,
start_date
=
start_date
,
end_date
=
end_date
,
benchmark
=
300
)
# df = sql_engine.fetch_dx_return_index("2020-10-09", index_code=benchmark)
# print(df)
df
=
sql_engine
.
fetch_dx_return_index_range
(
start_date
=
start_date
,
end_date
=
end_date
,
index_code
=
benchmark
,
horizon
=
9
,
offset
=
1
)
print
(
df
)
# df = sql_engine.fetch_benchmark("2020-10-09", benchmark=benchmark)
# print(df)
# df = sql_engine.fetch_benchmark_range(start_date=start_date, end_date=end_date, benchmark=benchmark)
# print(df)
# df = sql_engine.fetch_industry(ref_date="2020-10-09", codes=["2010031963"])
# print(df)
# df = sql_engine.fetch_industry_matrix(ref_date="2020-10-09", codes=["2010031963"])
# print(df)
# df = sql_engine.fetch_industry_matrix_range(universe=universe,
# start_date=start_date,
# end_date=end_date)
# print(df)
# df = sql_engine.fetch_industry_range(start_date=start_date, end_date=end_date, universe=Universe("hs300"))
# print(df)
# df = sql_engine.fetch_risk_model("2020-02-21", codes=["2010031963"])
# print(df)
# df = sql_engine.fetch_risk_model("2020-02-21", codes=["2010031963"], model_type="factor")
# print(df)
# df = sql_engine.fetch_risk_model_range(universe=universe,
# start_date=start_date,
# end_date=end_date)
# print(df)
# df = sql_engine.fetch_risk_model_range(universe=universe,
# start_date=start_date,
# end_date=end_date,
# model_type="factor")
# print(df)
# df = sql_engine.fetch_data("2020-02-11", factors=factors, codes=["2010031963"], benchmark=300)
# print(df)
# df = sql_engine.fetch_data_range(universe,
# factors=factors,
# start_date=start_date,
# end_date=end_date,
# benchmark=benchmark)
# print(df)
alphamind/data/engines/universe.py
View file @
7f7d2df6
...
...
@@ -57,7 +57,9 @@ class BaseUniverse(metaclass=abc.ABCMeta):
*
more_conditions
)
)
.
order_by
(
UniverseTable
.
trade_date
,
UniverseTable
.
code
)
return
pd
.
read_sql
(
query
,
engine
.
engine
)
df
=
pd
.
read_sql
(
query
,
engine
.
engine
)
df
[
"trade_date"
]
=
pd
.
to_datetime
(
df
[
"trade_date"
])
return
df
def
_query_statements
(
self
,
start_date
:
str
=
None
,
end_date
:
str
=
None
,
dates
=
None
):
return
and_
(
...
...
notebooks/Example 1 - Factor IC analysis.ipynb
View file @
7f7d2df6
This diff is collapsed.
Click to expand it.
notebooks/Example 10 - Quadratic Optimizer Comparison with CVXOPT.ipynb
View file @
7f7d2df6
This diff is collapsed.
Click to expand it.
notebooks/Example 11 - Long Short Strategy Model.ipynb
View file @
7f7d2df6
This diff is collapsed.
Click to expand it.
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