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

fixed a sqlalchemy bug

parent 510f7c59
......@@ -10,7 +10,6 @@ from typing import List
from typing import Dict
from typing import Tuple
from typing import Union
import numpy as np
import pandas as pd
import sqlalchemy as sa
import sqlalchemy.orm as orm
......@@ -85,6 +84,8 @@ factor_tables = [FullFactor, Experimental]
DEFAULT_URL = 'postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha'
DAILY_RETURN_OFFSET = 0
def _map_risk_model_table(risk_model: str) -> tuple:
if risk_model == 'day':
......@@ -187,18 +188,25 @@ class SqlEngine(object):
start_date = ref_date
if not expiry_date:
end_date = advanceDateByCalendar('china.sse', ref_date, str(horizon) + 'b').strftime('%Y%m%d')
end_date = advanceDateByCalendar('china.sse', ref_date, str(horizon + DAILY_RETURN_OFFSET) + 'b').strftime('%Y%m%d')
else:
end_date = expiry_date
query = select([DailyReturn.code, func.sum(self.ln_func(1. + DailyReturn.d1)).label('dx')]).where(
stats = func.sum(self.ln_func(1. + DailyReturn.d1)).over(
partition_by=DailyReturn.code,
order_by=DailyReturn.trade_date,
rows=(DAILY_RETURN_OFFSET, horizon + DAILY_RETURN_OFFSET)).label('dx')
query = select([DailyReturn.trade_date, DailyReturn.code, stats]).where(
and_(
DailyReturn.trade_date.between(start_date, end_date),
DailyReturn.code.in_(codes)
)
).group_by(DailyReturn.code)
)
return pd.read_sql(query, self.session.bind)
df = pd.read_sql(query, self.session.bind).dropna()
df = df[df.trade_date == ref_date]
return df[['code', 'dx']]
def fetch_dx_return_range(self,
universe,
......@@ -211,7 +219,7 @@ class SqlEngine(object):
start_date = dates[0]
end_date = dates[-1]
end_date = advanceDateByCalendar('china.sse', end_date, str(horizon) + 'b').strftime('%Y-%m-%d')
end_date = advanceDateByCalendar('china.sse', end_date, str(horizon + DAILY_RETURN_OFFSET) + 'b').strftime('%Y-%m-%d')
cond = universe.query_range(start_date, end_date)
big_table = join(DailyReturn, UniverseTable,
......@@ -222,12 +230,12 @@ class SqlEngine(object):
stats = func.sum(self.ln_func(1. + DailyReturn.d1)).over(
partition_by=DailyReturn.code,
order_by=DailyReturn.trade_date,
rows=(0, horizon)).label('dx')
rows=(DAILY_RETURN_OFFSET, horizon + DAILY_RETURN_OFFSET)).label('dx')
query = select([DailyReturn.trade_date, DailyReturn.code, stats]) \
.select_from(big_table)
df = pd.read_sql(query, self.session.bind)
df = pd.read_sql(query, self.session.bind).dropna()
if dates:
df = df[df.trade_date.isin(dates)]
......
......@@ -6,6 +6,6 @@ scikit-learn >= 0.18.1
numba >= 0.33.0
scipy >= 0.19.0
simpleutils >= 0.1.0
sqlalchemy >= 1.1.9
sqlalchemy >= 1.1.14
psycopg2 >= 2.7.1
finance-python >= 0.5.7
\ No newline at end of file
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