Commit e3b8c8f7 authored by Dr.李's avatar Dr.李

update universe

parent b16b4131
...@@ -208,7 +208,7 @@ if __name__ == '__main__': ...@@ -208,7 +208,7 @@ if __name__ == '__main__':
import datetime as dt import datetime as dt
universe = Universe('zz500', ['zz500'], filter_cond=(Uqer.BLEV >= 0.1) & (Uqer.BLEV <= 0.1)) universe = Universe('zz500', ['ashare'], filter_cond=(Uqer.BLEV >= 0.) & (Uqer.BLEV <= 0.1), include_universe=['hs300'])
engine = SqlEngine(db_url) engine = SqlEngine(db_url)
ref_date = '2017-07-04' ref_date = '2017-07-04'
......
...@@ -7,6 +7,7 @@ Created on 2017-7-7 ...@@ -7,6 +7,7 @@ Created on 2017-7-7
from typing import Iterable from typing import Iterable
from sqlalchemy import and_ from sqlalchemy import and_
from sqlalchemy import or_
from sqlalchemy import select from sqlalchemy import select
from alphamind.data.dbmodel.models import Uqer from alphamind.data.dbmodel.models import Uqer
from alphamind.data.dbmodel.models import Universe as UniverseTable from alphamind.data.dbmodel.models import Universe as UniverseTable
...@@ -16,13 +17,15 @@ class Universe(object): ...@@ -16,13 +17,15 @@ class Universe(object):
def __init__(self, def __init__(self,
name, name,
base_universe: Iterable[str]=None,
filter_cond=None,
include_universe: Iterable[str]=None, include_universe: Iterable[str]=None,
exclude_universe: Iterable[str]=None, exclude_universe: Iterable[str]=None,
include_codes: Iterable[str]=None, include_codes: Iterable[str]=None,
exclude_codes: Iterable[str]=None, exclude_codes: Iterable[str]=None):
filter_cond=None):
self.name = name self.name = name
self.base_universe = base_universe
self.include_universe = include_universe self.include_universe = include_universe
self.exclude_universe = exclude_universe self.exclude_universe = exclude_universe
self.include_codes = include_codes self.include_codes = include_codes
...@@ -32,31 +35,40 @@ class Universe(object): ...@@ -32,31 +35,40 @@ class Universe(object):
def query(self, ref_date): def query(self, ref_date):
query = select([UniverseTable.Code]).distinct() query = select([UniverseTable.Code]).distinct()
all_conditions = [UniverseTable.Date == ref_date] all_and_conditions = []
if self.include_universe:
univ_in = UniverseTable.universe.in_(self.include_universe) univ_in = UniverseTable.universe.in_(self.base_universe)
all_conditions.append(univ_in) all_and_conditions.append(univ_in)
if self.exclude_universe: if self.exclude_universe:
univ_out = UniverseTable.universe.notin_(self.exclude_universe) univ_out = UniverseTable.universe.notin_(self.exclude_universe)
all_conditions.append(univ_out) all_and_conditions.append(univ_out)
if self.include_codes:
codes_in = UniverseTable.Code.in_(self.include_codes)
all_conditions.append(codes_in)
if self.exclude_codes: if self.exclude_codes:
codes_out = UniverseTable.Code.notin_(self.exclude_codes) codes_out = UniverseTable.Code.notin_(self.exclude_codes)
all_conditions.append(codes_out) all_and_conditions.append(codes_out)
all_or_conditions = []
if self.include_universe:
univ_in = UniverseTable.universe.in_(self.include_universe)
all_or_conditions.append(univ_in)
if self.include_codes:
codes_in = UniverseTable.Code.in_(self.include_codes)
all_or_conditions.append(codes_in)
if self.filter_cond is not None: if self.filter_cond is not None:
all_conditions.extend([self.filter_cond, all_and_conditions.extend([self.filter_cond])
UniverseTable.Code == Uqer.Code,
UniverseTable.Date == Uqer.Date])
query = query.where( query = query.where(
and_( and_(
*all_conditions UniverseTable.Date == ref_date,
UniverseTable.Code == Uqer.Code,
UniverseTable.Date == Uqer.Date,
or_(
and_(*all_and_conditions),
*all_or_conditions
)
) )
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment