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
9203f363
Commit
9203f363
authored
Jan 08, 2018
by
Yucheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add fetch_outright_status function
parent
b19af2d0
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
41 additions
and
4 deletions
+41
-4
sqlengine.py
alphamind/data/engines/sqlengine.py
+41
-4
No files found.
alphamind/data/engines/sqlengine.py
View file @
9203f363
...
...
@@ -33,6 +33,7 @@ from alphamind.data.dbmodel.models import Formulas
from
alphamind.data.dbmodel.models
import
DailyPortfoliosSchedule
from
alphamind.data.dbmodel.models
import
Performance
from
alphamind.data.dbmodel.models
import
Positions
from
alphamind.data.dbmodel.models
import
OutrightTmp
from
alphamind.data.transformer
import
Transformer
from
alphamind.model.loader
import
load_model
from
alphamind.formula.utilities
import
encode_formula
...
...
@@ -792,6 +793,44 @@ class SqlEngine(object):
index
=
False
,
dtype
=
{
'weight'
:
sa
.
types
.
JSON
})
def
fetch_outright_status
(
self
,
ref_date
:
str
):
table
=
OutrightTmp
t
=
select
([
table
.
trade_id
])
.
\
where
(
and_
(
table
.
trade_date
<=
ref_date
,
table
.
operation
==
'withdraw'
))
.
alias
(
't'
)
query
=
select
([
table
])
.
\
where
(
and_
(
table
.
trade_id
.
notin_
(
t
),
table
.
trade_date
<=
ref_date
))
df
=
pd
.
read_sql
(
query
,
engine
.
engine
)
.
set_index
(
'trade_id'
)
# calc total volume
df
[
'total_volume'
]
=
df
.
groupby
(
'trade_id'
)[
'volume'
]
.
transform
(
sum
)
# parse price
def
parse_price_rule
(
x
:
pd
.
Series
):
code
=
x
[
'code'
]
rule
=
x
[
'price_rule'
]
.
split
(
'@'
)
if
rule
[
0
]
in
[
'closePrice'
,
'openPrice'
]:
query
=
select
([
getattr
(
Market
,
rule
[
0
])])
.
\
where
(
and_
(
Market
.
code
==
code
,
Market
.
trade_date
==
rule
[
1
]))
data
=
pd
.
read_sql
(
query
,
engine
.
engine
)
price
=
data
.
values
[
0
][
0
]
elif
rule
[
0
]
==
'fixedPrice'
:
price
=
float
(
rule
[
1
])
else
:
raise
KeyError
(
'do not have rule for
%
s'
%
x
[
'price_rule'
])
return
price
df
[
'price'
]
=
df
.
apply
(
lambda
x
:
parse_price_rule
(
x
),
axis
=
1
)
df
.
drop
([
'remark'
,
'price_rule'
],
axis
=
1
,
inplace
=
True
)
# pivot portfolio volume
total_cols
=
df
.
columns
pivot_cols
=
[
'portfolio_name'
,
'volume'
]
tmp
=
df
[
pivot_cols
]
.
pivot
(
columns
=
'portfolio_name'
)
tmp
.
columns
=
tmp
.
columns
.
droplevel
(
0
)
res
=
df
[[
c
for
c
in
total_cols
if
c
not
in
pivot_cols
]]
.
drop_duplicates
()
.
join
(
tmp
)
.
reset_index
()
return
res
.
sort_values
([
'trade_id'
])
if
__name__
==
'__main__'
:
...
...
@@ -799,9 +838,7 @@ if __name__ == '__main__':
engine
=
SqlEngine
()
df
=
engine
.
fetch_factor_range
(
universe
,
[
'closePrice'
],
start_date
=
'2015-12-21'
,
end_date
=
'2017-12-25'
)
df
=
engine
.
fetch_outright_status
(
'2017-12-28'
)
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