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
14c686dd
Commit
14c686dd
authored
Nov 14, 2020
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FEATURE: added factor range
parent
cbce5327
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
82 additions
and
6 deletions
+82
-6
sqlengine_rl.py
alphamind/data/engines/sqlengine/sqlengine_rl.py
+82
-6
No files found.
alphamind/data/engines/sqlengine/sqlengine_rl.py
View file @
14c686dd
...
...
@@ -239,7 +239,9 @@ class SqlEngine:
for
t
in
set
(
factor_cols
.
values
()):
if
t
.
__table__
.
name
not
in
joined_tables
:
big_table
=
outerjoin
(
big_table
,
t
,
and_
(
Market
.
trade_date
==
t
.
trade_date
,
Market
.
code
==
t
.
code
))
Market
.
code
==
t
.
code
,
Market
.
flag
==
1
,
t
.
flag
==
1
))
joined_tables
.
add
(
t
.
__table__
.
name
)
...
...
@@ -249,7 +251,8 @@ class SqlEngine:
Market
.
secShortName
.
label
(
"secShortName"
)]
+
list
(
factor_cols
.
keys
()))
\
.
select_from
(
big_table
)
.
where
(
and_
(
Market
.
trade_date
.
between
(
start_date
,
end_date
),
Market
.
code
.
in_
(
codes
)))
Market
.
code
.
in_
(
codes
),
Market
.
flag
==
1
))
df
=
pd
.
read_sql
(
query
,
self
.
engine
)
\
.
replace
([
-
np
.
inf
,
np
.
inf
],
np
.
nan
)
\
.
sort_values
([
'trade_date'
,
'code'
])
\
...
...
@@ -258,10 +261,83 @@ class SqlEngine:
res
[
'chgPct'
]
=
df
.
chgPct
res
[
'secShortName'
]
=
df
[
'secShortName'
]
res
.
index
=
pd
.
to_datetime
(
res
.
index
)
res
=
res
.
loc
[
ref_date
:
ref_date
,
:]
res
.
index
=
list
(
range
(
len
(
res
)))
return
res
def
fetch_factor_range
(
self
,
universe
:
Universe
,
factors
:
Union
[
Transformer
,
Iterable
[
object
]],
start_date
:
str
=
None
,
end_date
:
str
=
None
,
dates
:
Iterable
[
str
]
=
None
,
external_data
:
pd
.
DataFrame
=
None
,
used_factor_tables
=
None
)
->
pd
.
DataFrame
:
if
isinstance
(
factors
,
Transformer
):
transformer
=
factors
else
:
transformer
=
Transformer
(
factors
)
dependency
=
transformer
.
dependency
if
used_factor_tables
:
factor_cols
=
_map_factors
(
dependency
,
used_factor_tables
)
else
:
factor_cols
=
_map_factors
(
dependency
,
factor_tables
)
big_table
=
Market
joined_tables
=
set
()
joined_tables
.
add
(
Market
.
__table__
.
name
)
for
t
in
set
(
factor_cols
.
values
()):
if
t
.
__table__
.
name
not
in
joined_tables
:
if
dates
is
not
None
:
big_table
=
outerjoin
(
big_table
,
t
,
and_
(
Market
.
trade_date
==
t
.
trade_date
,
Market
.
code
==
t
.
code
,
Market
.
trade_date
.
in_
(
dates
),
Market
.
flag
==
1
,
t
.
flag
==
1
))
else
:
big_table
=
outerjoin
(
big_table
,
t
,
and_
(
Market
.
trade_date
==
t
.
trade_date
,
Market
.
code
==
t
.
code
,
Market
.
trade_date
.
between
(
start_date
,
end_date
),
Market
.
flag
==
1
,
t
.
flag
==
1
))
joined_tables
.
add
(
t
.
__table__
.
name
)
universe_df
=
universe
.
query
(
self
,
start_date
,
end_date
,
dates
)
query
=
select
(
[
Market
.
trade_date
,
Market
.
code
.
label
(
"code"
),
Market
.
chgPct
.
label
(
"chgPct"
),
Market
.
secShortName
.
label
(
"secShortName"
)]
+
list
(
factor_cols
.
keys
()))
\
.
select_from
(
big_table
)
.
where
(
and_
(
Market
.
code
.
in_
(
universe_df
.
code
.
unique
()
.
tolist
()),
Market
.
trade_date
.
in_
(
dates
)
if
dates
is
not
None
else
Market
.
trade_date
.
between
(
start_date
,
end_date
)
)
)
.
distinct
()
df
=
pd
.
read_sql
(
query
,
self
.
engine
)
.
replace
([
-
np
.
inf
,
np
.
inf
],
np
.
nan
)
if
external_data
is
not
None
:
df
=
pd
.
merge
(
df
,
external_data
,
on
=
[
'trade_date'
,
'code'
])
.
dropna
()
df
.
sort_values
([
'trade_date'
,
'code'
],
inplace
=
True
)
df
.
set_index
(
'trade_date'
,
inplace
=
True
)
res
=
transformer
.
transform
(
'code'
,
df
)
.
replace
([
-
np
.
inf
,
np
.
inf
],
np
.
nan
)
res
[
'chgPct'
]
=
df
.
chgPct
res
[
'secShortName'
]
=
df
[
'secShortName'
]
res
=
res
.
reset_index
()
return
pd
.
merge
(
res
,
universe_df
[[
'trade_date'
,
'code'
]],
how
=
'inner'
)
.
drop_duplicates
(
[
'trade_date'
,
'code'
])
def
fetch_industry
(
self
,
ref_date
:
str
,
codes
:
Iterable
[
int
]
=
None
,
...
...
@@ -451,10 +527,12 @@ if __name__ == "__main__":
sql_engine
=
SqlEngine
(
db_url
=
db_url
)
universe
=
Universe
(
"hs300"
)
start_date
=
'2020-0
9-29
'
end_date
=
'2020-
10-10
'
start_date
=
'2020-0
1-01
'
end_date
=
'2020-
02-21
'
df
=
sql_engine
.
fetch_factor
(
"2020-02-21"
,
factors
=
[
"BETA"
],
codes
=
[
"2010031963"
])
print
(
df
)
df
=
sql_engine
.
fetch_factor_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
,
factors
=
[
"BETA"
])
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"
])
...
...
@@ -471,8 +549,6 @@ if __name__ == "__main__":
print
(
df
)
df
=
sql_engine
.
fetch_risk_model
(
"2020-02-21"
,
codes
=
[
"2010031963"
],
model_type
=
"factor"
)
print
(
df
)
start_date
=
'2020-01-01'
end_date
=
'2020-02-21'
df
=
sql_engine
.
fetch_risk_model_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
)
...
...
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