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

fixed sql server bug

parent 97fd1291
...@@ -119,6 +119,11 @@ class SqlEngine(object): ...@@ -119,6 +119,11 @@ class SqlEngine(object):
self.session = None self.session = None
self.create_session() self.create_session()
if self.engine.name == 'mssql':
self.ln_func = func.log
else:
self.ln_func = func.ln
def create_session(self): def create_session(self):
db_session = orm.sessionmaker(bind=self.engine) db_session = orm.sessionmaker(bind=self.engine)
self.session = db_session() self.session = db_session()
...@@ -169,7 +174,7 @@ class SqlEngine(object): ...@@ -169,7 +174,7 @@ class SqlEngine(object):
else: else:
end_date = expiry_date end_date = expiry_date
query = select([DailyReturn.Code, func.sum(func.ln(1. + DailyReturn.d1)).label('dx')]).where( query = select([DailyReturn.Code, func.sum(self.ln_func(1. + DailyReturn.d1)).label('dx')]).where(
and_( and_(
DailyReturn.Date.between(start_date, end_date), DailyReturn.Date.between(start_date, end_date),
DailyReturn.Code.in_(codes) DailyReturn.Code.in_(codes)
...@@ -194,7 +199,7 @@ class SqlEngine(object): ...@@ -194,7 +199,7 @@ class SqlEngine(object):
q2 = universe.query_range(start_date, end_date).alias('temp_universe') q2 = universe.query_range(start_date, end_date).alias('temp_universe')
big_table = join(DailyReturn, q2, and_(DailyReturn.Date == q2.c.Date, DailyReturn.Code == q2.c.Code)) big_table = join(DailyReturn, q2, and_(DailyReturn.Date == q2.c.Date, DailyReturn.Code == q2.c.Code))
stats = func.sum(func.ln(1. + DailyReturn.d1)).over( stats = func.sum(self.ln_func(1. + DailyReturn.d1)).over(
partition_by=DailyReturn.Code, partition_by=DailyReturn.Code,
order_by=DailyReturn.Date, order_by=DailyReturn.Date,
rows=(0, horizon)).label('dx') rows=(0, horizon)).label('dx')
...@@ -374,6 +379,7 @@ class SqlEngine(object): ...@@ -374,6 +379,7 @@ class SqlEngine(object):
benchmark: int = None, benchmark: int = None,
risk_model: str = 'short') -> Dict[str, pd.DataFrame]: risk_model: str = 'short') -> Dict[str, pd.DataFrame]:
dates = sorted(dates)
total_data = {} total_data = {}
factor_data = self.fetch_factor_range(universe, factors, start_date, end_date, dates) factor_data = self.fetch_factor_range(universe, factors, start_date, end_date, dates)
...@@ -403,8 +409,6 @@ if __name__ == '__main__': ...@@ -403,8 +409,6 @@ if __name__ == '__main__':
ref_date = '2017-08-10' ref_date = '2017-08-10'
codes = engine.fetch_codes_range(universe, None, None, ['2017-01-01', '2017-08-10']) codes = engine.fetch_codes_range(universe, None, None, ['2017-01-01', '2017-08-10'])
data1 = engine.fetch_dx_return('2017-08-01', )
data2 = engine.fetch_dx_return_range(universe, '2017-08-01', '2017-08-10', ['2017-08-01', '2017-08-10']) data2 = engine.fetch_dx_return_range(universe, '2017-08-01', '2017-08-10', ['2017-08-01', '2017-08-10'])
print(codes) print(codes)
print(data) print(data2)
...@@ -19,7 +19,7 @@ n_bins = 5 ...@@ -19,7 +19,7 @@ n_bins = 5
factor_weights = np.array([1.]) factor_weights = np.array([1.])
freq = '1w' freq = '1d'
if freq == '1m': if freq == '1m':
horizon = 21 horizon = 21
......
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