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
65c88236
Commit
65c88236
authored
Aug 30, 2017
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more efficiently get data
parent
85b8d68d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
654 additions
and
61 deletions
+654
-61
models.py
alphamind/data/dbmodel/models.py
+564
-7
sqlengine.py
alphamind/data/engines/sqlengine.py
+82
-52
create_view.sql
scripts/create_view.sql
+8
-2
No files found.
alphamind/data/dbmodel/models.py
View file @
65c88236
...
...
@@ -5,10 +5,9 @@ Created on 2017-6-29
@author: cheng.li
"""
from
sqlalchemy
import
BigInteger
,
Column
,
DateTime
,
Float
,
Index
,
Integer
,
JSON
,
String
,
Text
,
text
from
sqlalchemy
import
BigInteger
,
Column
,
DateTime
,
Float
,
Index
,
Integer
,
JSON
,
String
,
Text
,
Table
from
sqlalchemy.ext.declarative
import
declarative_base
Base
=
declarative_base
()
metadata
=
Base
.
metadata
...
...
@@ -219,7 +218,8 @@ class Performance(Base):
__tablename__
=
'performance'
__table_args__
=
(
Index
(
'performance_type_industry_universe_portfolio_index'
,
'type'
,
'industry'
,
'universe'
,
'portfolio'
),
Index
(
'performance_Date_type_portfolio_industry_source_universe_uindex'
,
'trade_date'
,
'type'
,
'portfolio'
,
'industry'
,
'source'
,
'universe'
,
unique
=
True
)
Index
(
'performance_Date_type_portfolio_industry_source_universe_uindex'
,
'trade_date'
,
'type'
,
'portfolio'
,
'industry'
,
'source'
,
'universe'
,
unique
=
True
)
)
trade_date
=
Column
(
DateTime
,
primary_key
=
True
,
nullable
=
False
)
...
...
@@ -236,7 +236,8 @@ class Performance(Base):
class
Performance2
(
Base
):
__tablename__
=
'performance2'
__table_args__
=
(
Index
(
'performance2_uindex'
,
'trade_date'
,
'type'
,
'portfolio'
,
'industry'
,
'source'
,
'universe'
,
'benchmark'
,
unique
=
True
),
Index
(
'performance2_uindex'
,
'trade_date'
,
'type'
,
'portfolio'
,
'industry'
,
'source'
,
'universe'
,
'benchmark'
,
unique
=
True
),
Index
(
'performance2_index'
,
'type'
,
'industry'
,
'universe'
,
'portfolio'
)
)
...
...
@@ -553,7 +554,8 @@ class RiskReturn(Base):
class
RiskStat
(
Base
):
__tablename__
=
'risk_stats'
__table_args__
=
(
Index
(
'risk_stats_uindex'
,
'trade_date'
,
'type'
,
'portfolio'
,
'source'
,
'universe'
,
'benchmark'
,
'factor'
,
unique
=
True
),
Index
(
'risk_stats_uindex'
,
'trade_date'
,
'type'
,
'portfolio'
,
'source'
,
'universe'
,
'benchmark'
,
'factor'
,
unique
=
True
),
)
trade_date
=
Column
(
DateTime
,
primary_key
=
True
,
nullable
=
False
)
...
...
@@ -1120,9 +1122,564 @@ class Uqer(Base):
NLSIZE
=
Column
(
Float
(
53
))
class
FullFactorView
(
Base
):
__tablename__
=
'full_factor_view'
__table_args__
=
(
Index
(
'factor_pk'
,
'trade_date'
,
'code'
,
unique
=
True
),
)
if
__name__
==
'__main__'
:
trade_date
=
Column
(
DateTime
,
primary_key
=
True
,
nullable
=
False
)
code
=
Column
(
Integer
,
primary_key
=
True
,
nullable
=
False
)
secShortName
=
Column
(
String
(
10
))
exchangeCD
=
Column
(
String
(
4
))
preClosePrice
=
Column
(
Float
(
53
))
actPreClosePrice
=
Column
(
Float
(
53
))
openPrice
=
Column
(
Float
(
53
))
highestPrice
=
Column
(
Float
(
53
))
lowestPrice
=
Column
(
Float
(
53
))
closePrice
=
Column
(
Float
(
53
))
turnoverVol
=
Column
(
BigInteger
)
turnoverValue
=
Column
(
Float
(
53
))
dealAmount
=
Column
(
BigInteger
)
turnoverRate
=
Column
(
Float
(
53
))
accumAdjFactor
=
Column
(
Float
(
53
))
negMarketValue
=
Column
(
Float
(
53
))
marketValue
=
Column
(
Float
(
53
))
chgPct
=
Column
(
Float
(
53
))
isOpen
=
Column
(
Integer
)
vwap
=
Column
(
Float
(
53
))
AccountsPayablesTDays
=
Column
(
Float
(
53
))
AccountsPayablesTRate
=
Column
(
Float
(
53
))
AdminiExpenseRate
=
Column
(
Float
(
53
))
ARTDays
=
Column
(
Float
(
53
))
ARTRate
=
Column
(
Float
(
53
))
ASSI
=
Column
(
Float
(
53
))
BLEV
=
Column
(
Float
(
53
))
BondsPayableToAsset
=
Column
(
Float
(
53
))
CashRateOfSales
=
Column
(
Float
(
53
))
CashToCurrentLiability
=
Column
(
Float
(
53
))
CMRA
=
Column
(
Float
(
53
))
CTOP
=
Column
(
Float
(
53
))
CTP5
=
Column
(
Float
(
53
))
CurrentAssetsRatio
=
Column
(
Float
(
53
))
CurrentAssetsTRate
=
Column
(
Float
(
53
))
CurrentRatio
=
Column
(
Float
(
53
))
DAVOL10
=
Column
(
Float
(
53
))
DAVOL20
=
Column
(
Float
(
53
))
DAVOL5
=
Column
(
Float
(
53
))
DDNBT
=
Column
(
Float
(
53
))
DDNCR
=
Column
(
Float
(
53
))
DDNSR
=
Column
(
Float
(
53
))
DebtEquityRatio
=
Column
(
Float
(
53
))
DebtsAssetRatio
=
Column
(
Float
(
53
))
DHILO
=
Column
(
Float
(
53
))
DilutedEPS
=
Column
(
Float
(
53
))
DVRAT
=
Column
(
Float
(
53
))
EBITToTOR
=
Column
(
Float
(
53
))
EGRO
=
Column
(
Float
(
53
))
EMA10
=
Column
(
Float
(
53
))
EMA120
=
Column
(
Float
(
53
))
EMA20
=
Column
(
Float
(
53
))
EMA5
=
Column
(
Float
(
53
))
EMA60
=
Column
(
Float
(
53
))
EPS
=
Column
(
Float
(
53
))
EquityFixedAssetRatio
=
Column
(
Float
(
53
))
EquityToAsset
=
Column
(
Float
(
53
))
EquityTRate
=
Column
(
Float
(
53
))
ETOP
=
Column
(
Float
(
53
))
ETP5
=
Column
(
Float
(
53
))
FinancialExpenseRate
=
Column
(
Float
(
53
))
FinancingCashGrowRate
=
Column
(
Float
(
53
))
FixAssetRatio
=
Column
(
Float
(
53
))
FixedAssetsTRate
=
Column
(
Float
(
53
))
GrossIncomeRatio
=
Column
(
Float
(
53
))
HBETA
=
Column
(
Float
(
53
))
HSIGMA
=
Column
(
Float
(
53
))
IntangibleAssetRatio
=
Column
(
Float
(
53
))
InventoryTDays
=
Column
(
Float
(
53
))
InventoryTRate
=
Column
(
Float
(
53
))
InvestCashGrowRate
=
Column
(
Float
(
53
))
LCAP
=
Column
(
Float
(
53
))
LFLO
=
Column
(
Float
(
53
))
LongDebtToAsset
=
Column
(
Float
(
53
))
LongDebtToWorkingCapital
=
Column
(
Float
(
53
))
LongTermDebtToAsset
=
Column
(
Float
(
53
))
MA10
=
Column
(
Float
(
53
))
MA120
=
Column
(
Float
(
53
))
MA20
=
Column
(
Float
(
53
))
MA5
=
Column
(
Float
(
53
))
MA60
=
Column
(
Float
(
53
))
MAWVAD
=
Column
(
Float
(
53
))
MFI
=
Column
(
Float
(
53
))
MLEV
=
Column
(
Float
(
53
))
NetAssetGrowRate
=
Column
(
Float
(
53
))
NetProfitGrowRate
=
Column
(
Float
(
53
))
NetProfitRatio
=
Column
(
Float
(
53
))
NOCFToOperatingNI
=
Column
(
Float
(
53
))
NonCurrentAssetsRatio
=
Column
(
Float
(
53
))
NPParentCompanyGrowRate
=
Column
(
Float
(
53
))
NPToTOR
=
Column
(
Float
(
53
))
OperatingExpenseRate
=
Column
(
Float
(
53
))
OperatingProfitGrowRate
=
Column
(
Float
(
53
))
OperatingProfitRatio
=
Column
(
Float
(
53
))
OperatingProfitToTOR
=
Column
(
Float
(
53
))
OperatingRevenueGrowRate
=
Column
(
Float
(
53
))
OperCashGrowRate
=
Column
(
Float
(
53
))
OperCashInToCurrentLiability
=
Column
(
Float
(
53
))
PB
=
Column
(
Float
(
53
))
PCF
=
Column
(
Float
(
53
))
PE
=
Column
(
Float
(
53
))
PS
=
Column
(
Float
(
53
))
PSY
=
Column
(
Float
(
53
))
QuickRatio
=
Column
(
Float
(
53
))
REVS10
=
Column
(
Float
(
53
))
REVS20
=
Column
(
Float
(
53
))
REVS5
=
Column
(
Float
(
53
))
ROA
=
Column
(
Float
(
53
))
ROA5
=
Column
(
Float
(
53
))
ROE
=
Column
(
Float
(
53
))
ROE5
=
Column
(
Float
(
53
))
RSI
=
Column
(
Float
(
53
))
RSTR12
=
Column
(
Float
(
53
))
RSTR24
=
Column
(
Float
(
53
))
SalesCostRatio
=
Column
(
Float
(
53
))
SaleServiceCashToOR
=
Column
(
Float
(
53
))
SUE
=
Column
(
Float
(
53
))
TaxRatio
=
Column
(
Float
(
53
))
TOBT
=
Column
(
Float
(
53
))
TotalAssetGrowRate
=
Column
(
Float
(
53
))
TotalAssetsTRate
=
Column
(
Float
(
53
))
TotalProfitCostRatio
=
Column
(
Float
(
53
))
TotalProfitGrowRate
=
Column
(
Float
(
53
))
VOL10
=
Column
(
Float
(
53
))
VOL120
=
Column
(
Float
(
53
))
VOL20
=
Column
(
Float
(
53
))
VOL240
=
Column
(
Float
(
53
))
VOL5
=
Column
(
Float
(
53
))
VOL60
=
Column
(
Float
(
53
))
WVAD
=
Column
(
Float
(
53
))
REC
=
Column
(
Float
(
53
))
DAREC
=
Column
(
Float
(
53
))
GREC
=
Column
(
Float
(
53
))
FY12P
=
Column
(
Float
(
53
))
DAREV
=
Column
(
Float
(
53
))
GREV
=
Column
(
Float
(
53
))
SFY12P
=
Column
(
Float
(
53
))
DASREV
=
Column
(
Float
(
53
))
GSREV
=
Column
(
Float
(
53
))
FEARNG
=
Column
(
Float
(
53
))
FSALESG
=
Column
(
Float
(
53
))
TA2EV
=
Column
(
Float
(
53
))
CFO2EV
=
Column
(
Float
(
53
))
ACCA
=
Column
(
Float
(
53
))
DEGM
=
Column
(
Float
(
53
))
SUOI
=
Column
(
Float
(
53
))
EARNMOM
=
Column
(
Float
(
53
))
FiftyTwoWeekHigh
=
Column
(
Float
(
53
))
Volatility
=
Column
(
Float
(
53
))
Skewness
=
Column
(
Float
(
53
))
ILLIQUIDITY
=
Column
(
Float
(
53
))
BackwardADJ
=
Column
(
Float
(
53
))
MACD
=
Column
(
Float
(
53
))
ADTM
=
Column
(
Float
(
53
))
ATR14
=
Column
(
Float
(
53
))
ATR6
=
Column
(
Float
(
53
))
BIAS10
=
Column
(
Float
(
53
))
BIAS20
=
Column
(
Float
(
53
))
BIAS5
=
Column
(
Float
(
53
))
BIAS60
=
Column
(
Float
(
53
))
BollDown
=
Column
(
Float
(
53
))
BollUp
=
Column
(
Float
(
53
))
CCI10
=
Column
(
Float
(
53
))
CCI20
=
Column
(
Float
(
53
))
CCI5
=
Column
(
Float
(
53
))
CCI88
=
Column
(
Float
(
53
))
KDJ_K
=
Column
(
Float
(
53
))
KDJ_D
=
Column
(
Float
(
53
))
KDJ_J
=
Column
(
Float
(
53
))
ROC6
=
Column
(
Float
(
53
))
ROC20
=
Column
(
Float
(
53
))
SBM
=
Column
(
Float
(
53
))
STM
=
Column
(
Float
(
53
))
UpRVI
=
Column
(
Float
(
53
))
DownRVI
=
Column
(
Float
(
53
))
RVI
=
Column
(
Float
(
53
))
SRMI
=
Column
(
Float
(
53
))
ChandeSD
=
Column
(
Float
(
53
))
ChandeSU
=
Column
(
Float
(
53
))
CMO
=
Column
(
Float
(
53
))
DBCD
=
Column
(
Float
(
53
))
ARC
=
Column
(
Float
(
53
))
OBV
=
Column
(
Float
(
53
))
OBV6
=
Column
(
Float
(
53
))
OBV20
=
Column
(
Float
(
53
))
TVMA20
=
Column
(
Float
(
53
))
TVMA6
=
Column
(
Float
(
53
))
TVSTD20
=
Column
(
Float
(
53
))
TVSTD6
=
Column
(
Float
(
53
))
VDEA
=
Column
(
Float
(
53
))
VDIFF
=
Column
(
Float
(
53
))
VEMA10
=
Column
(
Float
(
53
))
VEMA12
=
Column
(
Float
(
53
))
VEMA26
=
Column
(
Float
(
53
))
VEMA5
=
Column
(
Float
(
53
))
VMACD
=
Column
(
Float
(
53
))
VOSC
=
Column
(
Float
(
53
))
VR
=
Column
(
Float
(
53
))
VROC12
=
Column
(
Float
(
53
))
VROC6
=
Column
(
Float
(
53
))
VSTD10
=
Column
(
Float
(
53
))
VSTD20
=
Column
(
Float
(
53
))
KlingerOscillator
=
Column
(
Float
(
53
))
MoneyFlow20
=
Column
(
Float
(
53
))
AD
=
Column
(
Float
(
53
))
AD20
=
Column
(
Float
(
53
))
AD6
=
Column
(
Float
(
53
))
CoppockCurve
=
Column
(
Float
(
53
))
ASI
=
Column
(
Float
(
53
))
ChaikinOscillator
=
Column
(
Float
(
53
))
ChaikinVolatility
=
Column
(
Float
(
53
))
EMV14
=
Column
(
Float
(
53
))
EMV6
=
Column
(
Float
(
53
))
plusDI
=
Column
(
Float
(
53
))
minusDI
=
Column
(
Float
(
53
))
ADX
=
Column
(
Float
(
53
))
ADXR
=
Column
(
Float
(
53
))
Aroon
=
Column
(
Float
(
53
))
AroonDown
=
Column
(
Float
(
53
))
AroonUp
=
Column
(
Float
(
53
))
DEA
=
Column
(
Float
(
53
))
DIFF
=
Column
(
Float
(
53
))
DDI
=
Column
(
Float
(
53
))
DIZ
=
Column
(
Float
(
53
))
DIF
=
Column
(
Float
(
53
))
MTM
=
Column
(
Float
(
53
))
MTMMA
=
Column
(
Float
(
53
))
PVT
=
Column
(
Float
(
53
))
PVT6
=
Column
(
Float
(
53
))
PVT12
=
Column
(
Float
(
53
))
TRIX5
=
Column
(
Float
(
53
))
TRIX10
=
Column
(
Float
(
53
))
UOS
=
Column
(
Float
(
53
))
MA10RegressCoeff12
=
Column
(
Float
(
53
))
MA10RegressCoeff6
=
Column
(
Float
(
53
))
PLRC6
=
Column
(
Float
(
53
))
PLRC12
=
Column
(
Float
(
53
))
SwingIndex
=
Column
(
Float
(
53
))
Ulcer10
=
Column
(
Float
(
53
))
Ulcer5
=
Column
(
Float
(
53
))
Hurst
=
Column
(
Float
(
53
))
ACD6
=
Column
(
Float
(
53
))
ACD20
=
Column
(
Float
(
53
))
EMA12
=
Column
(
Float
(
53
))
EMA26
=
Column
(
Float
(
53
))
APBMA
=
Column
(
Float
(
53
))
BBI
=
Column
(
Float
(
53
))
BBIC
=
Column
(
Float
(
53
))
TEMA10
=
Column
(
Float
(
53
))
TEMA5
=
Column
(
Float
(
53
))
MA10Close
=
Column
(
Float
(
53
))
AR
=
Column
(
Float
(
53
))
BR
=
Column
(
Float
(
53
))
ARBR
=
Column
(
Float
(
53
))
CR20
=
Column
(
Float
(
53
))
MassIndex
=
Column
(
Float
(
53
))
BearPower
=
Column
(
Float
(
53
))
BullPower
=
Column
(
Float
(
53
))
Elder
=
Column
(
Float
(
53
))
NVI
=
Column
(
Float
(
53
))
PVI
=
Column
(
Float
(
53
))
RC12
=
Column
(
Float
(
53
))
RC24
=
Column
(
Float
(
53
))
JDQS20
=
Column
(
Float
(
53
))
Variance20
=
Column
(
Float
(
53
))
Variance60
=
Column
(
Float
(
53
))
Variance120
=
Column
(
Float
(
53
))
Kurtosis20
=
Column
(
Float
(
53
))
Kurtosis60
=
Column
(
Float
(
53
))
Kurtosis120
=
Column
(
Float
(
53
))
Alpha20
=
Column
(
Float
(
53
))
Alpha60
=
Column
(
Float
(
53
))
Alpha120
=
Column
(
Float
(
53
))
Beta20
=
Column
(
Float
(
53
))
Beta60
=
Column
(
Float
(
53
))
Beta120
=
Column
(
Float
(
53
))
SharpeRatio20
=
Column
(
Float
(
53
))
SharpeRatio60
=
Column
(
Float
(
53
))
SharpeRatio120
=
Column
(
Float
(
53
))
TreynorRatio20
=
Column
(
Float
(
53
))
TreynorRatio60
=
Column
(
Float
(
53
))
TreynorRatio120
=
Column
(
Float
(
53
))
InformationRatio20
=
Column
(
Float
(
53
))
InformationRatio60
=
Column
(
Float
(
53
))
InformationRatio120
=
Column
(
Float
(
53
))
GainVariance20
=
Column
(
Float
(
53
))
GainVariance60
=
Column
(
Float
(
53
))
GainVariance120
=
Column
(
Float
(
53
))
LossVariance20
=
Column
(
Float
(
53
))
LossVariance60
=
Column
(
Float
(
53
))
LossVariance120
=
Column
(
Float
(
53
))
GainLossVarianceRatio20
=
Column
(
Float
(
53
))
GainLossVarianceRatio60
=
Column
(
Float
(
53
))
GainLossVarianceRatio120
=
Column
(
Float
(
53
))
RealizedVolatility
=
Column
(
Float
(
53
))
REVS60
=
Column
(
Float
(
53
))
REVS120
=
Column
(
Float
(
53
))
REVS250
=
Column
(
Float
(
53
))
REVS750
=
Column
(
Float
(
53
))
REVS5m20
=
Column
(
Float
(
53
))
REVS5m60
=
Column
(
Float
(
53
))
REVS5Indu1
=
Column
(
Float
(
53
))
REVS20Indu1
=
Column
(
Float
(
53
))
Volumn1M
=
Column
(
Float
(
53
))
Volumn3M
=
Column
(
Float
(
53
))
Price1M
=
Column
(
Float
(
53
))
Price3M
=
Column
(
Float
(
53
))
Price1Y
=
Column
(
Float
(
53
))
Rank1M
=
Column
(
Float
(
53
))
CashDividendCover
=
Column
(
Float
(
53
))
DividendCover
=
Column
(
Float
(
53
))
DividendPaidRatio
=
Column
(
Float
(
53
))
RetainedEarningRatio
=
Column
(
Float
(
53
))
CashEquivalentPS
=
Column
(
Float
(
53
))
DividendPS
=
Column
(
Float
(
53
))
EPSTTM
=
Column
(
Float
(
53
))
NetAssetPS
=
Column
(
Float
(
53
))
TORPS
=
Column
(
Float
(
53
))
TORPSLatest
=
Column
(
Float
(
53
))
OperatingRevenuePS
=
Column
(
Float
(
53
))
OperatingRevenuePSLatest
=
Column
(
Float
(
53
))
OperatingProfitPS
=
Column
(
Float
(
53
))
OperatingProfitPSLatest
=
Column
(
Float
(
53
))
CapitalSurplusFundPS
=
Column
(
Float
(
53
))
SurplusReserveFundPS
=
Column
(
Float
(
53
))
UndividedProfitPS
=
Column
(
Float
(
53
))
RetainedEarningsPS
=
Column
(
Float
(
53
))
OperCashFlowPS
=
Column
(
Float
(
53
))
CashFlowPS
=
Column
(
Float
(
53
))
NetNonOIToTP
=
Column
(
Float
(
53
))
NetNonOIToTPLatest
=
Column
(
Float
(
53
))
PeriodCostsRate
=
Column
(
Float
(
53
))
InterestCover
=
Column
(
Float
(
53
))
NetProfitGrowRate3Y
=
Column
(
Float
(
53
))
NetProfitGrowRate5Y
=
Column
(
Float
(
53
))
OperatingRevenueGrowRate3Y
=
Column
(
Float
(
53
))
OperatingRevenueGrowRate5Y
=
Column
(
Float
(
53
))
NetCashFlowGrowRate
=
Column
(
Float
(
53
))
NetProfitCashCover
=
Column
(
Float
(
53
))
OperCashInToAsset
=
Column
(
Float
(
53
))
CashConversionCycle
=
Column
(
Float
(
53
))
OperatingCycle
=
Column
(
Float
(
53
))
PEG3Y
=
Column
(
Float
(
53
))
PEG5Y
=
Column
(
Float
(
53
))
PEIndu
=
Column
(
Float
(
53
))
PBIndu
=
Column
(
Float
(
53
))
PSIndu
=
Column
(
Float
(
53
))
PCFIndu
=
Column
(
Float
(
53
))
PEHist20
=
Column
(
Float
(
53
))
PEHist60
=
Column
(
Float
(
53
))
PEHist120
=
Column
(
Float
(
53
))
PEHist250
=
Column
(
Float
(
53
))
StaticPE
=
Column
(
Float
(
53
))
ForwardPE
=
Column
(
Float
(
53
))
EnterpriseFCFPS
=
Column
(
Float
(
53
))
ShareholderFCFPS
=
Column
(
Float
(
53
))
ROEDiluted
=
Column
(
Float
(
53
))
ROEAvg
=
Column
(
Float
(
53
))
ROEWeighted
=
Column
(
Float
(
53
))
ROECut
=
Column
(
Float
(
53
))
ROECutWeighted
=
Column
(
Float
(
53
))
ROIC
=
Column
(
Float
(
53
))
ROAEBIT
=
Column
(
Float
(
53
))
ROAEBITTTM
=
Column
(
Float
(
53
))
OperatingNIToTP
=
Column
(
Float
(
53
))
OperatingNIToTPLatest
=
Column
(
Float
(
53
))
InvestRAssociatesToTP
=
Column
(
Float
(
53
))
InvestRAssociatesToTPLatest
=
Column
(
Float
(
53
))
NPCutToNP
=
Column
(
Float
(
53
))
SuperQuickRatio
=
Column
(
Float
(
53
))
TSEPToInterestBearDebt
=
Column
(
Float
(
53
))
DebtTangibleEquityRatio
=
Column
(
Float
(
53
))
TangibleAToInteBearDebt
=
Column
(
Float
(
53
))
TangibleAToNetDebt
=
Column
(
Float
(
53
))
NOCFToTLiability
=
Column
(
Float
(
53
))
NOCFToInterestBearDebt
=
Column
(
Float
(
53
))
NOCFToNetDebt
=
Column
(
Float
(
53
))
TSEPToTotalCapital
=
Column
(
Float
(
53
))
InteBearDebtToTotalCapital
=
Column
(
Float
(
53
))
NPParentCompanyCutYOY
=
Column
(
Float
(
53
))
SalesServiceCashToORLatest
=
Column
(
Float
(
53
))
CashRateOfSalesLatest
=
Column
(
Float
(
53
))
NOCFToOperatingNILatest
=
Column
(
Float
(
53
))
TotalAssets
=
Column
(
Float
(
53
))
MktValue
=
Column
(
Float
(
53
))
NegMktValue
=
Column
(
Float
(
53
))
TEAP
=
Column
(
Float
(
53
))
NIAP
=
Column
(
Float
(
53
))
TotalFixedAssets
=
Column
(
Float
(
53
))
IntFreeCL
=
Column
(
Float
(
53
))
IntFreeNCL
=
Column
(
Float
(
53
))
IntCL
=
Column
(
Float
(
53
))
IntDebt
=
Column
(
Float
(
53
))
NetDebt
=
Column
(
Float
(
53
))
NetTangibleAssets
=
Column
(
Float
(
53
))
WorkingCapital
=
Column
(
Float
(
53
))
NetWorkingCapital
=
Column
(
Float
(
53
))
TotalPaidinCapital
=
Column
(
Float
(
53
))
RetainedEarnings
=
Column
(
Float
(
53
))
OperateNetIncome
=
Column
(
Float
(
53
))
ValueChgProfit
=
Column
(
Float
(
53
))
NetIntExpense
=
Column
(
Float
(
53
))
EBIT
=
Column
(
Float
(
53
))
EBITDA
=
Column
(
Float
(
53
))
EBIAT
=
Column
(
Float
(
53
))
NRProfitLoss
=
Column
(
Float
(
53
))
NIAPCut
=
Column
(
Float
(
53
))
FCFF
=
Column
(
Float
(
53
))
FCFE
=
Column
(
Float
(
53
))
DA
=
Column
(
Float
(
53
))
TRevenueTTM
=
Column
(
Float
(
53
))
TCostTTM
=
Column
(
Float
(
53
))
RevenueTTM
=
Column
(
Float
(
53
))
CostTTM
=
Column
(
Float
(
53
))
GrossProfitTTM
=
Column
(
Float
(
53
))
SalesExpenseTTM
=
Column
(
Float
(
53
))
AdminExpenseTTM
=
Column
(
Float
(
53
))
FinanExpenseTTM
=
Column
(
Float
(
53
))
AssetImpairLossTTM
=
Column
(
Float
(
53
))
NPFromOperatingTTM
=
Column
(
Float
(
53
))
NPFromValueChgTTM
=
Column
(
Float
(
53
))
OperateProfitTTM
=
Column
(
Float
(
53
))
NonOperatingNPTTM
=
Column
(
Float
(
53
))
TProfitTTM
=
Column
(
Float
(
53
))
NetProfitTTM
=
Column
(
Float
(
53
))
NetProfitAPTTM
=
Column
(
Float
(
53
))
SaleServiceRenderCashTTM
=
Column
(
Float
(
53
))
NetOperateCFTTM
=
Column
(
Float
(
53
))
NetInvestCFTTM
=
Column
(
Float
(
53
))
NetFinanceCFTTM
=
Column
(
Float
(
53
))
GrossProfit
=
Column
(
Float
(
53
))
Beta252
=
Column
(
Float
(
53
))
RSTR504
=
Column
(
Float
(
53
))
EPIBS
=
Column
(
Float
(
53
))
CETOP
=
Column
(
Float
(
53
))
DASTD
=
Column
(
Float
(
53
))
CmraCNE5
=
Column
(
Float
(
53
))
HsigmaCNE5
=
Column
(
Float
(
53
))
SGRO
=
Column
(
Float
(
53
))
EgibsLong
=
Column
(
Float
(
53
))
STOM
=
Column
(
Float
(
53
))
STOQ
=
Column
(
Float
(
53
))
STOA
=
Column
(
Float
(
53
))
NLSIZE
=
Column
(
Float
(
53
))
ROEAfterNonRecurring
=
Column
(
Float
(
53
))
EPSAfterNonRecurring
=
Column
(
Float
(
53
))
EODPrice
=
Column
(
Float
(
53
))
LogFloatCap
=
Column
(
Float
(
53
))
BPS
=
Column
(
Float
(
53
))
SPS
=
Column
(
Float
(
53
))
DebtToAsset
=
Column
(
Float
(
53
))
DROEAfterNonRecurring
=
Column
(
Float
(
53
))
LogTotalCap
=
Column
(
Float
(
53
))
BP
=
Column
(
Float
(
53
))
SP
=
Column
(
Float
(
53
))
EPAfterNonRecurring
=
Column
(
Float
(
53
))
DivToB
=
Column
(
Float
(
53
))
DivP
=
Column
(
Float
(
53
))
EBITToSales
=
Column
(
Float
(
53
))
EBITAToSales
=
Column
(
Float
(
53
))
EVToSales
=
Column
(
Float
(
53
))
EVToEBIT
=
Column
(
Float
(
53
))
EVToEBITDA
=
Column
(
Float
(
53
))
EVToNOPLAT
=
Column
(
Float
(
53
))
EVToIC
=
Column
(
Float
(
53
))
FCFFPS
=
Column
(
Float
(
53
))
FCFFToEarningAfterNonRecurring
=
Column
(
Float
(
53
))
FCFFP
=
Column
(
Float
(
53
))
ProfitToAsset
=
Column
(
Float
(
53
))
GrossProfitRatio
=
Column
(
Float
(
53
))
LATO
=
Column
(
Float
(
53
))
FATO
=
Column
(
Float
(
53
))
TATO
=
Column
(
Float
(
53
))
EquityTO
=
Column
(
Float
(
53
))
PayableTO
=
Column
(
Float
(
53
))
RecievableTO
=
Column
(
Float
(
53
))
RevenueGrowth
=
Column
(
Float
(
53
))
GrossProfitGrowth
=
Column
(
Float
(
53
))
NetProfitGrowth
=
Column
(
Float
(
53
))
GrossCFToRevenue
=
Column
(
Float
(
53
))
CFToRevenue
=
Column
(
Float
(
53
))
CFToProfit
=
Column
(
Float
(
53
))
CFToAsset
=
Column
(
Float
(
53
))
GrossCFGrowth
=
Column
(
Float
(
53
))
CFGrowth
=
Column
(
Float
(
53
))
ICFGrowth
=
Column
(
Float
(
53
))
AveAmount60
=
Column
(
Float
(
53
))
PeriodReturn60
=
Column
(
Float
(
53
))
AmountRatio60to250
=
Column
(
Float
(
53
))
CFPS
=
Column
(
Float
(
53
))
CFP
=
Column
(
Float
(
53
))
NetCFGrowth
=
Column
(
Float
(
53
))
NetCFGrowthP
=
Column
(
Float
(
53
))
NetCash
=
Column
(
Float
(
53
))
NetCashP
=
Column
(
Float
(
53
))
BVPSGrowth
=
Column
(
Float
(
53
))
EquityPSGrowth
=
Column
(
Float
(
53
))
WholeSales
=
Column
(
Float
(
53
))
WholeProfitAfterNonRecurring
=
Column
(
Float
(
53
))
ExpenseRatio
=
Column
(
Float
(
53
))
AcidTestRatio
=
Column
(
Float
(
53
))
TimeInterestEarnedRatio
=
Column
(
Float
(
53
))
DepositReceivedVsSale
=
Column
(
Float
(
53
))
DebtRatioExcemptDepRec
=
Column
(
Float
(
53
))
SNBARatio
=
Column
(
Float
(
53
))
CFinc1
=
Column
(
Float
(
53
))
BDTO
=
Column
(
Float
(
53
))
RVOL
=
Column
(
Float
(
53
))
CHV
=
Column
(
Float
(
53
))
VAL
=
Column
(
Float
(
53
))
BETA
=
Column
(
Float
(
53
))
MOMENTUM
=
Column
(
Float
(
53
))
SIZE
=
Column
(
Float
(
53
))
EARNYILD
=
Column
(
Float
(
53
))
RESVOL
=
Column
(
Float
(
53
))
GROWTH
=
Column
(
Float
(
53
))
BTOP
=
Column
(
Float
(
53
))
LEVERAGE
=
Column
(
Float
(
53
))
LIQUIDTY
=
Column
(
Float
(
53
))
SIZENL
=
Column
(
Float
(
53
))
Bank
=
Column
(
BigInteger
)
RealEstate
=
Column
(
BigInteger
)
Health
=
Column
(
BigInteger
)
Transportation
=
Column
(
BigInteger
)
Mining
=
Column
(
BigInteger
)
NonFerMetal
=
Column
(
BigInteger
)
HouseApp
=
Column
(
BigInteger
)
LeiService
=
Column
(
BigInteger
)
MachiEquip
=
Column
(
BigInteger
)
BuildDeco
=
Column
(
BigInteger
)
CommeTrade
=
Column
(
BigInteger
)
CONMAT
=
Column
(
BigInteger
)
Auto
=
Column
(
BigInteger
)
Textile
=
Column
(
BigInteger
)
FoodBever
=
Column
(
BigInteger
)
Electronics
=
Column
(
BigInteger
)
Computer
=
Column
(
BigInteger
)
LightIndus
=
Column
(
BigInteger
)
Utilities
=
Column
(
BigInteger
)
Telecom
=
Column
(
BigInteger
)
AgriForest
=
Column
(
BigInteger
)
CHEM
=
Column
(
BigInteger
)
Media
=
Column
(
BigInteger
)
IronSteel
=
Column
(
BigInteger
)
NonBankFinan
=
Column
(
BigInteger
)
ELECEQP
=
Column
(
BigInteger
)
AERODEF
=
Column
(
BigInteger
)
Conglomerates
=
Column
(
BigInteger
)
COUNTRY
=
Column
(
BigInteger
)
if
__name__
==
'__main__'
:
from
sqlalchemy
import
create_engine
engine
=
create_engine
(
'postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha'
)
...
...
alphamind/data/engines/sqlengine.py
View file @
65c88236
...
...
@@ -34,6 +34,7 @@ from alphamind.data.dbmodel.models import RiskCovShort
from
alphamind.data.dbmodel.models
import
RiskCovLong
from
alphamind.data.dbmodel.models
import
RiskExposure
from
alphamind.data.dbmodel.models
import
Market
from
alphamind.data.dbmodel.models
import
FullFactorView
from
alphamind.data.transformer
import
Transformer
from
PyFin.api
import
advanceDateByCalendar
from
PyFin.Analysis.SecurityValueHolders
import
SecurityLatestValueHolder
...
...
@@ -84,7 +85,7 @@ macro_styles = ['COUNTRY']
total_risk_factors
=
risk_styles
+
industry_styles
+
macro_styles
factor_tables
=
[
Uqer
,
LegacyFactor
,
Tiny
,
Experimental
,
RiskExposure
,
Market
]
factor_tables
=
[
Uqer
,
LegacyFactor
,
Tiny
,
Experimental
,
RiskExposure
,
Market
]
def
append_industry_info
(
df
):
...
...
@@ -107,7 +108,16 @@ def _map_risk_model_table(risk_model: str) -> tuple:
raise
ValueError
(
"risk model name {0} is not recognized"
.
format
(
risk_model
))
def
_map_factors
(
factors
:
Iterable
[
str
])
->
dict
:
def
_map_factors
(
factors
:
Iterable
[
str
])
->
List
:
factor_cols
=
[]
excluded
=
{
'trade_date'
,
'code'
,
'isOpen'
,
}
for
f
in
factors
:
if
f
not
in
excluded
and
f
in
FullFactorView
.
__table__
.
columns
:
factor_cols
.
append
(
FullFactorView
.
__table__
.
columns
[
f
])
return
factor_cols
def
_map_factors_old
(
factors
:
Iterable
[
str
])
->
List
:
factor_cols
=
{}
excluded
=
{
'trade_date'
,
'code'
,
'isOpen'
,
}
for
f
in
factors
:
...
...
@@ -178,8 +188,8 @@ class SqlEngine(object):
def
fetch_dx_return
(
self
,
ref_date
:
str
,
codes
:
Iterable
[
int
],
expiry_date
:
str
=
None
,
horizon
:
int
=
0
)
->
pd
.
DataFrame
:
expiry_date
:
str
=
None
,
horizon
:
int
=
0
)
->
pd
.
DataFrame
:
start_date
=
ref_date
if
not
expiry_date
:
...
...
@@ -198,10 +208,10 @@ class SqlEngine(object):
def
fetch_dx_return_range
(
self
,
universe
,
start_date
:
str
=
None
,
end_date
:
str
=
None
,
dates
:
Iterable
[
str
]
=
None
,
horizon
:
int
=
0
)
->
pd
.
DataFrame
:
start_date
:
str
=
None
,
end_date
:
str
=
None
,
dates
:
Iterable
[
str
]
=
None
,
horizon
:
int
=
0
)
->
pd
.
DataFrame
:
if
dates
:
start_date
=
dates
[
0
]
...
...
@@ -210,7 +220,8 @@ class SqlEngine(object):
end_date
=
advanceDateByCalendar
(
'china.sse'
,
end_date
,
str
(
horizon
)
+
'b'
)
.
strftime
(
'
%
Y-
%
m-
%
d'
)
q2
=
universe
.
query_range
(
start_date
,
end_date
)
.
alias
(
'temp_universe'
)
big_table
=
join
(
DailyReturn
,
q2
,
and_
(
DailyReturn
.
trade_date
==
q2
.
c
.
trade_date
,
DailyReturn
.
code
==
q2
.
c
.
code
))
big_table
=
join
(
DailyReturn
,
q2
,
and_
(
DailyReturn
.
trade_date
==
q2
.
c
.
trade_date
,
DailyReturn
.
code
==
q2
.
c
.
code
))
stats
=
func
.
sum
(
self
.
ln_func
(
1.
+
DailyReturn
.
d1
))
.
over
(
partition_by
=
DailyReturn
.
code
,
...
...
@@ -232,7 +243,7 @@ class SqlEngine(object):
ref_date
:
str
,
factors
:
Iterable
[
object
],
codes
:
Iterable
[
int
],
warm_start
:
int
=
0
)
->
pd
.
DataFrame
:
warm_start
:
int
=
0
)
->
pd
.
DataFrame
:
if
isinstance
(
factors
,
Transformer
):
transformer
=
factors
...
...
@@ -246,13 +257,8 @@ class SqlEngine(object):
start_date
=
advanceDateByCalendar
(
'china.sse'
,
ref_date
,
str
(
-
warm_start
)
+
'b'
)
.
strftime
(
'
%
Y-
%
m-
%
d'
)
end_date
=
ref_date
big_table
=
Market
for
t
in
set
(
factor_cols
.
values
()):
big_table
=
outerjoin
(
big_table
,
t
,
and_
(
Market
.
trade_date
==
t
.
trade_date
,
Market
.
code
==
t
.
code
))
query
=
select
([
Market
.
trade_date
,
Market
.
code
,
Market
.
isOpen
]
+
list
(
factor_cols
.
keys
()))
\
.
select_from
(
big_table
)
\
.
where
(
and_
(
Market
.
trade_date
.
between
(
start_date
,
end_date
),
Market
.
code
.
in_
(
codes
)))
query
=
select
([
FullFactorView
.
trade_date
,
FullFactorView
.
code
,
FullFactorView
.
isOpen
]
+
factor_cols
)
\
.
where
(
and_
(
FullFactorView
.
trade_date
.
between
(
start_date
,
end_date
),
FullFactorView
.
code
.
in_
(
codes
)))
df
=
pd
.
read_sql
(
query
,
self
.
engine
)
.
sort_values
([
'trade_date'
,
'code'
])
.
set_index
(
'trade_date'
)
res
=
transformer
.
transform
(
'code'
,
df
)
...
...
@@ -271,7 +277,7 @@ class SqlEngine(object):
start_date
:
str
=
None
,
end_date
:
str
=
None
,
dates
:
Iterable
[
str
]
=
None
,
warm_start
:
int
=
0
)
->
pd
.
DataFrame
:
warm_start
:
int
=
0
)
->
pd
.
DataFrame
:
if
isinstance
(
factors
,
Transformer
):
transformer
=
factors
...
...
@@ -295,20 +301,21 @@ class SqlEngine(object):
real_dates
=
dates
else
:
if
dates
:
real_start_date
=
advanceDateByCalendar
(
'china.sse'
,
dates
[
0
],
str
(
-
warm_start
)
+
'b'
)
.
strftime
(
'
%
Y-
%
m-
%
d'
)
real_start_date
=
advanceDateByCalendar
(
'china.sse'
,
dates
[
0
],
str
(
-
warm_start
)
+
'b'
)
.
strftime
(
'
%
Y-
%
m-
%
d'
)
real_end_date
=
dates
[
-
1
]
else
:
real_start_date
=
advanceDateByCalendar
(
'china.sse'
,
start_date
,
str
(
-
warm_start
)
+
'b'
)
.
strftime
(
'
%
Y-
%
m-
%
d'
)
real_start_date
=
advanceDateByCalendar
(
'china.sse'
,
start_date
,
str
(
-
warm_start
)
+
'b'
)
.
strftime
(
'
%
Y-
%
m-
%
d'
)
real_end_date
=
end_date
real_dates
=
None
q2
=
universe
.
query_range
(
real_start_date
,
real_end_date
,
real_dates
)
.
alias
(
'temp_universe'
)
big_table
=
join
(
Market
,
q2
,
and_
(
Market
.
trade_date
==
q2
.
c
.
trade_date
,
Market
.
code
==
q2
.
c
.
code
))
for
t
in
set
(
factor_cols
.
values
()):
big_table
=
outerjoin
(
big_table
,
t
,
and_
(
Market
.
trade_date
==
t
.
trade_date
,
Market
.
code
==
t
.
code
))
big_table
=
join
(
FullFactorView
,
q2
,
and_
(
FullFactorView
.
trade_date
==
q2
.
c
.
trade_date
,
FullFactorView
.
code
==
q2
.
c
.
code
))
query
=
select
([
Market
.
trade_date
,
Market
.
code
,
Market
.
isOpen
]
+
list
(
factor_cols
.
keys
())
)
\
query
=
select
([
FullFactorView
.
trade_date
,
FullFactorView
.
code
,
FullFactorView
.
isOpen
]
+
factor_cols
)
\
.
select_from
(
big_table
)
df
=
pd
.
read_sql
(
query
,
self
.
engine
)
.
sort_values
([
'trade_date'
,
'code'
])
.
set_index
(
'trade_date'
)
...
...
@@ -341,7 +348,8 @@ class SqlEngine(object):
end_date
:
str
=
None
,
dates
:
Iterable
[
str
]
=
None
)
->
pd
.
DataFrame
:
cond
=
IndexComponent
.
trade_date
.
in_
(
dates
)
if
dates
else
IndexComponent
.
trade_date
.
between
(
start_date
,
end_date
)
cond
=
IndexComponent
.
trade_date
.
in_
(
dates
)
if
dates
else
IndexComponent
.
trade_date
.
between
(
start_date
,
end_date
)
query
=
select
(
[
IndexComponent
.
trade_date
,
IndexComponent
.
code
,
(
IndexComponent
.
weight
/
100.
)
.
label
(
'weight'
)])
.
where
(
...
...
@@ -356,7 +364,7 @@ class SqlEngine(object):
ref_date
:
str
,
codes
:
Iterable
[
int
],
risk_model
:
str
=
'short'
,
excluded
:
Iterable
[
str
]
=
None
)
->
Tuple
[
pd
.
DataFrame
,
pd
.
DataFrame
]:
excluded
:
Iterable
[
str
]
=
None
)
->
Tuple
[
pd
.
DataFrame
,
pd
.
DataFrame
]:
risk_cov_table
,
special_risk_table
=
_map_risk_model_table
(
risk_model
)
cov_risk_cols
=
[
risk_cov_table
.
__table__
.
columns
[
f
]
for
f
in
total_risk_factors
]
...
...
@@ -392,7 +400,8 @@ class SqlEngine(object):
cov_risk_cols
=
[
risk_cov_table
.
__table__
.
columns
[
f
]
for
f
in
total_risk_factors
]
cond
=
risk_cov_table
.
trade_date
.
in_
(
dates
)
if
dates
else
risk_cov_table
.
trade_date
.
between
(
start_date
,
end_date
)
cond
=
risk_cov_table
.
trade_date
.
in_
(
dates
)
if
dates
else
risk_cov_table
.
trade_date
.
between
(
start_date
,
end_date
)
query
=
select
([
risk_cov_table
.
trade_date
,
risk_cov_table
.
FactorID
,
risk_cov_table
.
Factor
]
...
...
@@ -425,7 +434,7 @@ class SqlEngine(object):
def
fetch_industry
(
self
,
ref_date
:
str
,
codes
:
Iterable
[
int
],
category
:
str
=
'sw'
):
category
:
str
=
'sw'
):
industry_category_name
=
_map_industry_category
(
category
)
...
...
@@ -449,18 +458,26 @@ class SqlEngine(object):
category
:
str
=
'sw'
):
industry_category_name
=
_map_industry_category
(
category
)
if
dates
:
q1
=
select
([
Industry
.
trade_date
,
Industry
.
code
,
Industry
.
industryID1
.
label
(
'industry_code'
),
Industry
.
industryName1
.
label
(
'industry'
)])
.
where
(
and_
(
Industry
.
industry
==
industry_category_name
,
Industry
.
trade_date
.
in_
(
dates
)))
.
alias
(
'temp_industry'
)
else
:
q1
=
select
([
Industry
.
trade_date
,
Industry
.
code
,
Industry
.
industryID1
.
label
(
'industry_code'
),
Industry
.
industryName1
.
label
(
'industry'
)])
.
where
(
and_
(
Industry
.
industry
==
industry_category_name
,
Industry
.
trade_date
.
between
(
start_date
,
end_date
)))
.
alias
(
'temp_industry'
)
q2
=
universe
.
query_range
(
start_date
,
end_date
,
dates
)
.
alias
(
'temp_universe'
)
big_table
=
join
(
Industry
,
q2
,
and_
(
Industry
.
trade_date
==
q2
.
c
.
trade_date
,
Industry
.
code
==
q2
.
c
.
code
))
big_table
=
join
(
q1
,
q2
,
and_
(
q1
.
c
.
trade_date
==
q2
.
c
.
trade_date
,
q1
.
c
.
code
==
q2
.
c
.
code
))
query
=
select
(
[
Industry
.
trade_date
,
Industry
.
code
,
Industry
.
industryID1
.
label
(
'industry_code'
),
Industry
.
industryName1
.
label
(
'industry'
)])
.
\
select_from
(
big_table
)
.
where
(
Industry
.
industry
==
industry_category_name
)
query
=
select
([
q1
])
.
select_from
(
big_table
)
return
pd
.
read_sql
(
query
,
self
.
engine
)
def
fetch_data
(
self
,
ref_date
:
str
,
...
...
@@ -499,7 +516,7 @@ class SqlEngine(object):
dates
:
Iterable
[
str
]
=
None
,
benchmark
:
int
=
None
,
risk_model
:
str
=
'short'
,
industry
:
str
=
'sw'
)
->
Dict
[
str
,
pd
.
DataFrame
]:
industry
:
str
=
'sw'
)
->
Dict
[
str
,
pd
.
DataFrame
]:
total_data
=
{}
transformer
=
Transformer
(
factors
)
...
...
@@ -513,7 +530,8 @@ class SqlEngine(object):
if
risk_model
:
excluded
=
list
(
set
(
total_risk_factors
)
.
intersection
(
transformer
.
dependency
))
risk_cov
,
risk_exp
=
self
.
fetch_risk_model_range
(
universe
,
start_date
,
end_date
,
dates
,
risk_model
,
excluded
)
risk_cov
,
risk_exp
=
self
.
fetch_risk_model_range
(
universe
,
start_date
,
end_date
,
dates
,
risk_model
,
excluded
)
factor_data
=
pd
.
merge
(
factor_data
,
risk_exp
,
how
=
'left'
,
on
=
[
'trade_date'
,
'code'
])
total_data
[
'risk_cov'
]
=
risk_cov
...
...
@@ -529,22 +547,34 @@ class SqlEngine(object):
if
__name__
==
'__main__'
:
import
datetime
as
dt
from
PyFin.api
import
*
from
alphamind.api
import
alpha_logger
db_url
=
'postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha'
# db_url = 'mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha'
universe
=
Universe
(
'custom'
,
[
'zz500'
])
engine
=
SqlEngine
(
db_url
)
ref_date
=
'2017-08-10'
start_date
=
'2017-08-01'
end_date
=
'2017-08-12'
codes
=
engine
.
fetch_codes
(
universe
=
universe
,
ref_date
=
ref_date
)
data2
=
engine
.
fetch_industry
(
ref_date
=
ref_date
,
codes
=
codes
)
data2
=
engine
.
fetch_data_range
(
universe
,
factors
=
None
,
start_date
=
start_date
,
end_date
=
end_date
)
print
(
codes
)
print
(
data2
)
end_date
=
'2017-08-31'
dates
=
makeSchedule
(
start_date
,
end_date
,
'1w'
,
'china.sse'
)
alpha_logger
.
info
(
'start'
)
# codes = engine.fetch_codes(universe=universe, ref_date=ref_date)
data1
=
engine
.
fetch_factor_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
,
dates
=
dates
,
factors
=
[
'RVOL'
,
'EPS'
,
'CFinc1'
,
'BDTO'
,
'VAL'
,
'CHV'
,
'GREV'
,
'ROEDiluted'
])
alpha_logger
.
info
(
'end'
)
data2
=
engine
.
fetch_industry_range
(
universe
,
start_date
=
start_date
,
end_date
=
end_date
,
dates
=
dates
)
alpha_logger
.
info
(
'end'
)
data3
=
engine
.
fetch_benchmark_range
(
905
,
start_date
=
start_date
,
end_date
=
end_date
,
dates
=
dates
)
alpha_logger
.
info
(
'end'
)
data4
=
engine
.
fetch_risk_model_range
(
universe
=
universe
,
start_date
=
start_date
,
end_date
=
end_date
,
dates
=
dates
)
alpha_logger
.
info
(
'end'
)
data2
=
engine
.
fetch_codes_range
(
universe
,
start_date
=
start_date
,
end_date
=
end_date
,
dates
=
dates
)
alpha_logger
.
info
(
'end'
)
scripts/create_view.sql
View file @
65c88236
...
...
@@ -30,8 +30,14 @@ create MATERIALIZED VIEW full_factor_view as SELECT m."trade_date",m."code",m."s
u
.
"AccountsPayablesTDays"
,
u
.
"AccountsPayablesTRate"
,
u
.
"AdminiExpenseRate"
,
u
.
"ARTDays"
,
u
.
"ARTRate"
,
u
.
"ASSI"
,
u
.
"BLEV"
,
u
.
"BondsPayableToAsset"
,
u
.
"CashRateOfSales"
,
u
.
"CashToCurrentLiability"
,
u
.
"CMRA"
,
u
.
"CTOP"
,
u
.
"CTP5"
,
u
.
"CurrentAssetsRatio"
,
u
.
"CurrentAssetsTRate"
,
u
.
"CurrentRatio"
,
u
.
"DAVOL10"
,
u
.
"DAVOL20"
,
u
.
"DAVOL5"
,
u
.
"DDNBT"
,
u
.
"DDNCR"
,
u
.
"DDNSR"
,
u
.
"DebtEquityRatio"
,
u
.
"DebtsAssetRatio"
,
u
.
"DHILO"
,
u
.
"DilutedEPS"
,
u
.
"DVRAT"
,
u
.
"EBITToTOR"
,
u
.
"EGRO"
,
u
.
"EMA10"
,
u
.
"EMA120"
,
u
.
"EMA20"
,
u
.
"EMA5"
,
u
.
"EMA60"
,
u
.
"EPS"
,
u
.
"EquityFixedAssetRatio"
,
u
.
"EquityToAsset"
,
u
.
"EquityTRate"
,
u
.
"ETOP"
,
u
.
"ETP5"
,
u
.
"FinancialExpenseRate"
,
u
.
"FinancingCashGrowRate"
,
u
.
"FixAssetRatio"
,
u
.
"FixedAssetsTRate"
,
u
.
"GrossIncomeRatio"
,
u
.
"HBETA"
,
u
.
"HSIGMA"
,
u
.
"IntangibleAssetRatio"
,
u
.
"InventoryTDays"
,
u
.
"InventoryTRate"
,
u
.
"InvestCashGrowRate"
,
u
.
"LCAP"
,
u
.
"LFLO"
,
u
.
"LongDebtToAsset"
,
u
.
"LongDebtToWorkingCapital"
,
u
.
"LongTermDebtToAsset"
,
u
.
"MA10"
,
u
.
"MA120"
,
u
.
"MA20"
,
u
.
"MA5"
,
u
.
"MA60"
,
u
.
"MAWVAD"
,
u
.
"MFI"
,
u
.
"MLEV"
,
u
.
"NetAssetGrowRate"
,
u
.
"NetProfitGrowRate"
,
u
.
"NetProfitRatio"
,
u
.
"NOCFToOperatingNI"
,
u
.
"NonCurrentAssetsRatio"
,
u
.
"NPParentCompanyGrowRate"
,
u
.
"NPToTOR"
,
u
.
"OperatingExpenseRate"
,
u
.
"OperatingProfitGrowRate"
,
u
.
"OperatingProfitRatio"
,
u
.
"OperatingProfitToTOR"
,
u
.
"OperatingRevenueGrowRate"
,
u
.
"OperCashGrowRate"
,
u
.
"OperCashInToCurrentLiability"
,
u
.
"PB"
,
u
.
"PCF"
,
u
.
"PE"
,
u
.
"PS"
,
u
.
"PSY"
,
u
.
"QuickRatio"
,
u
.
"REVS10"
,
u
.
"REVS20"
,
u
.
"REVS5"
,
u
.
"ROA"
,
u
.
"ROA5"
,
u
.
"ROE"
,
u
.
"ROE5"
,
u
.
"RSI"
,
u
.
"RSTR12"
,
u
.
"RSTR24"
,
u
.
"SalesCostRatio"
,
u
.
"SaleServiceCashToOR"
,
u
.
"SUE"
,
u
.
"TaxRatio"
,
u
.
"TOBT"
,
u
.
"TotalAssetGrowRate"
,
u
.
"TotalAssetsTRate"
,
u
.
"TotalProfitCostRatio"
,
u
.
"TotalProfitGrowRate"
,
u
.
"VOL10"
,
u
.
"VOL120"
,
u
.
"VOL20"
,
u
.
"VOL240"
,
u
.
"VOL5"
,
u
.
"VOL60"
,
u
.
"WVAD"
,
u
.
"REC"
,
u
.
"DAREC"
,
u
.
"GREC"
,
u
.
"FY12P"
,
u
.
"DAREV"
,
u
.
"GREV"
,
u
.
"SFY12P"
,
u
.
"DASREV"
,
u
.
"GSREV"
,
u
.
"FEARNG"
,
u
.
"FSALESG"
,
u
.
"TA2EV"
,
u
.
"CFO2EV"
,
u
.
"ACCA"
,
u
.
"DEGM"
,
u
.
"SUOI"
,
u
.
"EARNMOM"
,
u
.
"FiftyTwoWeekHigh"
,
u
.
"Volatility"
,
u
.
"Skewness"
,
u
.
"ILLIQUIDITY"
,
u
.
"BackwardADJ"
,
u
.
"MACD"
,
u
.
"ADTM"
,
u
.
"ATR14"
,
u
.
"ATR6"
,
u
.
"BIAS10"
,
u
.
"BIAS20"
,
u
.
"BIAS5"
,
u
.
"BIAS60"
,
u
.
"BollDown"
,
u
.
"BollUp"
,
u
.
"CCI10"
,
u
.
"CCI20"
,
u
.
"CCI5"
,
u
.
"CCI88"
,
u
.
"KDJ_K"
,
u
.
"KDJ_D"
,
u
.
"KDJ_J"
,
u
.
"ROC6"
,
u
.
"ROC20"
,
u
.
"SBM"
,
u
.
"STM"
,
u
.
"UpRVI"
,
u
.
"DownRVI"
,
u
.
"RVI"
,
u
.
"SRMI"
,
u
.
"ChandeSD"
,
u
.
"ChandeSU"
,
u
.
"CMO"
,
u
.
"DBCD"
,
u
.
"ARC"
,
u
.
"OBV"
,
u
.
"OBV6"
,
u
.
"OBV20"
,
u
.
"TVMA20"
,
u
.
"TVMA6"
,
u
.
"TVSTD20"
,
u
.
"TVSTD6"
,
u
.
"VDEA"
,
u
.
"VDIFF"
,
u
.
"VEMA10"
,
u
.
"VEMA12"
,
u
.
"VEMA26"
,
u
.
"VEMA5"
,
u
.
"VMACD"
,
u
.
"VOSC"
,
u
.
"VR"
,
u
.
"VROC12"
,
u
.
"VROC6"
,
u
.
"VSTD10"
,
u
.
"VSTD20"
,
u
.
"KlingerOscillator"
,
u
.
"MoneyFlow20"
,
u
.
"AD"
,
u
.
"AD20"
,
u
.
"AD6"
,
u
.
"CoppockCurve"
,
u
.
"ASI"
,
u
.
"ChaikinOscillator"
,
u
.
"ChaikinVolatility"
,
u
.
"EMV14"
,
u
.
"EMV6"
,
u
.
"plusDI"
,
u
.
"minusDI"
,
u
.
"ADX"
,
u
.
"ADXR"
,
u
.
"Aroon"
,
u
.
"AroonDown"
,
u
.
"AroonUp"
,
u
.
"DEA"
,
u
.
"DIFF"
,
u
.
"DDI"
,
u
.
"DIZ"
,
u
.
"DIF"
,
u
.
"MTM"
,
u
.
"MTMMA"
,
u
.
"PVT"
,
u
.
"PVT6"
,
u
.
"PVT12"
,
u
.
"TRIX5"
,
u
.
"TRIX10"
,
u
.
"UOS"
,
u
.
"MA10RegressCoeff12"
,
u
.
"MA10RegressCoeff6"
,
u
.
"PLRC6"
,
u
.
"PLRC12"
,
u
.
"SwingIndex"
,
u
.
"Ulcer10"
,
u
.
"Ulcer5"
,
u
.
"Hurst"
,
u
.
"ACD6"
,
u
.
"ACD20"
,
u
.
"EMA12"
,
u
.
"EMA26"
,
u
.
"APBMA"
,
u
.
"BBI"
,
u
.
"BBIC"
,
u
.
"TEMA10"
,
u
.
"TEMA5"
,
u
.
"MA10Close"
,
u
.
"AR"
,
u
.
"BR"
,
u
.
"ARBR"
,
u
.
"CR20"
,
u
.
"MassIndex"
,
u
.
"BearPower"
,
u
.
"BullPower"
,
u
.
"Elder"
,
u
.
"NVI"
,
u
.
"PVI"
,
u
.
"RC12"
,
u
.
"RC24"
,
u
.
"JDQS20"
,
u
.
"Variance20"
,
u
.
"Variance60"
,
u
.
"Variance120"
,
u
.
"Kurtosis20"
,
u
.
"Kurtosis60"
,
u
.
"Kurtosis120"
,
u
.
"Alpha20"
,
u
.
"Alpha60"
,
u
.
"Alpha120"
,
u
.
"Beta20"
,
u
.
"Beta60"
,
u
.
"Beta120"
,
u
.
"SharpeRatio20"
,
u
.
"SharpeRatio60"
,
u
.
"SharpeRatio120"
,
u
.
"TreynorRatio20"
,
u
.
"TreynorRatio60"
,
u
.
"TreynorRatio120"
,
u
.
"InformationRatio20"
,
u
.
"InformationRatio60"
,
u
.
"InformationRatio120"
,
u
.
"GainVariance20"
,
u
.
"GainVariance60"
,
u
.
"GainVariance120"
,
u
.
"LossVariance20"
,
u
.
"LossVariance60"
,
u
.
"LossVariance120"
,
u
.
"GainLossVarianceRatio20"
,
u
.
"GainLossVarianceRatio60"
,
u
.
"GainLossVarianceRatio120"
,
u
.
"RealizedVolatility"
,
u
.
"REVS60"
,
u
.
"REVS120"
,
u
.
"REVS250"
,
u
.
"REVS750"
,
u
.
"REVS5m20"
,
u
.
"REVS5m60"
,
u
.
"REVS5Indu1"
,
u
.
"REVS20Indu1"
,
u
.
"Volumn1M"
,
u
.
"Volumn3M"
,
u
.
"Price1M"
,
u
.
"Price3M"
,
u
.
"Price1Y"
,
u
.
"Rank1M"
,
u
.
"CashDividendCover"
,
u
.
"DividendCover"
,
u
.
"DividendPaidRatio"
,
u
.
"RetainedEarningRatio"
,
u
.
"CashEquivalentPS"
,
u
.
"DividendPS"
,
u
.
"EPSTTM"
,
u
.
"NetAssetPS"
,
u
.
"TORPS"
,
u
.
"TORPSLatest"
,
u
.
"OperatingRevenuePS"
,
u
.
"OperatingRevenuePSLatest"
,
u
.
"OperatingProfitPS"
,
u
.
"OperatingProfitPSLatest"
,
u
.
"CapitalSurplusFundPS"
,
u
.
"SurplusReserveFundPS"
,
u
.
"UndividedProfitPS"
,
u
.
"RetainedEarningsPS"
,
u
.
"OperCashFlowPS"
,
u
.
"CashFlowPS"
,
u
.
"NetNonOIToTP"
,
u
.
"NetNonOIToTPLatest"
,
u
.
"PeriodCostsRate"
,
u
.
"InterestCover"
,
u
.
"NetProfitGrowRate3Y"
,
u
.
"NetProfitGrowRate5Y"
,
u
.
"OperatingRevenueGrowRate3Y"
,
u
.
"OperatingRevenueGrowRate5Y"
,
u
.
"NetCashFlowGrowRate"
,
u
.
"NetProfitCashCover"
,
u
.
"OperCashInToAsset"
,
u
.
"CashConversionCycle"
,
u
.
"OperatingCycle"
,
u
.
"PEG3Y"
,
u
.
"PEG5Y"
,
u
.
"PEIndu"
,
u
.
"PBIndu"
,
u
.
"PSIndu"
,
u
.
"PCFIndu"
,
u
.
"PEHist20"
,
u
.
"PEHist60"
,
u
.
"PEHist120"
,
u
.
"PEHist250"
,
u
.
"StaticPE"
,
u
.
"ForwardPE"
,
u
.
"EnterpriseFCFPS"
,
u
.
"ShareholderFCFPS"
,
u
.
"ROEDiluted"
,
u
.
"ROEAvg"
,
u
.
"ROEWeighted"
,
u
.
"ROECut"
,
u
.
"ROECutWeighted"
,
u
.
"ROIC"
,
u
.
"ROAEBIT"
,
u
.
"ROAEBITTTM"
,
u
.
"OperatingNIToTP"
,
u
.
"OperatingNIToTPLatest"
,
u
.
"InvestRAssociatesToTP"
,
u
.
"InvestRAssociatesToTPLatest"
,
u
.
"NPCutToNP"
,
u
.
"SuperQuickRatio"
,
u
.
"TSEPToInterestBearDebt"
,
u
.
"DebtTangibleEquityRatio"
,
u
.
"TangibleAToInteBearDebt"
,
u
.
"TangibleAToNetDebt"
,
u
.
"NOCFToTLiability"
,
u
.
"NOCFToInterestBearDebt"
,
u
.
"NOCFToNetDebt"
,
u
.
"TSEPToTotalCapital"
,
u
.
"InteBearDebtToTotalCapital"
,
u
.
"NPParentCompanyCutYOY"
,
u
.
"SalesServiceCashToORLatest"
,
u
.
"CashRateOfSalesLatest"
,
u
.
"NOCFToOperatingNILatest"
,
u
.
"TotalAssets"
,
u
.
"MktValue"
,
u
.
"NegMktValue"
,
u
.
"TEAP"
,
u
.
"NIAP"
,
u
.
"TotalFixedAssets"
,
u
.
"IntFreeCL"
,
u
.
"IntFreeNCL"
,
u
.
"IntCL"
,
u
.
"IntDebt"
,
u
.
"NetDebt"
,
u
.
"NetTangibleAssets"
,
u
.
"WorkingCapital"
,
u
.
"NetWorkingCapital"
,
u
.
"TotalPaidinCapital"
,
u
.
"RetainedEarnings"
,
u
.
"OperateNetIncome"
,
u
.
"ValueChgProfit"
,
u
.
"NetIntExpense"
,
u
.
"EBIT"
,
u
.
"EBITDA"
,
u
.
"EBIAT"
,
u
.
"NRProfitLoss"
,
u
.
"NIAPCut"
,
u
.
"FCFF"
,
u
.
"FCFE"
,
u
.
"DA"
,
u
.
"TRevenueTTM"
,
u
.
"TCostTTM"
,
u
.
"RevenueTTM"
,
u
.
"CostTTM"
,
u
.
"GrossProfitTTM"
,
u
.
"SalesExpenseTTM"
,
u
.
"AdminExpenseTTM"
,
u
.
"FinanExpenseTTM"
,
u
.
"AssetImpairLossTTM"
,
u
.
"NPFromOperatingTTM"
,
u
.
"NPFromValueChgTTM"
,
u
.
"OperateProfitTTM"
,
u
.
"NonOperatingNPTTM"
,
u
.
"TProfitTTM"
,
u
.
"NetProfitTTM"
,
u
.
"NetProfitAPTTM"
,
u
.
"SaleServiceRenderCashTTM"
,
u
.
"NetOperateCFTTM"
,
u
.
"NetInvestCFTTM"
,
u
.
"NetFinanceCFTTM"
,
u
.
"GrossProfit"
,
u
.
"Beta252"
,
u
.
"RSTR504"
,
u
.
"EPIBS"
,
u
.
"CETOP"
,
u
.
"DASTD"
,
u
.
"CmraCNE5"
,
u
.
"HsigmaCNE5"
,
u
.
"SGRO"
,
u
.
"EgibsLong"
,
u
.
"STOM"
,
u
.
"STOQ"
,
u
.
"STOA"
,
u
.
"NLSIZE"
,
l
.
"ROEAfterNonRecurring"
,
l
.
"EPSAfterNonRecurring"
,
l
.
"EODPrice"
,
l
.
"LogFloatCap"
,
l
.
"BPS"
,
l
.
"SPS"
,
l
.
"DebtToAsset"
,
l
.
"DROEAfterNonRecurring"
,
l
.
"LogTotalCap"
,
l
.
"BP"
,
l
.
"SP"
,
l
.
"EPAfterNonRecurring"
,
l
.
"DivToB"
,
l
.
"DivP"
,
l
.
"EBITToSales"
,
l
.
"EBITAToSales"
,
l
.
"EVToSales"
,
l
.
"EVToEBIT"
,
l
.
"EVToEBITDA"
,
l
.
"EVToNOPLAT"
,
l
.
"EVToIC"
,
l
.
"FCFFPS"
,
l
.
"FCFFToEarningAfterNonRecurring"
,
l
.
"FCFFP"
,
l
.
"ProfitToAsset"
,
l
.
"GrossProfitRatio"
,
l
.
"LATO"
,
l
.
"FATO"
,
l
.
"TATO"
,
l
.
"EquityTO"
,
l
.
"PayableTO"
,
l
.
"RecievableTO"
,
l
.
"RevenueGrowth"
,
l
.
"GrossProfitGrowth"
,
l
.
"NetProfitGrowth"
,
l
.
"GrossCFToRevenue"
,
l
.
"CFToRevenue"
,
l
.
"CFToProfit"
,
l
.
"CFToAsset"
,
l
.
"GrossCFGrowth"
,
l
.
"CFGrowth"
,
l
.
"ICFGrowth"
,
l
.
"AveAmount60"
,
l
.
"PeriodReturn60"
,
l
.
"AmountRatio60to250"
,
l
.
"CFPS"
,
l
.
"CFP"
,
l
.
"NetCFGrowth"
,
l
.
"NetCFGrowthP"
,
l
.
"NetCash"
,
l
.
"NetCashP"
,
l
.
"BVPSGrowth"
,
l
.
"EquityPSGrowth"
,
l
.
"WholeSales"
,
l
.
"WholeProfitAfterNonRecurring"
,
l
.
"ExpenseRatio"
,
l
.
"AcidTestRatio"
,
l
.
"TimeInterestEarnedRatio"
,
l
.
"DepositReceivedVsSale"
,
l
.
"DebtRatioExcemptDepRec"
,
l
.
"SNBARatio"
,
t
.
"CFinc1"
,
t
.
"BDTO"
,
t
.
"RVOL"
,
t
.
"CHV"
,
t
.
"VAL"
,
r
.
"BETA"
,
r
.
"MOMENTUM"
,
r
.
"SIZE"
,
r
.
"EARNYILD"
,
r
.
"RESVOL"
,
r
.
"GROWTH"
,
r
.
"BTOP"
,
r
.
"LEVERAGE"
,
r
.
"LIQUIDTY"
,
r
.
"SIZENL"
,
r
.
"Bank"
,
r
.
"RealEstate"
,
r
.
"Health"
,
r
.
"Transportation"
,
r
.
"Mining"
,
r
.
"NonFerMetal"
,
r
.
"HouseApp"
,
r
.
"LeiService"
,
r
.
"MachiEquip"
,
r
.
"BuildDeco"
,
r
.
"CommeTrade"
,
r
.
"CONMAT"
,
r
.
"Auto"
,
r
.
"Textile"
,
r
.
"FoodBever"
,
r
.
"Electronics"
,
r
.
"Computer"
,
r
.
"LightIndus"
,
r
.
"Utilities"
,
r
.
"Telecom"
,
r
.
"AgriForest"
,
r
.
"CHEM"
,
r
.
"Media"
,
r
.
"IronSteel"
,
r
.
"NonBankFinan"
,
r
.
"ELECEQP"
,
r
.
"AERODEF"
,
r
.
"Conglomerates"
,
r
.
"COUNTRY"
r
.
"BETA"
,
r
.
"MOMENTUM"
,
r
.
"SIZE"
,
r
.
"EARNYILD"
,
r
.
"RESVOL"
,
r
.
"GROWTH"
,
r
.
"BTOP"
,
r
.
"LEVERAGE"
,
r
.
"LIQUIDTY"
,
r
.
"SIZENL"
,
r
.
"Bank"
,
r
.
"RealEstate"
,
r
.
"Health"
,
r
.
"Transportation"
,
r
.
"Mining"
,
r
.
"NonFerMetal"
,
r
.
"HouseApp"
,
r
.
"LeiService"
,
r
.
"MachiEquip"
,
r
.
"BuildDeco"
,
r
.
"CommeTrade"
,
r
.
"CONMAT"
,
r
.
"Auto"
,
r
.
"Textile"
,
r
.
"FoodBever"
,
r
.
"Electronics"
,
r
.
"Computer"
,
r
.
"LightIndus"
,
r
.
"Utilities"
,
r
.
"Telecom"
,
r
.
"AgriForest"
,
r
.
"CHEM"
,
r
.
"Media"
,
r
.
"IronSteel"
,
r
.
"NonBankFinan"
,
r
.
"ELECEQP"
,
r
.
"AERODEF"
,
r
.
"Conglomerates"
,
r
.
"COUNTRY"
,
s1
.
"SRISK"
as
d_srisk
,
s2
.
"SRISK"
as
s_srisk
,
s3
.
"SRISK"
as
l_srisk
FROM
market
AS
m
left
join
uqer
AS
u
on
m
.
trade_date
=
u
.
trade_date
and
m
.
code
=
u
.
code
inner
join
risk_exposure
AS
r
on
m
.
trade_date
=
r
.
trade_date
and
m
.
code
=
r
.
code
inner
join
specific_risk_day
as
s1
on
m
.
trade_date
=
s1
.
trade_date
and
m
.
code
=
s1
.
code
inner
join
specific_risk_short
as
s2
on
m
.
trade_date
=
s2
.
trade_date
and
m
.
code
=
s2
.
code
inner
join
specific_risk_long
as
s3
on
m
.
trade_date
=
s3
.
trade_date
and
m
.
code
=
s3
.
code
left
join
legacy_factor
as
l
on
m
.
trade_date
=
l
.
trade_date
and
m
.
code
=
l
.
code
left
join
tiny
as
t
on
m
.
trade_date
=
t
.
trade_date
and
m
.
code
=
t
.
code
\ No newline at end of file
left
join
tiny
as
t
on
m
.
trade_date
=
t
.
trade_date
and
m
.
code
=
t
.
code
create
UNIQUE
index
on
MATERIALIZED
(
trade_date
,
code
)
\ No newline at end of file
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