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
fdb2e572
Commit
fdb2e572
authored
Nov 21, 2020
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FEATURE: update sqlengine
parent
38c1a6a9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
63 additions
and
28 deletions
+63
-28
sqlengine_rl.py
alphamind/data/engines/sqlengine/sqlengine_rl.py
+63
-28
No files found.
alphamind/data/engines/sqlengine/sqlengine_rl.py
View file @
fdb2e572
...
...
@@ -127,10 +127,15 @@ class SqlEngine:
db_session
=
orm
.
sessionmaker
(
bind
=
self
.
_engine
)
return
db_session
()
def
_create_stats
(
self
,
df
,
horizon
,
offset
):
def
_create_stats
(
self
,
df
,
horizon
,
offset
,
no_code
=
False
):
df
[
"trade_date"
]
=
pd
.
to_datetime
(
df
[
"trade_date"
])
df
.
set_index
(
"trade_date"
,
inplace
=
True
)
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
()
if
not
no_code
:
df
=
df
.
groupby
(
"code"
)
.
rolling
(
window
=
horizon
+
1
)[
'dx'
]
.
sum
()
\
.
groupby
(
level
=
0
)
.
shift
(
-
(
horizon
+
offset
+
1
))
.
dropna
()
.
reset_index
()
else
:
df
=
df
.
rolling
(
window
=
horizon
+
1
)[
'dx'
]
.
sum
()
.
shift
(
-
(
horizon
+
offset
+
1
))
.
dropna
()
.
reset_index
()
return
df
def
fetch_dx_return
(
self
,
...
...
@@ -141,7 +146,8 @@ class SqlEngine:
offset
:
int
=
0
,
neutralized_risks
:
list
=
None
,
pre_process
=
None
,
post_process
=
None
)
->
pd
.
DataFrame
:
post_process
=
None
,
benchmark
:
int
=
None
)
->
pd
.
DataFrame
:
start_date
=
ref_date
if
not
expiry_date
:
...
...
@@ -164,6 +170,20 @@ class SqlEngine:
df
=
self
.
_create_stats
(
df
,
horizon
,
offset
)
df
=
df
[
df
.
trade_date
==
ref_date
]
if
benchmark
:
benchmark
=
_map_index_codes
[
benchmark
]
query
=
select
([
IndexMarket
.
trade_date
,
IndexMarket
.
chgPct
.
label
(
"chgPct"
)])
.
where
(
and_
(
IndexMarket
.
trade_date
.
between
(
start_date
,
end_date
),
IndexMarket
.
indexCode
==
benchmark
,
IndexMarket
.
flag
==
1
)
)
df2
=
pd
.
read_sql
(
query
,
self
.
session
.
bind
)
.
dropna
()
df2
=
self
.
_create_stats
(
df2
,
horizon
,
offset
,
no_code
=
True
)
ind_ret
=
df2
[
df2
.
trade_date
==
ref_date
][
'dx'
]
.
values
[
0
]
df
[
'dx'
]
=
df
[
'dx'
]
-
ind_ret
if
neutralized_risks
:
_
,
risk_exp
=
self
.
fetch_risk_model
(
ref_date
,
codes
)
df
=
pd
.
merge
(
df
,
risk_exp
,
on
=
'code'
)
.
dropna
()
...
...
@@ -235,11 +255,26 @@ class SqlEngine:
df2
=
self
.
fetch_codes_range
(
universe
,
start_date
,
end_date
,
dates
)
df2
[
"trade_date"
]
=
pd
.
to_datetime
(
df2
[
"trade_date"
])
df
=
pd
.
merge
(
df1
,
df2
,
on
=
[
"trade_date"
,
"code"
])
df
=
df
.
set_index
(
"trade_date"
)
if
benchmark
:
benchmark
=
_map_index_codes
[
benchmark
]
query
=
select
([
IndexMarket
.
trade_date
,
IndexMarket
.
chgPct
.
label
(
"chgPct"
)])
.
where
(
and_
(
IndexMarket
.
trade_date
.
between
(
start_date
,
end_date
),
IndexMarket
.
indexCode
==
benchmark
,
IndexMarket
.
flag
==
1
)
)
df2
=
pd
.
read_sql
(
query
,
self
.
session
.
bind
)
.
dropna
()
df2
=
self
.
_create_stats
(
df2
,
horizon
,
offset
,
no_code
=
True
)
.
set_index
(
"trade_date"
)
df
[
'dx'
]
=
df
[
'dx'
]
.
values
-
df2
.
loc
[
df
.
index
][
'dx'
]
.
values
if
dates
:
df
=
df
[
df
.
trade_date
.
isin
(
dates
)]
df
=
df
[
df
.
index
.
isin
(
dates
)]
return
df
.
reset_index
(
drop
=
True
)
.
sort_values
([
'trade_date'
,
'code'
])
return
df
.
reset_index
()
.
sort_values
([
'trade_date'
,
'code'
])
def
fetch_dx_return_index_range
(
self
,
index_code
,
...
...
@@ -272,7 +307,6 @@ 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
)]
...
...
@@ -811,25 +845,27 @@ if __name__ == "__main__":
sql_engine
=
SqlEngine
(
db_url
=
db_url
)
universe
=
Universe
(
"hs300"
)
start_date
=
'2020-01-0
1
'
start_date
=
'2020-01-0
2
'
end_date
=
'2020-02-21'
frequency
=
"10b"
benchmark
=
300
factors
=
[
"EMA5D"
,
"EMV6D"
]
ref_dates
=
makeSchedule
(
start_date
,
end_date
,
"10b"
,
'china.sse'
)
ref_dates
=
makeSchedule
(
start_date
,
end_date
,
frequency
,
'china.sse'
)
print
(
ref_dates
)
# df = sql_engine.fetch_factor("2020-02-21", factors=factors, codes=["2010031963"])
# print(df)
# df = sql_engine.fetch_factor_range(universe=universe, start_date=start_date, end_date=end_date
, factors=factors)
#
print(df)
#
df = sql_engine.fetch_codes_range(start_date=start_date, end_date=end_date, universe=Universe("hs300"))
#
print(df)
# df = sql_engine.fetch_dx_return("2020-10-09", codes=["2010031963"])
df
=
sql_engine
.
fetch_factor_range
(
universe
=
universe
,
dates
=
ref_dates
,
factors
=
factors
)
print
(
df
)
df
=
sql_engine
.
fetch_codes_range
(
start_date
=
start_date
,
end_date
=
end_date
,
universe
=
Universe
(
"hs300"
))
print
(
df
)
# df = sql_engine.fetch_dx_return("2020-10-09", codes=["2010031963"]
, benchmark=benchmark
)
# print(df)
df
=
sql_engine
.
fetch_dx_return_range
(
universe
,
dates
=
ref_dates
,
horizon
=
9
,
offset
=
1
)
df
=
sql_engine
.
fetch_dx_return_range
(
universe
,
dates
=
ref_dates
,
horizon
=
9
,
offset
=
1
,
benchmark
=
benchmark
)
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
,
horizon
=
9
,
offset
=
1
)
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)
...
...
@@ -846,12 +882,12 @@ if __name__ == "__main__":
# 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
(
"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,
...
...
@@ -859,10 +895,9 @@ if __name__ == "__main__":
# 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)
df
=
sql_engine
.
fetch_data_range
(
universe
,
factors
=
factors
,
dates
=
ref_dates
,
benchmark
=
benchmark
)[
"factor"
]
print
(
df
)
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