Best Python code snippet using pyatom_python
factor_store.py
Source:factor_store.py  
1#! /usr/bin/env python2# -*- coding: utf-8 -*-3"""4@version: 0.15@author: li6@file: factor_store.py7@time: 2019/11/11 11:20 ä¸å8"""9from PyFin.api import *10from alphamind.api import *11# uqerå å ç»è¿CSQuantileså¤ç12basic_factor_store = {13    'AccountsPayablesTDays': CSQuantiles(LAST('AccountsPayablesTDays'), groups='sw1'),14    'AccountsPayablesTRate': CSQuantiles(LAST('AccountsPayablesTRate'), groups='sw1'),15    'AdminiExpenseRate': CSQuantiles(LAST('AdminiExpenseRate'), groups='sw1'),16    'ARTDays': CSQuantiles(LAST('ARTDays'), groups='sw1'),17    'ARTRate': CSQuantiles(LAST('ARTRate'), groups='sw1'),18    'ASSI': CSQuantiles(LAST('ASSI'), groups='sw1'),19    'BLEV': CSQuantiles(LAST('BLEV'), groups='sw1'),20    'BondsPayableToAsset': CSQuantiles(LAST('BondsPayableToAsset'), groups='sw1'),21    'CashRateOfSales': CSQuantiles(LAST('CashRateOfSales'), groups='sw1'),22    'CashToCurrentLiability': CSQuantiles(LAST('CashToCurrentLiability'), groups='sw1'),23    'CMRA': CSQuantiles(LAST('CMRA'), groups='sw1'),24    'CTOP': CSQuantiles(LAST('CTOP'), groups='sw1'),25    'CTP5': CSQuantiles(LAST('CTP5'), groups='sw1'),26    'CurrentAssetsRatio': CSQuantiles(LAST('CurrentAssetsRatio'), groups='sw1'),27    'CurrentAssetsTRate': CSQuantiles(LAST('CurrentAssetsTRate'), groups='sw1'),28    'CurrentRatio': CSQuantiles(LAST('CurrentRatio'), groups='sw1'),29    'DAVOL10': CSQuantiles(LAST('DAVOL10'), groups='sw1'),30    'DAVOL20': CSQuantiles(LAST('DAVOL20'), groups='sw1'),31    'DAVOL5': CSQuantiles(LAST('DAVOL5'), groups='sw1'),32    'DDNBT': CSQuantiles(LAST('DDNBT'), groups='sw1'),33    'DDNCR': CSQuantiles(LAST('DDNCR'), groups='sw1'),34    'DDNSR': CSQuantiles(LAST('DDNSR'), groups='sw1'),35    'DebtEquityRatio': CSQuantiles(LAST('DebtEquityRatio'), groups='sw1'),36    'DebtsAssetRatio': CSQuantiles(LAST('DebtsAssetRatio'), groups='sw1'),37    'DHILO': CSQuantiles(LAST('DHILO'), groups='sw1'),38    'DilutedEPS': CSQuantiles(LAST('DilutedEPS'), groups='sw1'),39    'DVRAT': CSQuantiles(LAST('DVRAT'), groups='sw1'),40    'EBITToTOR': CSQuantiles(LAST('EBITToTOR'), groups='sw1'),41    'EGRO': CSQuantiles(LAST('EGRO'), groups='sw1'),42    'EMA10': CSQuantiles(LAST('EMA10'), groups='sw1'),43    'EMA120': CSQuantiles(LAST('EMA120'), groups='sw1'),44    'EMA20': CSQuantiles(LAST('EMA20'), groups='sw1'),45    'EMA5': CSQuantiles(LAST('EMA5'), groups='sw1'),46    'EMA60': CSQuantiles(LAST('EMA60'), groups='sw1'),47    'EPS': CSQuantiles(LAST('EPS'), groups='sw1'),48    'EquityFixedAssetRatio': CSQuantiles(LAST('EquityFixedAssetRatio'), groups='sw1'),49    'EquityToAsset': CSQuantiles(LAST('EquityToAsset'), groups='sw1'),50    'EquityTRate': CSQuantiles(LAST('EquityTRate'), groups='sw1'),51    'ETOP': CSQuantiles(LAST('ETOP'), groups='sw1'),52    'ETP5': CSQuantiles(LAST('ETP5'), groups='sw1'),53    'FinancialExpenseRate': CSQuantiles(LAST('FinancialExpenseRate'), groups='sw1'),54    'FinancingCashGrowRate': CSQuantiles(LAST('FinancingCashGrowRate'), groups='sw1'),55    'FixAssetRatio': CSQuantiles(LAST('FixAssetRatio'), groups='sw1'),56    'FixedAssetsTRate': CSQuantiles(LAST('FixedAssetsTRate'), groups='sw1'),57    'GrossIncomeRatio': CSQuantiles(LAST('GrossIncomeRatio'), groups='sw1'),58    'HBETA': CSQuantiles(LAST('HBETA'), groups='sw1'),59    'HSIGMA': CSQuantiles(LAST('HBETA'), groups='sw1'),60    'IntangibleAssetRatio': CSQuantiles(LAST('IntangibleAssetRatio'), groups='sw1'),61    'InventoryTDays': CSQuantiles(LAST('InventoryTDays'), groups='sw1'),62    'InventoryTRate': CSQuantiles(LAST('InventoryTRate'), groups='sw1'),63    'InvestCashGrowRate': CSQuantiles(LAST('InvestCashGrowRate'), groups='sw1'),64    'LCAP': CSQuantiles(LAST('LCAP'), groups='sw1'),65    'LFLO': CSQuantiles(LAST('LFLO'), groups='sw1'),66    'LongDebtToAsset': CSQuantiles(LAST('LongDebtToAsset'), groups='sw1'),67    'LongDebtToWorkingCapital': CSQuantiles(LAST('LongDebtToWorkingCapital'), groups='sw1'),68    'LongTermDebtToAsset': CSQuantiles(LAST('LongTermDebtToAsset'), groups='sw1'),69    'MA10': CSQuantiles(LAST('MA10'), groups='sw1'),70    'MA120': CSQuantiles(LAST('MA120'), groups='sw1'),71    'MA20': CSQuantiles(LAST('MA20'), groups='sw1'),72    'MA5': CSQuantiles(LAST('MA5'), groups='sw1'),73    'MA60': CSQuantiles(LAST('MA60'), groups='sw1'),74    'MAWVAD': CSQuantiles(LAST('MAWVAD'), groups='sw1'),75    'MFI': CSQuantiles(LAST('MFI'), groups='sw1'),76    'MLEV': CSQuantiles(LAST('MLEV'), groups='sw1'),77    'NetAssetGrowRate': CSQuantiles(LAST('NetAssetGrowRate'), groups='sw1'),78    'NetProfitGrowRate': CSQuantiles(LAST('NetProfitGrowRate'), groups='sw1'),79    'NetProfitRatio': CSQuantiles(LAST('NetProfitRatio'), groups='sw1'),80    'NOCFToOperatingNI': CSQuantiles(LAST('NetProfitRatio'), groups='sw1'),81    'NonCurrentAssetsRatio': CSQuantiles(LAST('NonCurrentAssetsRatio'), groups='sw1'),82    'NPParentCompanyGrowRate': CSQuantiles(LAST('NPParentCompanyGrowRate'), groups='sw1'),83    'NPToTOR': CSQuantiles(LAST('NPToTOR'), groups='sw1'),84    'OperatingExpenseRate': CSQuantiles(LAST('OperatingExpenseRate'), groups='sw1'),85    'OperatingProfitGrowRate': CSQuantiles(LAST('OperatingProfitGrowRate'), groups='sw1'),86    'OperatingProfitRatio': CSQuantiles(LAST('OperatingProfitRatio'), groups='sw1'),87    'OperatingProfitToTOR': CSQuantiles(LAST('OperatingProfitToTOR'), groups='sw1'),88    'OperatingRevenueGrowRate': CSQuantiles(LAST('OperatingRevenueGrowRate'), groups='sw1'),89    'OperCashGrowRate': CSQuantiles(LAST('OperCashGrowRate'), groups='sw1'),90    'OperCashInToCurrentLiability': CSQuantiles(LAST('OperCashInToCurrentLiability'), groups='sw1'),91    'PB': CSQuantiles(LAST('PB'), groups='sw1'),92    'PCF': CSQuantiles(LAST('PCF'), groups='sw1'),93    'PE': CSQuantiles(LAST('PE'), groups='sw1'),94    'PS': CSQuantiles(LAST('PS'), groups='sw1'),95    'PSY': CSQuantiles(LAST('PSY'), groups='sw1'),96    'QuickRatio': CSQuantiles(LAST('QuickRatio'), groups='sw1'),97    'REVS10': CSQuantiles(LAST('REVS10'), groups='sw1'),98    'REVS20': CSQuantiles(LAST('REVS20'), groups='sw1'),99    'REVS5': CSQuantiles(LAST('REVS5'), groups='sw1'),100    'ROA': CSQuantiles(LAST('REVS5'), groups='sw1'),101    'ROA5': CSQuantiles(LAST('ROA5'), groups='sw1'),102    'ROE': CSQuantiles(LAST('ROE'), groups='sw1'),103    'ROE5': CSQuantiles(LAST('ROE5'), groups='sw1'),104    'RSI': CSQuantiles(LAST('RSI'), groups='sw1'),105    'RSTR12': CSQuantiles(LAST('RSTR12'), groups='sw1'),106    'RSTR24': CSQuantiles(LAST('RSTR24'), groups='sw1'),107    'SalesCostRatio': CSQuantiles(LAST('SalesCostRatio'), groups='sw1'),108    'SaleServiceCashToOR': CSQuantiles(LAST('SaleServiceCashToOR'), groups='sw1'),109    'SUE': CSQuantiles(LAST('SUE'), groups='sw1'),110    'TaxRatio': CSQuantiles(LAST('TaxRatio'), groups='sw1'),111    'TOBT': CSQuantiles(LAST('TOBT'), groups='sw1'),112    'TotalAssetGrowRate': CSQuantiles(LAST('TotalAssetGrowRate'), groups='sw1'),113    'TotalAssetsTRate': CSQuantiles(LAST('TotalAssetsTRate'), groups='sw1'),114    'TotalProfitCostRatio': CSQuantiles(LAST('TotalProfitCostRatio'), groups='sw1'),115    'TotalProfitGrowRate': CSQuantiles(LAST('TotalProfitGrowRate'), groups='sw1'),116    'VOL10': CSQuantiles(LAST('VOL10'), groups='sw1'),117    'VOL120': CSQuantiles(LAST('VOL120'), groups='sw1'),118    'VOL20': CSQuantiles(LAST('VOL20'), groups='sw1'),119    'VOL240': CSQuantiles(LAST('VOL240'), groups='sw1'),120    'VOL5': CSQuantiles(LAST('VOL5'), groups='sw1'),121    'VOL60': CSQuantiles(LAST('VOL60'), groups='sw1'),122    'WVAD': CSQuantiles(LAST('WVAD'), groups='sw1'),123    'REC': CSQuantiles(LAST('REC'), groups='sw1'),124    'DAREC': CSQuantiles(LAST('DAREC'), groups='sw1'),125    'GREC': CSQuantiles(LAST('GREC'), groups='sw1'),126    'FY12P': CSQuantiles(LAST('FY12P'), groups='sw1'),127    'DAREV': CSQuantiles(LAST('DAREV'), groups='sw1'),128    'GREV': CSQuantiles(LAST('GREV'), groups='sw1'),129    'SFY12P': CSQuantiles(LAST('SFY12P'), groups='sw1'),130    'DASREV': CSQuantiles(LAST('DASREV'), groups='sw1'),131    'GSREV': CSQuantiles(LAST('GSREV'), groups='sw1'),132    'FEARNG': CSQuantiles(LAST('FEARNG'), groups='sw1'),133    'FSALESG': CSQuantiles(LAST('FSALESG'), groups='sw1'),134    'TA2EV': CSQuantiles(LAST('TA2EV'), groups='sw1'),135    'CFO2EV': CSQuantiles(LAST('CFO2EV'), groups='sw1'),136    'ACCA': CSQuantiles(LAST('ACCA'), groups='sw1'),137    'DEGM': CSQuantiles(LAST('DEGM'), groups='sw1'),138    'SUOI': CSQuantiles(LAST('SUOI'), groups='sw1'),139    'EARNMOM': CSQuantiles(LAST('EARNMOM'), groups='sw1'),140    'FiftyTwoWeekHigh': CSQuantiles(LAST('FiftyTwoWeekHigh'), groups='sw1'),141    'Volatility': CSQuantiles(LAST('Volatility'), groups='sw1'),142    'Skewness': CSQuantiles(LAST('Skewness'), groups='sw1'),143    'ILLIQUIDITY': CSQuantiles(LAST('ILLIQUIDITY'), groups='sw1'),144    'BackwardADJ': CSQuantiles(LAST('BackwardADJ'), groups='sw1'),145    'MACD': CSQuantiles(LAST('MACD'), groups='sw1'),146    'ADTM': CSQuantiles(LAST('ADTM'), groups='sw1'),147    'ATR14': CSQuantiles(LAST('ATR14'), groups='sw1'),148    'ATR6': CSQuantiles(LAST('ATR6'), groups='sw1'),149    'BIAS10': CSQuantiles(LAST('BIAS10'), groups='sw1'),150    'BIAS20': CSQuantiles(LAST('BIAS20'), groups='sw1'),151    'BIAS5': CSQuantiles(LAST('BIAS5'), groups='sw1'),152    'BIAS60': CSQuantiles(LAST('BIAS60'), groups='sw1'),153    'BollDown': CSQuantiles(LAST('BollDown'), groups='sw1'),154    'BollUp': CSQuantiles(LAST('BollUp'), groups='sw1'),155    'CCI10': CSQuantiles(LAST('CCI10'), groups='sw1'),156    'CCI20': CSQuantiles(LAST('CCI20'), groups='sw1'),157    'CCI5': CSQuantiles(LAST('CCI5'), groups='sw1'),158    'CCI88': CSQuantiles(LAST('CCI88'), groups='sw1'),159    'KDJ_K': CSQuantiles(LAST('KDJ_K'), groups='sw1'),160    'KDJ_D': CSQuantiles(LAST('KDJ_D'), groups='sw1'),161    'KDJ_J': CSQuantiles(LAST('KDJ_J'), groups='sw1'),162    'ROC6': CSQuantiles(LAST('ROC6'), groups='sw1'),163    'ROC20': CSQuantiles(LAST('ROC20'), groups='sw1'),164    'SBM': CSQuantiles(LAST('SBM'), groups='sw1'),165    'STM': CSQuantiles(LAST('STM'), groups='sw1'),166    'UpRVI': CSQuantiles(LAST('UpRVI'), groups='sw1'),167    'DownRVI': CSQuantiles(LAST('DownRVI'), groups='sw1'),168    'RVI': CSQuantiles(LAST('RVI'), groups='sw1'),169    'SRMI': CSQuantiles(LAST('SRMI'), groups='sw1'),170    'ChandeSD': CSQuantiles(LAST('ChandeSD'), groups='sw1'),171    'ChandeSU': CSQuantiles(LAST('ChandeSU'), groups='sw1'),172    'CMO': CSQuantiles(LAST('CMO'), groups='sw1'),173    'DBCD': CSQuantiles(LAST('DBCD'), groups='sw1'),174    'ARC': CSQuantiles(LAST('ARC'), groups='sw1'),175    'OBV': CSQuantiles(LAST('OBV'), groups='sw1'),176    'OBV6': CSQuantiles(LAST('OBV6'), groups='sw1'),177    'OBV20': CSQuantiles(LAST('OBV20'), groups='sw1'),178    'TVMA20': CSQuantiles(LAST('TVMA20'), groups='sw1'),179    'TVMA6': CSQuantiles(LAST('TVMA6'), groups='sw1'),180    'TVSTD20': CSQuantiles(LAST('TVSTD20'), groups='sw1'),181    'TVSTD6': CSQuantiles(LAST('TVSTD6'), groups='sw1'),182    'VDEA': CSQuantiles(LAST('VDEA'), groups='sw1'),183    'VDIFF': CSQuantiles(LAST('VDIFF'), groups='sw1'),184    'VEMA10': CSQuantiles(LAST('VEMA10'), groups='sw1'),185    'VEMA12': CSQuantiles(LAST('VEMA12'), groups='sw1'),186    'VEMA26': CSQuantiles(LAST('VEMA26'), groups='sw1'),187    'VEMA5': CSQuantiles(LAST('VEMA5'), groups='sw1'),188    'VMACD': CSQuantiles(LAST('VMACD'), groups='sw1'),189    'VR': CSQuantiles(LAST('VR'), groups='sw1'),190    'VROC12': CSQuantiles(LAST('VROC12'), groups='sw1'),191    'VROC6': CSQuantiles(LAST('VROC6'), groups='sw1'),192    'VSTD10': CSQuantiles(LAST('VSTD10'), groups='sw1'),193    'VSTD20': CSQuantiles(LAST('VSTD20'), groups='sw1'),194    'KlingerOscillator': CSQuantiles(LAST('KlingerOscillator'), groups='sw1'),195    'MoneyFlow20': CSQuantiles(LAST('MoneyFlow20'), groups='sw1'),196    'AD': CSQuantiles(LAST('AD'), groups='sw1'),197    'AD20': CSQuantiles(LAST('AD20'), groups='sw1'),198    'AD6': CSQuantiles(LAST('AD6'), groups='sw1'),199    'CoppockCurve': CSQuantiles(LAST('CoppockCurve'), groups='sw1'),200    'ASI': CSQuantiles(LAST('ASI'), groups='sw1'),201    'ChaikinOscillator': CSQuantiles(LAST('ChaikinOscillator'), groups='sw1'),202    'ChaikinVolatility': CSQuantiles(LAST('ChaikinVolatility'), groups='sw1'),203    'EMV14': CSQuantiles(LAST('EMV14'), groups='sw1'),204    'EMV6': CSQuantiles(LAST('EMV6'), groups='sw1'),205    'plusDI': CSQuantiles(LAST('plusDI'), groups='sw1'),206    'minusDI': CSQuantiles(LAST('minusDI'), groups='sw1'),207    'ADX': CSQuantiles(LAST('ADX'), groups='sw1'),208    'ADXR': CSQuantiles(LAST('ADXR'), groups='sw1'),209    'Aroon': CSQuantiles(LAST('Aroon'), groups='sw1'),210    'AroonDown': CSQuantiles(LAST('AroonDown'), groups='sw1'),211    'AroonUp': CSQuantiles(LAST('AroonUp'), groups='sw1'),212    'DEA': CSQuantiles(LAST('DEA'), groups='sw1'),213    'DIFF': CSQuantiles(LAST('DIFF'), groups='sw1'),214    'DDI': CSQuantiles(LAST('DDI'), groups='sw1'),215    'DIZ': CSQuantiles(LAST('DIZ'), groups='sw1'),216    'DIF': CSQuantiles(LAST('DIF'), groups='sw1'),217    'MTM': CSQuantiles(LAST('MTM'), groups='sw1'),218    'MTMMA': CSQuantiles(LAST('MTMMA'), groups='sw1'),219    'PVT': CSQuantiles(LAST('PVT'), groups='sw1'),220    'PVT6': CSQuantiles(LAST('PVT6'), groups='sw1'),221    'PVT12': CSQuantiles(LAST('PVT12'), groups='sw1'),222    'TRIX5': CSQuantiles(LAST('TRIX5'), groups='sw1'),223    'TRIX10': CSQuantiles(LAST('TRIX10'), groups='sw1'),224    'UOS': CSQuantiles(LAST('UOS'), groups='sw1'),225    'MA10RegressCoeff12': CSQuantiles(LAST('MA10RegressCoeff12'), groups='sw1'),226    'MA10RegressCoeff6': CSQuantiles(LAST('MA10RegressCoeff6'), groups='sw1'),227    'PLRC6': CSQuantiles(LAST('PLRC6'), groups='sw1'),228    'PLRC12': CSQuantiles(LAST('PLRC12'), groups='sw1'),229    'SwingIndex': CSQuantiles(LAST('SwingIndex'), groups='sw1'),230    'Ulcer10': CSQuantiles(LAST('Ulcer10'), groups='sw1'),231    'Ulcer5': CSQuantiles(LAST('Ulcer5'), groups='sw1'),232    'Hurst': CSQuantiles(LAST('Hurst'), groups='sw1'),233    'ACD6': CSQuantiles(LAST('ACD6'), groups='sw1'),234    'ACD20': CSQuantiles(LAST('ACD20'), groups='sw1'),235    'EMA12': CSQuantiles(LAST('EMA12'), groups='sw1'),236    'EMA26': CSQuantiles(LAST('EMA26'), groups='sw1'),237    'APBMA': CSQuantiles(LAST('APBMA'), groups='sw1'),238    'BBI': CSQuantiles(LAST('APBMA'), groups='sw1'),239    'BBIC': CSQuantiles(LAST('BBIC'), groups='sw1'),240    'TEMA10': CSQuantiles(LAST('TEMA10'), groups='sw1'),241    'TEMA5': CSQuantiles(LAST('TEMA5'), groups='sw1'),242    'MA10Close': CSQuantiles(LAST('MA10Close'), groups='sw1'),243    'AR': CSQuantiles(LAST('AR'), groups='sw1'),244    'BR': CSQuantiles(LAST('BR'), groups='sw1'),245    'ARBR': CSQuantiles(LAST('ARBR'), groups='sw1'),246    'CR20': CSQuantiles(LAST('CR20'), groups='sw1'),247    'MassIndex': CSQuantiles(LAST('MassIndex'), groups='sw1'),248    'BearPower': CSQuantiles(LAST('BearPower'), groups='sw1'),249    'BullPower': CSQuantiles(LAST('BullPower'), groups='sw1'),250    'Elder': CSQuantiles(LAST('Elder'), groups='sw1'),251    'NVI': CSQuantiles(LAST('NVI'), groups='sw1'),252    'PVI': CSQuantiles(LAST('PVI'), groups='sw1'),253    'RC12': CSQuantiles(LAST('RC12'), groups='sw1'),254    'RC24': CSQuantiles(LAST('RC24'), groups='sw1'),255    'JDQS20': CSQuantiles(LAST('JDQS20'), groups='sw1'),256    'Variance20': CSQuantiles(LAST('Variance20'), groups='sw1'),257    'Variance60': CSQuantiles(LAST('Variance60'), groups='sw1'),258    'Variance120': CSQuantiles(LAST('Variance120'), groups='sw1'),259    'Kurtosis20': CSQuantiles(LAST('Kurtosis20'), groups='sw1'),260    'Kurtosis60': CSQuantiles(LAST('Kurtosis60'), groups='sw1'),261    'Kurtosis120': CSQuantiles(LAST('Kurtosis120'), groups='sw1'),262    'Alpha20': CSQuantiles(LAST('Alpha20'), groups='sw1'),263    'Alpha60': CSQuantiles(LAST('Alpha60'), groups='sw1'),264    'Alpha120': CSQuantiles(LAST('Alpha120'), groups='sw1'),265    'Beta20': CSQuantiles(LAST('Beta20'), groups='sw1'),266    'Beta60': CSQuantiles(LAST('Beta60'), groups='sw1'),267    'Beta120': CSQuantiles(LAST('Beta60'), groups='sw1'),268    'SharpeRatio20': CSQuantiles(LAST('SharpeRatio20'), groups='sw1'),269    'SharpeRatio60': CSQuantiles(LAST('SharpeRatio60'), groups='sw1'),270    'SharpeRatio120': CSQuantiles(LAST('SharpeRatio120'), groups='sw1'),271    'TreynorRatio20': CSQuantiles(LAST('TreynorRatio20'), groups='sw1'),272    'TreynorRatio60': CSQuantiles(LAST('TreynorRatio60'), groups='sw1'),273    'TreynorRatio120': CSQuantiles(LAST('TreynorRatio120'), groups='sw1'),274    'InformationRatio20': CSQuantiles(LAST('InformationRatio20'), groups='sw1'),275    'InformationRatio60': CSQuantiles(LAST('InformationRatio60'), groups='sw1'),276    'InformationRatio120': CSQuantiles(LAST('InformationRatio120'), groups='sw1'),277    'GainVariance20': CSQuantiles(LAST('GainVariance20'), groups='sw1'),278    'GainVariance60': CSQuantiles(LAST('GainVariance60'), groups='sw1'),279    'GainVariance120': CSQuantiles(LAST('GainVariance120'), groups='sw1'),280    'LossVariance20': CSQuantiles(LAST('LossVariance20'), groups='sw1'),281    'LossVariance60': CSQuantiles(LAST('LossVariance60'), groups='sw1'),282    'LossVariance120': CSQuantiles(LAST('LossVariance120'), groups='sw1'),283    'GainLossVarianceRatio20': CSQuantiles(LAST('GainLossVarianceRatio20'), groups='sw1'),284    'GainLossVarianceRatio60': CSQuantiles(LAST('GainLossVarianceRatio60'), groups='sw1'),285    'GainLossVarianceRatio120': CSQuantiles(LAST('GainLossVarianceRatio120'), groups='sw1'),286    'RealizedVolatility': CSQuantiles(LAST('RealizedVolatility'), groups='sw1'),287    'REVS60': CSQuantiles(LAST('REVS60'), groups='sw1'),288    'REVS120': CSQuantiles(LAST('REVS120'), groups='sw1'),289    'REVS250': CSQuantiles(LAST('REVS250'), groups='sw1'),290    'REVS750': CSQuantiles(LAST('REVS750'), groups='sw1'),291    'REVS5m20': CSQuantiles(LAST('REVS5m20'), groups='sw1'),292    'REVS5m60': CSQuantiles(LAST('REVS5m60'), groups='sw1'),293    'REVS5Indu1': CSQuantiles(LAST('REVS5Indu1'), groups='sw1'),294    'REVS20Indu1': CSQuantiles(LAST('REVS20Indu1'), groups='sw1'),295    'Volumn1M': CSQuantiles(LAST('Volumn1M'), groups='sw1'),296    'Volumn3M': CSQuantiles(LAST('Volumn3M'), groups='sw1'),297    'Price1M': CSQuantiles(LAST('Price1M'), groups='sw1'),298    'Price3M': CSQuantiles(LAST('Price3M'), groups='sw1'),299    'Price1Y': CSQuantiles(LAST('Price1Y'), groups='sw1'),300    'Rank1M': CSQuantiles(LAST('Rank1M'), groups='sw1'),301    'CashDividendCover': CSQuantiles(LAST('CashDividendCover'), groups='sw1'),302    'DividendCover': CSQuantiles(LAST('DividendCover'), groups='sw1'),303    'DividendPaidRatio': CSQuantiles(LAST('DividendPaidRatio'), groups='sw1'),304    'RetainedEarningRatio': CSQuantiles(LAST('RetainedEarningRatio'), groups='sw1'),305    'CashEquivalentPS': CSQuantiles(LAST('CashEquivalentPS'), groups='sw1'),306    'DividendPS': CSQuantiles(LAST('DividendPS'), groups='sw1'),307    'EPSTTM': CSQuantiles(LAST('EPSTTM'), groups='sw1'),308    'NetAssetPS': CSQuantiles(LAST('NetAssetPS'), groups='sw1'),309    'TORPS': CSQuantiles(LAST('TORPS'), groups='sw1'),310    'TORPSLatest': CSQuantiles(LAST('TORPSLatest'), groups='sw1'),311    'OperatingRevenuePS': CSQuantiles(LAST('OperatingRevenuePS'), groups='sw1'),312    'OperatingRevenuePSLatest': CSQuantiles(LAST('OperatingRevenuePSLatest'), groups='sw1'),313    'OperatingProfitPS': CSQuantiles(LAST('OperatingProfitPS'), groups='sw1'),314    'OperatingProfitPSLatest': CSQuantiles(LAST('OperatingProfitPSLatest'), groups='sw1'),315    'CapitalSurplusFundPS': CSQuantiles(LAST('CapitalSurplusFundPS'), groups='sw1'),316    'SurplusReserveFundPS': CSQuantiles(LAST('SurplusReserveFundPS'), groups='sw1'),317    'UndividedProfitPS': CSQuantiles(LAST('UndividedProfitPS'), groups='sw1'),318    'RetainedEarningsPS': CSQuantiles(LAST('RetainedEarningsPS'), groups='sw1'),319    'OperCashFlowPS': CSQuantiles(LAST('OperCashFlowPS'), groups='sw1'),320    'CashFlowPS': CSQuantiles(LAST('CashFlowPS'), groups='sw1'),321    'NetNonOIToTP': CSQuantiles(LAST('NetNonOIToTP'), groups='sw1'),322    'NetNonOIToTPLatest': CSQuantiles(LAST('NetNonOIToTPLatest'), groups='sw1'),323    'PeriodCostsRate': CSQuantiles(LAST('PeriodCostsRate'), groups='sw1'),324    'InterestCover': CSQuantiles(LAST('InterestCover'), groups='sw1'),325    'NetProfitGrowRate3Y': CSQuantiles(LAST('NetProfitGrowRate3Y'), groups='sw1'),326    'NetProfitGrowRate5Y': CSQuantiles(LAST('NetProfitGrowRate5Y'), groups='sw1'),327    'OperatingRevenueGrowRate3Y': CSQuantiles(LAST('OperatingRevenueGrowRate3Y'), groups='sw1'),328    'OperatingRevenueGrowRate5Y': CSQuantiles(LAST('OperatingRevenueGrowRate5Y'), groups='sw1'),329    'NetCashFlowGrowRate': CSQuantiles(LAST('NetCashFlowGrowRate'), groups='sw1'),330    'NetProfitCashCover': CSQuantiles(LAST('NetProfitCashCover'), groups='sw1'),331    'OperCashInToAsset': CSQuantiles(LAST('OperCashInToAsset'), groups='sw1'),332    'CashConversionCycle': CSQuantiles(LAST('CashConversionCycle'), groups='sw1'),333    'OperatingCycle': CSQuantiles(LAST('OperatingCycle'), groups='sw1'),334    'PEG3Y': CSQuantiles(LAST('PEG3Y'), groups='sw1'),335    'PEG5Y': CSQuantiles(LAST('PEG5Y'), groups='sw1'),336    'PEIndu': CSQuantiles(LAST('PEIndu'), groups='sw1'),337    'PBIndu': CSQuantiles(LAST('PBIndu'), groups='sw1'),338    'PSIndu': CSQuantiles(LAST('PSIndu'), groups='sw1'),339    'PCFIndu': CSQuantiles(LAST('PCFIndu'), groups='sw1'),340    'PEHist20': CSQuantiles(LAST('PEHist20'), groups='sw1'),341    'PEHist60': CSQuantiles(LAST('PEHist60'), groups='sw1'),342    'PEHist120': CSQuantiles(LAST('PEHist120'), groups='sw1'),343    'PEHist250': CSQuantiles(LAST('PEHist250'), groups='sw1'),344    'StaticPE': CSQuantiles(LAST('StaticPE'), groups='sw1'),345    'ForwardPE': CSQuantiles(LAST('ForwardPE'), groups='sw1'),346    'EnterpriseFCFPS': CSQuantiles(LAST('EnterpriseFCFPS'), groups='sw1'),347    'ShareholderFCFPS': CSQuantiles(LAST('ShareholderFCFPS'), groups='sw1'),348    'ROEDiluted': CSQuantiles(LAST('ROEDiluted'), groups='sw1'),349    'ROEAvg': CSQuantiles(LAST('ROEAvg'), groups='sw1'),350    'ROEWeighted': CSQuantiles(LAST('ROEWeighted'), groups='sw1'),351    'ROECut': CSQuantiles(LAST('ROECut'), groups='sw1'),352    'ROECutWeighted': CSQuantiles(LAST('ROECutWeighted'), groups='sw1'),353    'ROIC': CSQuantiles(LAST('ROIC'), groups='sw1'),354    'ROAEBIT': CSQuantiles(LAST('ROAEBIT'), groups='sw1'),355    'ROAEBITTTM': CSQuantiles(LAST('ROAEBITTTM'), groups='sw1'),356    'OperatingNIToTP': CSQuantiles(LAST('OperatingNIToTP'), groups='sw1'),357    'OperatingNIToTPLatest': CSQuantiles(LAST('OperatingNIToTPLatest'), groups='sw1'),358    'InvestRAssociatesToTP': CSQuantiles(LAST('InvestRAssociatesToTP'), groups='sw1'),359    'InvestRAssociatesToTPLatest': CSQuantiles(LAST('InvestRAssociatesToTPLatest'), groups='sw1'),360    'NPCutToNP': CSQuantiles(LAST('NPCutToNP'), groups='sw1'),361    'SuperQuickRatio': CSQuantiles(LAST('SuperQuickRatio'), groups='sw1'),362    'TSEPToInterestBearDebt': CSQuantiles(LAST('TSEPToInterestBearDebt'), groups='sw1'),363    'DebtTangibleEquityRatio': CSQuantiles(LAST('DebtTangibleEquityRatio'), groups='sw1'),364    'TangibleAToInteBearDebt': CSQuantiles(LAST('TangibleAToInteBearDebt'), groups='sw1'),365    'TangibleAToNetDebt': CSQuantiles(LAST('TangibleAToNetDebt'), groups='sw1'),366    'NOCFToTLiability': CSQuantiles(LAST('NOCFToTLiability'), groups='sw1'),367    'NOCFToInterestBearDebt': CSQuantiles(LAST('NOCFToInterestBearDebt'), groups='sw1'),368    'NOCFToNetDebt': CSQuantiles(LAST('NOCFToNetDebt'), groups='sw1'),369    'TSEPToTotalCapital': CSQuantiles(LAST('TSEPToTotalCapital'), groups='sw1'),370    'InteBearDebtToTotalCapital': CSQuantiles(LAST('InteBearDebtToTotalCapital'), groups='sw1'),371    'NPParentCompanyCutYOY': CSQuantiles(LAST('NPParentCompanyCutYOY'), groups='sw1'),372    'SalesServiceCashToORLatest': CSQuantiles(LAST('SalesServiceCashToORLatest'), groups='sw1'),373    'CashRateOfSalesLatest': CSQuantiles(LAST('CashRateOfSalesLatest'), groups='sw1'),374    'NOCFToOperatingNILatest': CSQuantiles(LAST('NOCFToOperatingNILatest'), groups='sw1'),375    'TotalAssets': CSQuantiles(LAST('TotalAssets'), groups='sw1'),376    'MktValue': CSQuantiles(LAST('MktValue'), groups='sw1'),377    'NegMktValue': CSQuantiles(LAST('NegMktValue'), groups='sw1'),378    'TEAP': CSQuantiles(LAST('TEAP'), groups='sw1'),379    'NIAP': CSQuantiles(LAST('NIAP'), groups='sw1'),380    'TotalFixedAssets': CSQuantiles(LAST('TotalFixedAssets'), groups='sw1'),381    'IntFreeCL': CSQuantiles(LAST('IntFreeCL'), groups='sw1'),382    'IntFreeNCL': CSQuantiles(LAST('IntFreeNCL'), groups='sw1'),383    'IntCL': CSQuantiles(LAST('IntCL'), groups='sw1'),384    'IntDebt': CSQuantiles(LAST('IntDebt'), groups='sw1'),385    'NetDebt': CSQuantiles(LAST('NetDebt'), groups='sw1'),386    'NetTangibleAssets': CSQuantiles(LAST('NetTangibleAssets'), groups='sw1'),387    'WorkingCapital': CSQuantiles(LAST('WorkingCapital'), groups='sw1'),388    'NetWorkingCapital': CSQuantiles(LAST('WorkingCapital'), groups='sw1'),389    'TotalPaidinCapital': CSQuantiles(LAST('TotalPaidinCapital'), groups='sw1'),390    'RetainedEarnings': CSQuantiles(LAST('RetainedEarnings'), groups='sw1'),391    'OperateNetIncome': CSQuantiles(LAST('OperateNetIncome'), groups='sw1'),392    'ValueChgProfit': CSQuantiles(LAST('ValueChgProfit'), groups='sw1'),393    'NetIntExpense': CSQuantiles(LAST('NetIntExpense'), groups='sw1'),394    'EBIT': CSQuantiles(LAST('EBIT'), groups='sw1'),395    'EBITDA': CSQuantiles(LAST('EBITDA'), groups='sw1'),396    'EBIAT': CSQuantiles(LAST('EBIAT'), groups='sw1'),397    'NRProfitLoss': CSQuantiles(LAST('NRProfitLoss'), groups='sw1'),398    'NIAPCut': CSQuantiles(LAST('NIAPCut'), groups='sw1'),399    'FCFF': CSQuantiles(LAST('FCFF'), groups='sw1'),400    'FCFE': CSQuantiles(LAST('FCFE'), groups='sw1'),401    'DA': CSQuantiles(LAST('DA'), groups='sw1'),402    'TRevenueTTM': CSQuantiles(LAST('TRevenueTTM'), groups='sw1'),403    'TCostTTM': CSQuantiles(LAST('TCostTTM'), groups='sw1'),404    'RevenueTTM': CSQuantiles(LAST('RevenueTTM'), groups='sw1'),405    'CostTTM': CSQuantiles(LAST('CostTTM'), groups='sw1'),406    'GrossProfitTTM': CSQuantiles(LAST('GrossProfitTTM'), groups='sw1'),407    'SalesExpenseTTM': CSQuantiles(LAST('SalesExpenseTTM'), groups='sw1'),408    'AdminExpenseTTM': CSQuantiles(LAST('AdminExpenseTTM'), groups='sw1'),409    'FinanExpenseTTM': CSQuantiles(LAST('FinanExpenseTTM'), groups='sw1'),410    'AssetImpairLossTTM': CSQuantiles(LAST('AssetImpairLossTTM'), groups='sw1'),411    'NPFromOperatingTTM': CSQuantiles(LAST('NPFromOperatingTTM'), groups='sw1'),412    'NPFromValueChgTTM': CSQuantiles(LAST('NPFromValueChgTTM'), groups='sw1'),413    'OperateProfitTTM': CSQuantiles(LAST('OperateProfitTTM'), groups='sw1'),414    'NonOperatingNPTTM': CSQuantiles(LAST('NonOperatingNPTTM'), groups='sw1'),415    'TProfitTTM': CSQuantiles(LAST('TProfitTTM'), groups='sw1'),416    'NetProfitTTM': CSQuantiles(LAST('NetProfitTTM'), groups='sw1'),417    'NetProfitAPTTM': CSQuantiles(LAST('NetProfitAPTTM'), groups='sw1'),418    'SaleServiceRenderCashTTM': CSQuantiles(LAST('SaleServiceRenderCashTTM'), groups='sw1'),419    'NetOperateCFTTM': CSQuantiles(LAST('NetOperateCFTTM'), groups='sw1'),420    'NetInvestCFTTM': CSQuantiles(LAST('NetInvestCFTTM'), groups='sw1'),421    'NetFinanceCFTTM': CSQuantiles(LAST('NetFinanceCFTTM'), groups='sw1'),422    'GrossProfit': CSQuantiles(LAST('GrossProfit'), groups='sw1'),423    'Beta252': CSQuantiles(LAST('Beta252'), groups='sw1'),424    'RSTR504': CSQuantiles(LAST('RSTR504'), groups='sw1'),425    'EPIBS': CSQuantiles(LAST('EPIBS'), groups='sw1'),426    'CETOP': CSQuantiles(LAST('CETOP'), groups='sw1'),427    'DASTD': CSQuantiles(LAST('DASTD'), groups='sw1'),428    'CmraCNE5': CSQuantiles(LAST('CmraCNE5'), groups='sw1'),429    'HsigmaCNE5': CSQuantiles(LAST('HsigmaCNE5'), groups='sw1'),430    'SGRO': CSQuantiles(LAST('SGRO'), groups='sw1'),431    'EgibsLong': CSQuantiles(LAST('EgibsLong'), groups='sw1'),432    'STOM': CSQuantiles(LAST('STOM'), groups='sw1'),433    'STOQ': CSQuantiles(LAST('STOQ'), groups='sw1'),434    'STOA': CSQuantiles(LAST('STOA'), groups='sw1'),435    'NLSIZE': CSQuantiles(LAST('NLSIZE'), groups='sw1')}436# alpha191 LAST437alpha_factor_store = {438    'alpha_1': LAST('alpha_1'), 'alpha_2': LAST('alpha_2'), 'alpha_3': LAST('alpha_3'),439    'alpha_4': LAST('alpha_4'), 'alpha_5': LAST('alpha_5'), 'alpha_6': LAST('alpha_6'),440    'alpha_7': LAST('alpha_7'), 'alpha_8': LAST('alpha_8'), 'alpha_9': LAST('alpha_9'),441    'alpha_10': LAST('alpha_10'), 'alpha_11': LAST('alpha_11'), 'alpha_12': LAST('alpha_12'),442    'alpha_13': LAST('alpha_13'), 'alpha_14': LAST('alpha_14'), 'alpha_15': LAST('alpha_15'),443    'alpha_16': LAST('alpha_16'), 'alpha_17': LAST('alpha_17'), 'alpha_18': LAST('alpha_18'),444    'alpha_19': LAST('alpha_19'), 'alpha_20': LAST('alpha_20'), 'alpha_21': LAST('alpha_21'),445    'alpha_22': LAST('alpha_22'), 'alpha_23': LAST('alpha_23'), 'alpha_24': LAST('alpha_24'),446    'alpha_25': LAST('alpha_25'), 'alpha_26': LAST('alpha_26'), 'alpha_27': LAST('alpha_27'),447    'alpha_28': LAST('alpha_28'), 'alpha_29': LAST('alpha_29'), 'alpha_30': LAST('alpha_30'),448    'alpha_31': LAST('alpha_31'), 'alpha_32': LAST('alpha_32'), 'alpha_33': LAST('alpha_33'),449    'alpha_34': LAST('alpha_34'), 'alpha_35': LAST('alpha_35'), 'alpha_36': LAST('alpha_36'),450    'alpha_37': LAST('alpha_37'), 'alpha_38': LAST('alpha_38'), 'alpha_39': LAST('alpha_39'),451    'alpha_40': LAST('alpha_40'), 'alpha_41': LAST('alpha_41'), 'alpha_42': LAST('alpha_42'),452    'alpha_43': LAST('alpha_43'), 'alpha_44': LAST('alpha_44'), 'alpha_45': LAST('alpha_45'),453    'alpha_46': LAST('alpha_46'), 'alpha_47': LAST('alpha_47'), 'alpha_48': LAST('alpha_48'),454    'alpha_49': LAST('alpha_49'), 'alpha_50': LAST('alpha_50'), 'alpha_51': LAST('alpha_51'),455    'alpha_52': LAST('alpha_52'), 'alpha_53': LAST('alpha_53'), 'alpha_54': LAST('alpha_54'),456    'alpha_55': LAST('alpha_55'), 'alpha_56': LAST('alpha_56'), 'alpha_57': LAST('alpha_57'),457    'alpha_58': LAST('alpha_58'), 'alpha_59': LAST('alpha_59'), 'alpha_60': LAST('alpha_60'),458    'alpha_61': LAST('alpha_61'), 'alpha_62': LAST('alpha_62'), 'alpha_63': LAST('alpha_63'),459    'alpha_64': LAST('alpha_64'), 'alpha_65': LAST('alpha_65'), 'alpha_66': LAST('alpha_66'),460    'alpha_67': LAST('alpha_67'), 'alpha_68': LAST('alpha_68'), 'alpha_69': LAST('alpha_69'),461    'alpha_70': LAST('alpha_70'), 'alpha_71': LAST('alpha_71'), 'alpha_72': LAST('alpha_72'),462    'alpha_73': LAST('alpha_73'), 'alpha_74': LAST('alpha_74'), 'alpha_75': LAST('alpha_75'),463    'alpha_76': LAST('alpha_76'), 'alpha_77': LAST('alpha_77'), 'alpha_78': LAST('alpha_78'),464    'alpha_79': LAST('alpha_79'), 'alpha_80': LAST('alpha_80'), 'alpha_81': LAST('alpha_81'),465    'alpha_82': LAST('alpha_82'), 'alpha_83': LAST('alpha_83'), 'alpha_84': LAST('alpha_84'),466    'alpha_85': LAST('alpha_85'), 'alpha_86': LAST('alpha_86'), 'alpha_87': LAST('alpha_87'),467    'alpha_88': LAST('alpha_88'), 'alpha_89': LAST('alpha_89'), 'alpha_90': LAST('alpha_90'),468    'alpha_91': LAST('alpha_91'), 'alpha_92': LAST('alpha_92'), 'alpha_93': LAST('alpha_93'),469    'alpha_94': LAST('alpha_94'), 'alpha_95': LAST('alpha_95'), 'alpha_96': LAST('alpha_96'),470    'alpha_97': LAST('alpha_97'), 'alpha_98': LAST('alpha_98'), 'alpha_99': LAST('alpha_99'),471    'alpha_100': LAST('alpha_100'), 'alpha_101': LAST('alpha_101'), 'alpha_102': LAST('alpha_102'),472    'alpha_103': LAST('alpha_103'), 'alpha_104': LAST('alpha_104'), 'alpha_105': LAST('alpha_105'),473    'alpha_106': LAST('alpha_106'), 'alpha_107': LAST('alpha_107'), 'alpha_108': LAST('alpha_108'),474    'alpha_109': LAST('alpha_109'), 'alpha_110': LAST('alpha_110'), 'alpha_111': LAST('alpha_111'),475    'alpha_112': LAST('alpha_113'), 'alpha_113': LAST('alpha_113'), 'alpha_114': LAST('alpha_114'),476    'alpha_115': LAST('alpha_116'), 'alpha_116': LAST('alpha_116'), 'alpha_117': LAST('alpha_117'),477    'alpha_118': LAST('alpha_118'), 'alpha_119': LAST('alpha_119'), 'alpha_120': LAST('alpha_120'),478    'alpha_121': LAST('alpha_121'), 'alpha_122': LAST('alpha_122'), 'alpha_123': LAST('alpha_123'),479    'alpha_124': LAST('alpha_124'), 'alpha_125': LAST('alpha_125'), 'alpha_126': LAST('alpha_126'),480    'alpha_127': LAST('alpha_127'), 'alpha_128': LAST('alpha_128'), 'alpha_129': LAST('alpha_129'),481    'alpha_130': LAST('alpha_130'), 'alpha_131': LAST('alpha_131'), 'alpha_132': LAST('alpha_132'),482    'alpha_133': LAST('alpha_133'), 'alpha_134': LAST('alpha_134'), 'alpha_135': LAST('alpha_135'),483    'alpha_136': LAST('alpha_136'), 'alpha_137': LAST('alpha_137'), 'alpha_138': LAST('alpha_138'),484    'alpha_139': LAST('alpha_139'), 'alpha_140': LAST('alpha_140'), 'alpha_141': LAST('alpha_141'),485    'alpha_142': LAST('alpha_142'), 'alpha_143': LAST('alpha_143'), 'alpha_144': LAST('alpha_144'),486    'alpha_145': LAST('alpha_145'), 'alpha_146': LAST('alpha_146'), 'alpha_147': LAST('alpha_147'),487    'alpha_148': LAST('alpha_148'), 'alpha_149': LAST('alpha_149'), 'alpha_150': LAST('alpha_150'),488    'alpha_151': LAST('alpha_151'), 'alpha_152': LAST('alpha_152'), 'alpha_153': LAST('alpha_153'),489    'alpha_154': LAST('alpha_154'), 'alpha_155': LAST('alpha_155'), 'alpha_156': LAST('alpha_156'),490    'alpha_157': LAST('alpha_157'), 'alpha_158': LAST('alpha_158'), 'alpha_159': LAST('alpha_159'),491    'alpha_160': LAST('alpha_160'), 'alpha_161': LAST('alpha_161'), 'alpha_162': LAST('alpha_162'),492    'alpha_163': LAST('alpha_163'), 'alpha_164': LAST('alpha_164'), 'alpha_165': LAST('alpha_165'),493    'alpha_166': LAST('alpha_166'), 'alpha_167': LAST('alpha_167'), 'alpha_168': LAST('alpha_168'),494    'alpha_169': LAST('alpha_169'), 'alpha_170': LAST('alpha_170'), 'alpha_171': LAST('alpha_171'),495    'alpha_172': LAST('alpha_172'), 'alpha_173': LAST('alpha_173'), 'alpha_174': LAST('alpha_174'),496    'alpha_175': LAST('alpha_175'), 'alpha_176': LAST('alpha_176'), 'alpha_177': LAST('alpha_177'),497    'alpha_178': LAST('alpha_178'), 'alpha_179': LAST('alpha_179'), 'alpha_180': LAST('alpha_180'),498    'alpha_181': LAST('alpha_181'), 'alpha_182': LAST('alpha_182'), 'alpha_183': LAST('alpha_183'),499    'alpha_184': LAST('alpha_184'), 'alpha_185': LAST('alpha_185'), 'alpha_186': LAST('alpha_186'),500    'alpha_187': LAST('alpha_187'), 'alpha_188': LAST('alpha_188'), 'alpha_189': LAST('alpha_189'),501    'alpha_190': LAST('alpha_190'), 'alpha_191': LAST('alpha_191')502}503# uqerå å LAST504basic_factor_last_store = {505    'AccountsPayablesTDays': LAST('AccountsPayablesTDays'),506    'AccountsPayablesTRate': LAST('AccountsPayablesTRate'),507    'AdminiExpenseRate': LAST('AdminiExpenseRate'),508    'ARTDays': LAST('ARTDays'),509    'ARTRate': LAST('ARTRate'),510    'ASSI': LAST('ASSI'),511    'BLEV': LAST('BLEV'),512    'BondsPayableToAsset': LAST('BondsPayableToAsset'),513    'CashRateOfSales': LAST('CashRateOfSales'),514    'CashToCurrentLiability': LAST('CashToCurrentLiability'),515    'CMRA': LAST('CMRA'),516    'CTOP': LAST('CTOP'),517    'CTP5': LAST('CTP5'),518    'CurrentAssetsRatio': LAST('CurrentAssetsRatio'),519    'CurrentAssetsTRate': LAST('CurrentAssetsTRate'),520    'CurrentRatio': LAST('CurrentRatio'),521    'DAVOL10': LAST('DAVOL10'),522    'DAVOL20': LAST('DAVOL20'),523    'DAVOL5': LAST('DAVOL5'),524    'DDNBT': LAST('DDNBT'),525    'DDNCR': LAST('DDNCR'),526    'DDNSR': LAST('DDNSR'),527    'DebtEquityRatio': LAST('DebtEquityRatio'),528    'DebtsAssetRatio': LAST('DebtsAssetRatio'),529    'DHILO': LAST('DHILO'),530    'DilutedEPS': LAST('DilutedEPS'),531    'DVRAT': LAST('DVRAT'),532    'EBITToTOR': LAST('EBITToTOR'),533    'EGRO': LAST('EGRO'),534    'EMA10': LAST('EMA10'),535    'EMA120': LAST('EMA120'),536    'EMA20': LAST('EMA20'),537    'EMA5': LAST('EMA5'),538    'EMA60': LAST('EMA60'),539    'EPS': LAST('EPS'),540    'EquityFixedAssetRatio': LAST('EquityFixedAssetRatio'),541    'EquityToAsset': LAST('EquityToAsset'),542    'EquityTRate': LAST('EquityTRate'),543    'ETOP': LAST('ETOP'),544    'ETP5': LAST('ETP5'),545    'FinancialExpenseRate': LAST('FinancialExpenseRate'),546    'FinancingCashGrowRate': LAST('FinancingCashGrowRate'),547    'FixAssetRatio': LAST('FixAssetRatio'),548    'FixedAssetsTRate': LAST('FixedAssetsTRate'),549    'GrossIncomeRatio': LAST('GrossIncomeRatio'),550    'HBETA': LAST('HBETA'),551    'HSIGMA': LAST('HBETA'),552    'IntangibleAssetRatio': LAST('IntangibleAssetRatio'),553    'InventoryTDays': LAST('InventoryTDays'),554    'InventoryTRate': LAST('InventoryTRate'),555    'InvestCashGrowRate': LAST('InvestCashGrowRate'),556    'LCAP': LAST('LCAP'),557    'LFLO': LAST('LFLO'),558    'LongDebtToAsset': LAST('LongDebtToAsset'),559    'LongDebtToWorkingCapital': LAST('LongDebtToWorkingCapital'),560    'LongTermDebtToAsset': LAST('LongTermDebtToAsset'),561    'MA10': LAST('MA10'),562    'MA120': LAST('MA120'),563    'MA20': LAST('MA20'),564    'MA5': LAST('MA5'),565    'MA60': LAST('MA60'),566    'MAWVAD': LAST('MAWVAD'),567    'MFI': LAST('MFI'),568    'MLEV': LAST('MLEV'),569    'NetAssetGrowRate': LAST('NetAssetGrowRate'),570    'NetProfitGrowRate': LAST('NetProfitGrowRate'),571    'NetProfitRatio': LAST('NetProfitRatio'),572    'NOCFToOperatingNI': LAST('NetProfitRatio'),573    'NonCurrentAssetsRatio': LAST('NonCurrentAssetsRatio'),574    'NPParentCompanyGrowRate': LAST('NPParentCompanyGrowRate'),575    'NPToTOR': LAST('NPToTOR'),576    'OperatingExpenseRate': LAST('OperatingExpenseRate'),577    'OperatingProfitGrowRate': LAST('OperatingProfitGrowRate'),578    'OperatingProfitRatio': LAST('OperatingProfitRatio'),579    'OperatingProfitToTOR': LAST('OperatingProfitToTOR'),580    'OperatingRevenueGrowRate': LAST('OperatingRevenueGrowRate'),581    'OperCashGrowRate': LAST('OperCashGrowRate'),582    'OperCashInToCurrentLiability': LAST('OperCashInToCurrentLiability'),583    'PB': LAST('PB'),584    'PCF': LAST('PCF'),585    'PE': LAST('PE'),586    'PS': LAST('PS'),587    'PSY': LAST('PSY'),588    'QuickRatio': LAST('QuickRatio'),589    'REVS10': LAST('REVS10'),590    'REVS20': LAST('REVS20'),591    'REVS5': LAST('REVS5'),592    'ROA': LAST('REVS5'),593    'ROA5': LAST('ROA5'),594    'ROE': LAST('ROE'),595    'ROE5': LAST('ROE5'),596    'RSI': LAST('RSI'),597    'RSTR12': LAST('RSTR12'),598    'RSTR24': LAST('RSTR24'),599    'SalesCostRatio': LAST('SalesCostRatio'),600    'SaleServiceCashToOR': LAST('SaleServiceCashToOR'),601    'SUE': LAST('SUE'),602    'TaxRatio': LAST('TaxRatio'),603    'TOBT': LAST('TOBT'),604    'TotalAssetGrowRate': LAST('TotalAssetGrowRate'),605    'TotalAssetsTRate': LAST('TotalAssetsTRate'),606    'TotalProfitCostRatio': LAST('TotalProfitCostRatio'),607    'TotalProfitGrowRate': LAST('TotalProfitGrowRate'),608    'VOL10': LAST('VOL10'),609    'VOL120': LAST('VOL120'),610    'VOL20': LAST('VOL20'),611    'VOL240': LAST('VOL240'),612    'VOL5': LAST('VOL5'),613    'VOL60': LAST('VOL60'),614    'WVAD': LAST('WVAD'),615    'REC': LAST('REC'),616    'DAREC': LAST('DAREC'),617    'GREC': LAST('GREC'),618    'FY12P': LAST('FY12P'),619    'DAREV': LAST('DAREV'),620    'GREV': LAST('GREV'),621    'SFY12P': LAST('SFY12P'),622    'DASREV': LAST('DASREV'),623    'GSREV': LAST('GSREV'),624    'FEARNG': LAST('FEARNG'),625    'FSALESG': LAST('FSALESG'),626    'TA2EV': LAST('TA2EV'),627    'CFO2EV': LAST('CFO2EV'),628    'ACCA': LAST('ACCA'),629    'DEGM': LAST('DEGM'),630    'SUOI': LAST('SUOI'),631    'EARNMOM': LAST('EARNMOM'),632    'FiftyTwoWeekHigh': LAST('FiftyTwoWeekHigh'),633    'Volatility': LAST('Volatility'),634    'Skewness': LAST('Skewness'),635    'ILLIQUIDITY': LAST('ILLIQUIDITY'),636    'BackwardADJ': LAST('BackwardADJ'),637    'MACD': LAST('MACD'),638    'ADTM': LAST('ADTM'),639    'ATR14': LAST('ATR14'),640    'ATR6': LAST('ATR6'),641    'BIAS10': LAST('BIAS10'),642    'BIAS20': LAST('BIAS20'),643    'BIAS5': LAST('BIAS5'),644    'BIAS60': LAST('BIAS60'),645    'BollDown': LAST('BollDown'),646    'BollUp': LAST('BollUp'),647    'CCI10': LAST('CCI10'),648    'CCI20': LAST('CCI20'),649    'CCI5': LAST('CCI5'),650    'CCI88': LAST('CCI88'),651    'KDJ_K': LAST('KDJ_K'),652    'KDJ_D': LAST('KDJ_D'),653    'KDJ_J': LAST('KDJ_J'),654    'ROC6': LAST('ROC6'),655    'ROC20': LAST('ROC20'),656    'SBM': LAST('SBM'),657    'STM': LAST('STM'),658    'UpRVI': LAST('UpRVI'),659    'DownRVI': LAST('DownRVI'),660    'RVI': LAST('RVI'),661    'SRMI': LAST('SRMI'),662    'ChandeSD': LAST('ChandeSD'),663    'ChandeSU': LAST('ChandeSU'),664    'CMO': LAST('CMO'),665    'DBCD': LAST('DBCD'),666    'ARC': LAST('ARC'),667    'OBV': LAST('OBV'),668    'OBV6': LAST('OBV6'),669    'OBV20': LAST('OBV20'),670    'TVMA20': LAST('TVMA20'),671    'TVMA6': LAST('TVMA6'),672    'TVSTD20': LAST('TVSTD20'),673    'TVSTD6': LAST('TVSTD6'),674    'VDEA': LAST('VDEA'),675    'VDIFF': LAST('VDIFF'),676    'VEMA10': LAST('VEMA10'),677    'VEMA12': LAST('VEMA12'),678    'VEMA26': LAST('VEMA26'),679    'VEMA5': LAST('VEMA5'),680    'VMACD': LAST('VMACD'),681    'VR': LAST('VR'),682    'VROC12': LAST('VROC12'),683    'VROC6': LAST('VROC6'),684    'VSTD10': LAST('VSTD10'),685    'VSTD20': LAST('VSTD20'),686    'KlingerOscillator': LAST('KlingerOscillator'),687    'MoneyFlow20': LAST('MoneyFlow20'),688    'AD': LAST('AD'),689    'AD20': LAST('AD20'),690    'AD6': LAST('AD6'),691    'CoppockCurve': LAST('CoppockCurve'),692    'ASI': LAST('ASI'),693    'ChaikinOscillator': LAST('ChaikinOscillator'),694    'ChaikinVolatility': LAST('ChaikinVolatility'),695    'EMV14': LAST('EMV14'),696    'EMV6': LAST('EMV6'),697    'plusDI': LAST('plusDI'),698    'minusDI': LAST('minusDI'),699    'ADX': LAST('ADX'),700    'ADXR': LAST('ADXR'),701    'Aroon': LAST('Aroon'),702    'AroonDown': LAST('AroonDown'),703    'AroonUp': LAST('AroonUp'),704    'DEA': LAST('DEA'),705    'DIFF': LAST('DIFF'),706    'DDI': LAST('DDI'),707    'DIZ': LAST('DIZ'),708    'DIF': LAST('DIF'),709    'MTM': LAST('MTM'),710    'MTMMA': LAST('MTMMA'),711    'PVT': LAST('PVT'),712    'PVT6': LAST('PVT6'),713    'PVT12': LAST('PVT12'),714    'TRIX5': LAST('TRIX5'),715    'TRIX10': LAST('TRIX10'),716    'UOS': LAST('UOS'),717    'MA10RegressCoeff12': LAST('MA10RegressCoeff12'),718    'MA10RegressCoeff6': LAST('MA10RegressCoeff6'),719    'PLRC6': LAST('PLRC6'),720    'PLRC12': LAST('PLRC12'),721    'SwingIndex': LAST('SwingIndex'),722    'Ulcer10': LAST('Ulcer10'),723    'Ulcer5': LAST('Ulcer5'),724    'Hurst': LAST('Hurst'),725    'ACD6': LAST('ACD6'),726    'ACD20': LAST('ACD20'),727    'EMA12': LAST('EMA12'),728    'EMA26': LAST('EMA26'),729    'APBMA': LAST('APBMA'),730    'BBI': LAST('APBMA'),731    'BBIC': LAST('BBIC'),732    'TEMA10': LAST('TEMA10'),733    'TEMA5': LAST('TEMA5'),734    'MA10Close': LAST('MA10Close'),735    'AR': LAST('AR'),736    'BR': LAST('BR'),737    'ARBR': LAST('ARBR'),738    'CR20': LAST('CR20'),739    'MassIndex': LAST('MassIndex'),740    'BearPower': LAST('BearPower'),741    'BullPower': LAST('BullPower'),742    'Elder': LAST('Elder'),743    'NVI': LAST('NVI'),744    'PVI': LAST('PVI'),745    'RC12': LAST('RC12'),746    'RC24': LAST('RC24'),747    'JDQS20': LAST('JDQS20'),748    'Variance20': LAST('Variance20'),749    'Variance60': LAST('Variance60'),750    'Variance120': LAST('Variance120'),751    'Kurtosis20': LAST('Kurtosis20'),752    'Kurtosis60': LAST('Kurtosis60'),753    'Kurtosis120': LAST('Kurtosis120'),754    'Alpha20': LAST('Alpha20'),755    'Alpha60': LAST('Alpha60'),756    'Alpha120': LAST('Alpha120'),757    'Beta20': LAST('Beta20'),758    'Beta60': LAST('Beta60'),759    'Beta120': LAST('Beta60'),760    'SharpeRatio20': LAST('SharpeRatio20'),761    'SharpeRatio60': LAST('SharpeRatio60'),762    'SharpeRatio120': LAST('SharpeRatio120'),763    'TreynorRatio20': LAST('TreynorRatio20'),764    'TreynorRatio60': LAST('TreynorRatio60'),765    'TreynorRatio120': LAST('TreynorRatio120'),766    'InformationRatio20': LAST('InformationRatio20'),767    'InformationRatio60': LAST('InformationRatio60'),768    'InformationRatio120': LAST('InformationRatio120'),769    'GainVariance20': LAST('GainVariance20'),770    'GainVariance60': LAST('GainVariance60'),771    'GainVariance120': LAST('GainVariance120'),772    'LossVariance20': LAST('LossVariance20'),773    'LossVariance60': LAST('LossVariance60'),774    'LossVariance120': LAST('LossVariance120'),775    'GainLossVarianceRatio20': LAST('GainLossVarianceRatio20'),776    'GainLossVarianceRatio60': LAST('GainLossVarianceRatio60'),777    'GainLossVarianceRatio120': LAST('GainLossVarianceRatio120'),778    'RealizedVolatility': LAST('RealizedVolatility'),779    'REVS60': LAST('REVS60'),780    'REVS120': LAST('REVS120'),781    'REVS250': LAST('REVS250'),782    'REVS750': LAST('REVS750'),783    'REVS5m20': LAST('REVS5m20'),784    'REVS5m60': LAST('REVS5m60'),785    'REVS5Indu1': LAST('REVS5Indu1'),786    'REVS20Indu1': LAST('REVS20Indu1'),787    'Volumn1M': LAST('Volumn1M'),788    'Volumn3M': LAST('Volumn3M'),789    'Price1M': LAST('Price1M'),790    'Price3M': LAST('Price3M'),791    'Price1Y': LAST('Price1Y'),792    'Rank1M': LAST('Rank1M'),793    'CashDividendCover': LAST('CashDividendCover'),794    'DividendCover': LAST('DividendCover'),795    'DividendPaidRatio': LAST('DividendPaidRatio'),796    'RetainedEarningRatio': LAST('RetainedEarningRatio'),797    'CashEquivalentPS': LAST('CashEquivalentPS'),798    'DividendPS': LAST('DividendPS'),799    'EPSTTM': LAST('EPSTTM'),800    'NetAssetPS': LAST('NetAssetPS'),801    'TORPS': LAST('TORPS'),802    'TORPSLatest': LAST('TORPSLatest'),803    'OperatingRevenuePS': LAST('OperatingRevenuePS'),804    'OperatingRevenuePSLatest': LAST('OperatingRevenuePSLatest'),805    'OperatingProfitPS': LAST('OperatingProfitPS'),806    'OperatingProfitPSLatest': LAST('OperatingProfitPSLatest'),807    'CapitalSurplusFundPS': LAST('CapitalSurplusFundPS'),808    'SurplusReserveFundPS': LAST('SurplusReserveFundPS'),809    'UndividedProfitPS': LAST('UndividedProfitPS'),810    'RetainedEarningsPS': LAST('RetainedEarningsPS'),811    'OperCashFlowPS': LAST('OperCashFlowPS'),812    'CashFlowPS': LAST('CashFlowPS'),813    'NetNonOIToTP': LAST('NetNonOIToTP'),814    'NetNonOIToTPLatest': LAST('NetNonOIToTPLatest'),815    'PeriodCostsRate': LAST('PeriodCostsRate'),816    'InterestCover': LAST('InterestCover'),817    'NetProfitGrowRate3Y': LAST('NetProfitGrowRate3Y'),818    'NetProfitGrowRate5Y': LAST('NetProfitGrowRate5Y'),819    'OperatingRevenueGrowRate3Y': LAST('OperatingRevenueGrowRate3Y'),820    'OperatingRevenueGrowRate5Y': LAST('OperatingRevenueGrowRate5Y'),821    'NetCashFlowGrowRate': LAST('NetCashFlowGrowRate'),822    'NetProfitCashCover': LAST('NetProfitCashCover'),823    'OperCashInToAsset': LAST('OperCashInToAsset'),824    'CashConversionCycle': LAST('CashConversionCycle'),825    'OperatingCycle': LAST('OperatingCycle'),826    'PEG3Y': LAST('PEG3Y'),827    'PEG5Y': LAST('PEG5Y'),828    'PEIndu': LAST('PEIndu'),829    'PBIndu': LAST('PBIndu'),830    'PSIndu': LAST('PSIndu'),831    'PCFIndu': LAST('PCFIndu'),832    'PEHist20': LAST('PEHist20'),833    'PEHist60': LAST('PEHist60'),834    'PEHist120': LAST('PEHist120'),835    'PEHist250': LAST('PEHist250'),836    'StaticPE': LAST('StaticPE'),837    'ForwardPE': LAST('ForwardPE'),838    'EnterpriseFCFPS': LAST('EnterpriseFCFPS'),839    'ShareholderFCFPS': LAST('ShareholderFCFPS'),840    'ROEDiluted': LAST('ROEDiluted'),841    'ROEAvg': LAST('ROEAvg'),842    'ROEWeighted': LAST('ROEWeighted'),843    'ROECut': LAST('ROECut'),844    'ROECutWeighted': LAST('ROECutWeighted'),845    'ROIC': LAST('ROIC'),846    'ROAEBIT': LAST('ROAEBIT'),847    'ROAEBITTTM': LAST('ROAEBITTTM'),848    'OperatingNIToTP': LAST('OperatingNIToTP'),849    'OperatingNIToTPLatest': LAST('OperatingNIToTPLatest'),850    'InvestRAssociatesToTP': LAST('InvestRAssociatesToTP'),851    'InvestRAssociatesToTPLatest': LAST('InvestRAssociatesToTPLatest'),852    'NPCutToNP': LAST('NPCutToNP'),853    'SuperQuickRatio': LAST('SuperQuickRatio'),854    'TSEPToInterestBearDebt': LAST('TSEPToInterestBearDebt'),855    'DebtTangibleEquityRatio': LAST('DebtTangibleEquityRatio'),856    'TangibleAToInteBearDebt': LAST('TangibleAToInteBearDebt'),857    'TangibleAToNetDebt': LAST('TangibleAToNetDebt'),858    'NOCFToTLiability': LAST('NOCFToTLiability'),859    'NOCFToInterestBearDebt': LAST('NOCFToInterestBearDebt'),860    'NOCFToNetDebt': LAST('NOCFToNetDebt'),861    'TSEPToTotalCapital': LAST('TSEPToTotalCapital'),862    'InteBearDebtToTotalCapital': LAST('InteBearDebtToTotalCapital'),863    'NPParentCompanyCutYOY': LAST('NPParentCompanyCutYOY'),864    'SalesServiceCashToORLatest': LAST('SalesServiceCashToORLatest'),865    'CashRateOfSalesLatest': LAST('CashRateOfSalesLatest'),866    'NOCFToOperatingNILatest': LAST('NOCFToOperatingNILatest'),867    'TotalAssets': LAST('TotalAssets'),868    'MktValue': LAST('MktValue'),869    'NegMktValue': LAST('NegMktValue'),870    'TEAP': LAST('TEAP'),871    'NIAP': LAST('NIAP'),872    'TotalFixedAssets': LAST('TotalFixedAssets'),873    'IntFreeCL': LAST('IntFreeCL'),874    'IntFreeNCL': LAST('IntFreeNCL'),875    'IntCL': LAST('IntCL'),876    'IntDebt': LAST('IntDebt'),877    'NetDebt': LAST('NetDebt'),878    'NetTangibleAssets': LAST('NetTangibleAssets'),879    'WorkingCapital': LAST('WorkingCapital'),880    'NetWorkingCapital': LAST('WorkingCapital'),881    'TotalPaidinCapital': LAST('TotalPaidinCapital'),882    'RetainedEarnings': LAST('RetainedEarnings'),883    'OperateNetIncome': LAST('OperateNetIncome'),884    'ValueChgProfit': LAST('ValueChgProfit'),885    'NetIntExpense': LAST('NetIntExpense'),886    'EBIT': LAST('EBIT'),887    'EBITDA': LAST('EBITDA'),888    'EBIAT': LAST('EBIAT'),889    'NRProfitLoss': LAST('NRProfitLoss'),890    'NIAPCut': LAST('NIAPCut'),891    'FCFF': LAST('FCFF'),892    'FCFE': LAST('FCFE'),893    'DA': LAST('DA'),894    'TRevenueTTM': LAST('TRevenueTTM'),895    'TCostTTM': LAST('TCostTTM'),896    'RevenueTTM': LAST('RevenueTTM'),897    'CostTTM': LAST('CostTTM'),898    'GrossProfitTTM': LAST('GrossProfitTTM'),899    'SalesExpenseTTM': LAST('SalesExpenseTTM'),900    'AdminExpenseTTM': LAST('AdminExpenseTTM'),901    'FinanExpenseTTM': LAST('FinanExpenseTTM'),902    'AssetImpairLossTTM': LAST('AssetImpairLossTTM'),903    'NPFromOperatingTTM': LAST('NPFromOperatingTTM'),904    'NPFromValueChgTTM': LAST('NPFromValueChgTTM'),905    'OperateProfitTTM': LAST('OperateProfitTTM'),906    'NonOperatingNPTTM': LAST('NonOperatingNPTTM'),907    'TProfitTTM': LAST('TProfitTTM'),908    'NetProfitTTM': LAST('NetProfitTTM'),909    'NetProfitAPTTM': LAST('NetProfitAPTTM'),910    'SaleServiceRenderCashTTM': LAST('SaleServiceRenderCashTTM'),911    'NetOperateCFTTM': LAST('NetOperateCFTTM'),912    'NetInvestCFTTM': LAST('NetInvestCFTTM'),913    'NetFinanceCFTTM': LAST('NetFinanceCFTTM'),914    'GrossProfit': LAST('GrossProfit'),915    'Beta252': LAST('Beta252'),916    'RSTR504': LAST('RSTR504'),917    'EPIBS': LAST('EPIBS'),918    'CETOP': LAST('CETOP'),919    'DASTD': LAST('DASTD'),920    'CmraCNE5': LAST('CmraCNE5'),921    'HsigmaCNE5': LAST('HsigmaCNE5'),922    'SGRO': LAST('SGRO'),923    'EgibsLong': LAST('EgibsLong'),924    'STOM': LAST('STOM'),925    'STOQ': LAST('STOQ'),926    'STOA': LAST('STOA'),...run.py
Source:run.py  
1#! /usr/bin/env python2# -*- coding: utf-8 -*-3"""4@version: ??5@author: li6@file: run.py7@time: 2019-08-05 19:558"""9import time10import sys11sys.path.append('../')12sys.path.append('../../')13sys.path.append('../../../')14import pandas as pd15from PyFin.api import *16from alphamind.api import *17from src.conf.models import *18import numpy as np19from alphamind.execution.naiveexecutor import NaiveExecutor20from datetime import timedelta21from m1_xgb import *22from src.conf.configuration import lgb_conf23import xgboost as xgb24import gc25from flask import Flask, request26app = Flask(__name__)27def create_scenario(train_data, features, label, ref_dates, freq, regress_conf, weight_gap, return_data, risk_total,28                    benchmark_total, industry_total, bounds, constraint_risk, total_risk_names, GPUs=True):29    executor = NaiveExecutor()30    trade_dates = []31    transact_cost = 0.00332    previous_pos = pd.DataFrame()33    tune_record = pd.DataFrame()34    current_pos = pd.DataFrame()35    rets = []36    net_rets = []37    turn_overs = []38    leverags = []39    ics = []40    # take ref_dates[i] as an example41    for i, ref_date in enumerate(ref_dates):42        alpha_logger.info('{0} is start'.format(ref_date))43        # machine learning bst_model44        # Filter Training data45        # train data46        trade_date_pre = ref_date - timedelta(days=1)47        trade_date_pre_80 = ref_date - timedelta(days=80)48        # train = train_data[(train_data.trade_date <= trade_date_pre) & (trade_date_pre_80 <= train_data.trade_date)].dropna()49        train = train_data[train_data.trade_date <= trade_date_pre].dropna()50        if len(train) <= 0:51            continue52        x_train = train[features]53        y_train = train[label]54        alpha_logger.info('len_x_train: {0}, len_y_train: {1}'.format(len(x_train.values), len(y_train.values)))55        alpha_logger.info('X_train.shape={0}, X_test.shape = {1}'.format(np.shape(x_train), np.shape(y_train)))56        tic = time.time()57        # training58        xgb_model = XGBooster(regress_conf)59        if GPUs:60            xgb_model.set_params(tree_method='gpu_hist', n_gpus=-1, max_depth=5)61        else:62            xgb_model.set_params(max_depth=5)63        print(xgb_model.get_params)64        best_score, best_round, best_model = xgb_model.fit(x_train, y_train)65        alpha_logger.info('Training time cost {}s'.format(time.time() - tic))66        alpha_logger.info('best_score = {}, best_round = {}'.format(best_score, best_round))67        # Test data68        total_data_test_excess = train_data[train_data.trade_date == ref_date]69        alpha_logger.info('{0} total_data_test_excess: {1}'.format(ref_date, len(total_data_test_excess)))70        if len(total_data_test_excess) <= 0:71            alpha_logger.info('{0} HAS NO DATA!!!'.format(ref_date))72            continue73        industry_matrix = industry_total[industry_total.trade_date == ref_date]74        benchmark_w = benchmark_total[benchmark_total.trade_date == ref_date]75        risk_matrix = risk_total[risk_total.trade_date == ref_date]76        total_data = pd.merge(industry_matrix, benchmark_w, on=['code'], how='left').fillna(0.)77        total_data = pd.merge(total_data, risk_matrix, on=['code'])78        alpha_logger.info('{0} len_of_total_data: {1}'.format(ref_date, len(total_data)))79        total_data_test_excess = pd.merge(total_data, total_data_test_excess, on=['code'])80        alpha_logger.info('{0} len_of_total_data_test_excess: {1}'.format(ref_date, len(total_data_test_excess)))81        codes = total_data_test_excess.code.values.tolist()82        alpha_logger.info('{0} full re-balance: {1}'.format(ref_date, len(codes)))83        dx_returns = return_data[return_data.trade_date == ref_date][['code', 'dx']]84        benchmark_w = total_data_test_excess.weight.values85        alpha_logger.info('shape_of_benchmark_w: {}'.format(np.shape(benchmark_w)))86        is_in_benchmark = (benchmark_w > 0.).astype(float).reshape((-1, 1))87        total_risk_exp = np.concatenate([total_data_test_excess[constraint_risk].values.astype(float),88                                         is_in_benchmark,89                                         np.ones_like(is_in_benchmark)],90                                        axis=1)91        alpha_logger.info('shape_of_total_risk_exp_pre: {}'.format(np.shape(total_risk_exp)))92        total_risk_exp = pd.DataFrame(total_risk_exp, columns=total_risk_names)93        alpha_logger.info('shape_of_total_risk_exp: {}'.format(np.shape(total_risk_exp)))94        constraints = LinearConstraints(bounds, total_risk_exp, benchmark_w)95        alpha_logger.info('constraints: {0} in {1}'.format(np.shape(constraints.risk_targets()), ref_date))96        lbound = np.maximum(0., benchmark_w - weight_gap)97        ubound = weight_gap + benchmark_w98        alpha_logger.info('lbound: {0} in {1}'.format(np.shape(lbound), ref_date))99        alpha_logger.info('ubound: {0} in {1}'.format(np.shape(ubound), ref_date))100        # alpha_logger.info('lbound: \n{}'.format(lbound))101        # alpha_logger.info('ubound: \n{}'.format(ubound))102        # predict103        x_pred = total_data_test_excess[features]104        dpred = xgb.DMatrix(x_pred.values)105        predict_xgboost = best_model.predict(dpred)106        a = np.shape(predict_xgboost)107        predict_xgboost = np.reshape(predict_xgboost, (a[0], -1)).astype(np.float64)108        alpha_logger.info('shape_of_predict_xgboost: {}'.format(np.shape(predict_xgboost)))109        # alpha_logger.info('predict_xgboost: {}'.format(predict_xgboost))110        del xgb_model111        del best_model112        gc.collect()113        # backtest114        try:115            target_pos, _ = er_portfolio_analysis(predict_xgboost,116                                                  total_data_test_excess['industry'].values,117                                                  None,118                                                  constraints,119                                                  False,120                                                  benchmark_w,121                                                  method='risk_neutral',122                                                  lbound=lbound,123                                                  ubound=ubound)124        except:125            import pdb126            pdb.set_trace()127            alpha_logger.info('target_pos: {}'.format(target_pos))128        alpha_logger.info('target_pos_shape: {}'.format(np.shape(target_pos)))129        alpha_logger.info('len_codes:{}'.format(np.shape(codes)))130        target_pos['code'] = codes131        result = pd.merge(target_pos, dx_returns, on=['code'])132        result['trade_date'] = ref_date133        tune_record = tune_record.append(result)134        alpha_logger.info('len_result: {}'.format(len(result)))135        # excess_return = np.exp(result.dx.values) - 1. - index_return.loc[ref_date, 'dx']136        excess_return = np.exp(result.dx.values) - 1.137        ret = result.weight.values @ excess_return138        trade_dates.append(ref_date)139        rets.append(np.log(1. + ret))140        alpha_logger.info('len_rets: {}, len_trade_dates: {}'.format(len(rets), len(trade_dates)))141        turn_over_org, current_pos = executor.execute(target_pos=target_pos)142        turn_over = turn_over_org / sum(target_pos.weight.values)143        executor.set_current(current_pos)144        net_rets.append(np.log(1. + ret - transact_cost * turn_over))145        alpha_logger.info('len_net_rets: {}, len_trade_dates: {}'.format(len(net_rets), len(trade_dates)))146        alpha_logger.info('{} is finished'.format(ref_date))147    # ret_df = pd.DataFrame({'xgb_regress': rets}, index=trade_dates)148    ret_df = pd.DataFrame({'xgb_regress': rets, 'net_xgb_regress': net_rets}, index=trade_dates)149    ret_df.loc[advanceDateByCalendar('china.sse', ref_dates[-1], freq).strftime('%Y-%m-%d')] = 0.150    ret_df = ret_df.shift(1)151    ret_df.iloc[0] = 0.152    return ret_df, tune_record153@app.route('/')154def index():155    return '<h1>hello Test<h1>'156@app.route('/backtest', methods=['POST'])157def backtest():158    data_source = 'postgresql+psycopg2://alpha:alpha@180.166.26.82:8889/alpha'159    engine = SqlEngine(data_source)160    start_date = request.form['start_date']161    end_date = request.form['end_date']162    freq = request.form['freq']163    max_round = request.form['max_round']164    GPUs = request.form['GPUs']165    if start_date is None or start_date == '':166        start_date = '2019-01-01'167    if end_date is None or end_date == '':168        end_date = '2019-08-01'169    if freq is None or freq == '':170        freq = '2b'171    if max_round is None or max_round == '':172        max_round = 10173    # xgb_configuration174    lgb_conf.xgb_config_r()175    lgb_conf.cv_folds = None176    lgb_conf.early_stop_round = 10177    lgb_conf.max_round = int(max_round)178    ref_dates = makeSchedule(start_date, end_date, freq, 'china.sse')179    universe = Universe('zz500')180    benchmark_code = 905181    horizon = map_freq(freq)182    industry_name = 'sw'183    industry_level = 1184    basic_factor_store = {185        'f0': CSQuantiles(LAST('AccountsPayablesTDays'), groups='sw1'),186        'f1': CSQuantiles(LAST('AccountsPayablesTRate'), groups='sw1'),187        'f2': CSQuantiles(LAST('AdminiExpenseRate'), groups='sw1'),188        'f3': CSQuantiles(LAST('ARTDays'), groups='sw1'),189        'f4': CSQuantiles(LAST('ARTRate'), groups='sw1'),190        'f5': CSQuantiles(LAST('ASSI'), groups='sw1'),191        'f6': CSQuantiles(LAST('BLEV'), groups='sw1'),192        'f7': CSQuantiles(LAST('BondsPayableToAsset'), groups='sw1'),193        'f8': CSQuantiles(LAST('CashRateOfSales'), groups='sw1'),194        'f9': CSQuantiles(LAST('CashToCurrentLiability'), groups='sw1'),195        'f10': CSQuantiles(LAST('CMRA'), groups='sw1'),196        'f11': CSQuantiles(LAST('CTOP'), groups='sw1'),197        'f12': CSQuantiles(LAST('CTP5'), groups='sw1'),198        'f13': CSQuantiles(LAST('CurrentAssetsRatio'), groups='sw1'),199        'f14': CSQuantiles(LAST('CurrentAssetsTRate'), groups='sw1'),200        'f15': CSQuantiles(LAST('CurrentAssetsTRate'), groups='sw1'),201        'f16': CSQuantiles(LAST('DAVOL10'), groups='sw1'),202        'f17': CSQuantiles(LAST('DAVOL20'), groups='sw1'),203        'f18': CSQuantiles(LAST('DAVOL5'), groups='sw1'),204        'f19': CSQuantiles(LAST('DDNBT'), groups='sw1'),205        'f20': CSQuantiles(LAST('DDNCR'), groups='sw1'),206        'f21': CSQuantiles(LAST('DDNSR'), groups='sw1'),207        'f22': CSQuantiles(LAST('DebtEquityRatio'), groups='sw1'),208        'f23': CSQuantiles(LAST('DebtsAssetRatio'), groups='sw1'),209        'f24': CSQuantiles(LAST('DHILO'), groups='sw1'),210        'f25': CSQuantiles(LAST('DilutedEPS'), groups='sw1'),211        'f26': CSQuantiles(LAST('DVRAT'), groups='sw1'),212        'f27': CSQuantiles(LAST('EBITToTOR'), groups='sw1'),213        'f28': CSQuantiles(LAST('EGRO'), groups='sw1'),214        'f29': CSQuantiles(LAST('EMA10'), groups='sw1'),215        'f30': CSQuantiles(LAST('EMA120'), groups='sw1'),216        'f31': CSQuantiles(LAST('EMA20'), groups='sw1'),217        'f32': CSQuantiles(LAST('EMA5'), groups='sw1'),218        'f33': CSQuantiles(LAST('EMA60'), groups='sw1'),219        'f34': CSQuantiles(LAST('EPS'), groups='sw1'),220        'f35': CSQuantiles(LAST('EquityFixedAssetRatio'), groups='sw1'),221        'f36': CSQuantiles(LAST('EquityToAsset'), groups='sw1'),222        'f37': CSQuantiles(LAST('EquityTRate'), groups='sw1'),223        'f38': CSQuantiles(LAST('ETOP'), groups='sw1'),224        'f39': CSQuantiles(LAST('ETP5'), groups='sw1'),225        'f40': CSQuantiles(LAST('FinancialExpenseRate'), groups='sw1'),226        'f41': CSQuantiles(LAST('FinancingCashGrowRate'), groups='sw1'),227        'f42': CSQuantiles(LAST('FixAssetRatio'), groups='sw1'),228        'f43': CSQuantiles(LAST('FixedAssetsTRate'), groups='sw1'),229        'f44': CSQuantiles(LAST('GrossIncomeRatio'), groups='sw1'),230        'f45': CSQuantiles(LAST('HBETA'), groups='sw1'),231        'f46': CSQuantiles(LAST('HBETA'), groups='sw1'),232        'f47': CSQuantiles(LAST('IntangibleAssetRatio'), groups='sw1'),233        'f48': CSQuantiles(LAST('InventoryTDays'), groups='sw1'),234        'f49': CSQuantiles(LAST('InventoryTRate'), groups='sw1'),235        'f50': CSQuantiles(LAST('InvestCashGrowRate'), groups='sw1'),236        'f51': CSQuantiles(LAST('LCAP'), groups='sw1'),237        'f52': CSQuantiles(LAST('LFLO'), groups='sw1'),238        'f53': CSQuantiles(LAST('LongDebtToAsset'), groups='sw1'),239        'f54': CSQuantiles(LAST('LongDebtToWorkingCapital'), groups='sw1'),240        'f55': CSQuantiles(LAST('LongTermDebtToAsset'), groups='sw1'),241        'f56': CSQuantiles(LAST('MA10'), groups='sw1'),242        'f57': CSQuantiles(LAST('MA120'), groups='sw1'),243        'f58': CSQuantiles(LAST('MA20'), groups='sw1'),244        'f59': CSQuantiles(LAST('MA5'), groups='sw1'),245        'f60': CSQuantiles(LAST('MA60'), groups='sw1'),246        'f61': CSQuantiles(LAST('MAWVAD'), groups='sw1'),247        'f62': CSQuantiles(LAST('MFI'), groups='sw1'),248        'f63': CSQuantiles(LAST('MLEV'), groups='sw1'),249        'f64': CSQuantiles(LAST('NetAssetGrowRate'), groups='sw1'),250        'f65': CSQuantiles(LAST('NetProfitGrowRate'), groups='sw1'),251        'f66': CSQuantiles(LAST('NetProfitRatio'), groups='sw1'),252        'f67': CSQuantiles(LAST('NetProfitRatio'), groups='sw1'),253        'f68': CSQuantiles(LAST('NonCurrentAssetsRatio'), groups='sw1'),254        'f69': CSQuantiles(LAST('NPParentCompanyGrowRate'), groups='sw1'),255        'f70': CSQuantiles(LAST('NPToTOR'), groups='sw1'),256        'f71': CSQuantiles(LAST('OperatingExpenseRate'), groups='sw1'),257        'f72': CSQuantiles(LAST('OperatingProfitGrowRate'), groups='sw1'),258        'f73': CSQuantiles(LAST('OperatingProfitRatio'), groups='sw1'),259        'f74': CSQuantiles(LAST('OperatingProfitToTOR'), groups='sw1'),260        'f75': CSQuantiles(LAST('OperatingRevenueGrowRate'), groups='sw1'),261        'f76': CSQuantiles(LAST('OperCashGrowRate'), groups='sw1'),262        'f77': CSQuantiles(LAST('OperCashInToCurrentLiability'), groups='sw1'),263        'f78': CSQuantiles(LAST('PB'), groups='sw1'),264        'f79': CSQuantiles(LAST('PCF'), groups='sw1'),265        'f80': CSQuantiles(LAST('PE'), groups='sw1'),266        'f81': CSQuantiles(LAST('PS'), groups='sw1'),267        'f82': CSQuantiles(LAST('PSY'), groups='sw1'),268        'f83': CSQuantiles(LAST('QuickRatio'), groups='sw1'),269        'f84': CSQuantiles(LAST('REVS10'), groups='sw1'),270        'f85': CSQuantiles(LAST('REVS20'), groups='sw1'),271        'f86': CSQuantiles(LAST('REVS5'), groups='sw1'),272        'f87': CSQuantiles(LAST('REVS5'), groups='sw1'),273        'f88': CSQuantiles(LAST('ROA5'), groups='sw1'),274        'f89': CSQuantiles(LAST('ROE'), groups='sw1'),275        'f90': CSQuantiles(LAST('ROE5'), groups='sw1'),276        'f91': CSQuantiles(LAST('RSI'), groups='sw1'),277        'f92': CSQuantiles(LAST('RSTR12'), groups='sw1'),278        'f93': CSQuantiles(LAST('RSTR24'), groups='sw1'),279        'f94': CSQuantiles(LAST('SalesCostRatio'), groups='sw1'),280        'f95': CSQuantiles(LAST('SaleServiceCashToOR'), groups='sw1'),281        'f96': CSQuantiles(LAST('SUE'), groups='sw1'),282        'f97': CSQuantiles(LAST('TaxRatio'), groups='sw1'),283        'f98': CSQuantiles(LAST('TOBT'), groups='sw1'),284        'f99': CSQuantiles(LAST('TotalAssetGrowRate'), groups='sw1'),285        'f100': CSQuantiles(LAST('TotalAssetsTRate'), groups='sw1'),286        'f101': CSQuantiles(LAST('TotalProfitCostRatio'), groups='sw1'),287        'f102': CSQuantiles(LAST('TotalProfitGrowRate'), groups='sw1'),288        'f103': CSQuantiles(LAST('VOL10'), groups='sw1'),289        'f104': CSQuantiles(LAST('VOL120'), groups='sw1'),290        'f105': CSQuantiles(LAST('VOL20'), groups='sw1'),291        'f106': CSQuantiles(LAST('VOL240'), groups='sw1'),292        'f107': CSQuantiles(LAST('VOL5'), groups='sw1'),293        'f108': CSQuantiles(LAST('VOL60'), groups='sw1'),294        'f109': CSQuantiles(LAST('WVAD'), groups='sw1'),295        'f110': CSQuantiles(LAST('REC'), groups='sw1'),296        'f111': CSQuantiles(LAST('DAREC'), groups='sw1'),297        'f112': CSQuantiles(LAST('GREC'), groups='sw1'),298        'f113': CSQuantiles(LAST('FY12P'), groups='sw1'),299        'f114': CSQuantiles(LAST('DAREV'), groups='sw1'),300        'f115': CSQuantiles(LAST('GREV'), groups='sw1'),301        'f116': CSQuantiles(LAST('SFY12P'), groups='sw1'),302        'f117': CSQuantiles(LAST('DASREV'), groups='sw1'),303        'f118': CSQuantiles(LAST('GSREV'), groups='sw1'),304        'f119': CSQuantiles(LAST('FEARNG'), groups='sw1'),305        'f120': CSQuantiles(LAST('FSALESG'), groups='sw1'),306        'f121': CSQuantiles(LAST('TA2EV'), groups='sw1'),307        'f122': CSQuantiles(LAST('CFO2EV'), groups='sw1'),308        'f123': CSQuantiles(LAST('ACCA'), groups='sw1'),309        'f124': CSQuantiles(LAST('DEGM'), groups='sw1'),310        'f125': CSQuantiles(LAST('SUOI'), groups='sw1'),311        'f126': CSQuantiles(LAST('EARNMOM'), groups='sw1'),312        'f127': CSQuantiles(LAST('FiftyTwoWeekHigh'), groups='sw1'),313        'f128': CSQuantiles(LAST('Volatility'), groups='sw1'),314        'f129': CSQuantiles(LAST('Skewness'), groups='sw1'),315        'f130': CSQuantiles(LAST('ILLIQUIDITY'), groups='sw1'),316        'f131': CSQuantiles(LAST('BackwardADJ'), groups='sw1'),317        'f132': CSQuantiles(LAST('MACD'), groups='sw1'),318        'f133': CSQuantiles(LAST('ADTM'), groups='sw1'),319        'f134': CSQuantiles(LAST('ATR14'), groups='sw1'),320        'f135': CSQuantiles(LAST('ATR6'), groups='sw1'),321        'f136': CSQuantiles(LAST('BIAS10'), groups='sw1'),322        'f137': CSQuantiles(LAST('BIAS20'), groups='sw1'),323        'f138': CSQuantiles(LAST('BIAS5'), groups='sw1'),324        'f139': CSQuantiles(LAST('BIAS60'), groups='sw1'),325        'f140': CSQuantiles(LAST('BollDown'), groups='sw1'),326        'f141': CSQuantiles(LAST('BollUp'), groups='sw1'),327        'f142': CSQuantiles(LAST('CCI10'), groups='sw1'),328        'f143': CSQuantiles(LAST('CCI20'), groups='sw1'),329        'f144': CSQuantiles(LAST('CCI5'), groups='sw1'),330        'f145': CSQuantiles(LAST('CCI88'), groups='sw1'),331        'f146': CSQuantiles(LAST('KDJ_K'), groups='sw1'),332        'f147': CSQuantiles(LAST('KDJ_D'), groups='sw1'),333        'f148': CSQuantiles(LAST('KDJ_J'), groups='sw1'),334        'f149': CSQuantiles(LAST('ROC6'), groups='sw1'),335        'f150': CSQuantiles(LAST('ROC20'), groups='sw1'),336        'f151': CSQuantiles(LAST('SBM'), groups='sw1'),337        'f152': CSQuantiles(LAST('STM'), groups='sw1'),338        'f153': CSQuantiles(LAST('UpRVI'), groups='sw1'),339        'f154': CSQuantiles(LAST('DownRVI'), groups='sw1'),340        'f155': CSQuantiles(LAST('RVI'), groups='sw1'),341        'f156': CSQuantiles(LAST('SRMI'), groups='sw1'),342        'f157': CSQuantiles(LAST('ChandeSD'), groups='sw1'),343        'f158': CSQuantiles(LAST('ChandeSU'), groups='sw1'),344        'f159': CSQuantiles(LAST('CMO'), groups='sw1'),345        'f160': CSQuantiles(LAST('DBCD'), groups='sw1'),346        'f161': CSQuantiles(LAST('ARC'), groups='sw1'),347        'f162': CSQuantiles(LAST('OBV'), groups='sw1'),348        'f163': CSQuantiles(LAST('OBV6'), groups='sw1'),349        'f164': CSQuantiles(LAST('OBV20'), groups='sw1'),350        'f165': CSQuantiles(LAST('TVMA20'), groups='sw1'),351        'f166': CSQuantiles(LAST('TVMA6'), groups='sw1'),352        'f167': CSQuantiles(LAST('TVSTD20'), groups='sw1'),353        'f168': CSQuantiles(LAST('TVSTD6'), groups='sw1'),354        'f169': CSQuantiles(LAST('VDEA'), groups='sw1'),355        'f170': CSQuantiles(LAST('VDIFF'), groups='sw1'),356        'f171': CSQuantiles(LAST('VEMA10'), groups='sw1'),357        'f172': CSQuantiles(LAST('VEMA12'), groups='sw1'),358        'f173': CSQuantiles(LAST('VEMA26'), groups='sw1'),359        'f174': CSQuantiles(LAST('VEMA5'), groups='sw1'),360        'f175': CSQuantiles(LAST('VMACD'), groups='sw1'),361        'f176': CSQuantiles(LAST('VR'), groups='sw1'),362        'f177': CSQuantiles(LAST('VROC12'), groups='sw1'),363        'f178': CSQuantiles(LAST('VROC6'), groups='sw1'),364        'f179': CSQuantiles(LAST('VSTD10'), groups='sw1'),365        'f180': CSQuantiles(LAST('VSTD20'), groups='sw1'),366        'f181': CSQuantiles(LAST('KlingerOscillator'), groups='sw1'),367        'f182': CSQuantiles(LAST('MoneyFlow20'), groups='sw1'),368        'f183': CSQuantiles(LAST('AD'), groups='sw1'),369        'f184': CSQuantiles(LAST('AD20'), groups='sw1'),370        'f185': CSQuantiles(LAST('AD6'), groups='sw1'),371        'f186': CSQuantiles(LAST('CoppockCurve'), groups='sw1'),372        'f187': CSQuantiles(LAST('ASI'), groups='sw1'),373        'f188': CSQuantiles(LAST('ChaikinOscillator'), groups='sw1'),374        'f189': CSQuantiles(LAST('ChaikinVolatility'), groups='sw1'),375        'f190': CSQuantiles(LAST('EMV14'), groups='sw1'),376        'f191': CSQuantiles(LAST('EMV6'), groups='sw1'),377        'f192': CSQuantiles(LAST('plusDI'), groups='sw1'),378        'f193': CSQuantiles(LAST('minusDI'), groups='sw1'),379        'f194': CSQuantiles(LAST('ADX'), groups='sw1'),380        'f195': CSQuantiles(LAST('ADXR'), groups='sw1'),381        'f196': CSQuantiles(LAST('Aroon'), groups='sw1'),382        'f197': CSQuantiles(LAST('AroonDown'), groups='sw1'),383        'f198': CSQuantiles(LAST('AroonUp'), groups='sw1'),384        'f199': CSQuantiles(LAST('DEA'), groups='sw1'),385        'f200': CSQuantiles(LAST('DIFF'), groups='sw1'),386        'f201': CSQuantiles(LAST('DDI'), groups='sw1'),387        'f202': CSQuantiles(LAST('DIZ'), groups='sw1'),388        'f203': CSQuantiles(LAST('DIF'), groups='sw1'),389        'f204': CSQuantiles(LAST('MTM'), groups='sw1'),390        'f205': CSQuantiles(LAST('MTMMA'), groups='sw1'),391        'f206': CSQuantiles(LAST('PVT'), groups='sw1'),392        'f207': CSQuantiles(LAST('PVT6'), groups='sw1'),393        'f208': CSQuantiles(LAST('PVT12'), groups='sw1'),394        'f209': CSQuantiles(LAST('TRIX5'), groups='sw1'),395        'f210': CSQuantiles(LAST('TRIX10'), groups='sw1'),396        'f211': CSQuantiles(LAST('UOS'), groups='sw1'),397        'f212': CSQuantiles(LAST('MA10RegressCoeff12'), groups='sw1'),398        'f213': CSQuantiles(LAST('MA10RegressCoeff6'), groups='sw1'),399        'f214': CSQuantiles(LAST('PLRC6'), groups='sw1'),400        'f215': CSQuantiles(LAST('PLRC12'), groups='sw1'),401        'f216': CSQuantiles(LAST('SwingIndex'), groups='sw1'),402        'f217': CSQuantiles(LAST('Ulcer10'), groups='sw1'),403        'f218': CSQuantiles(LAST('Ulcer5'), groups='sw1'),404        'f219': CSQuantiles(LAST('Hurst'), groups='sw1'),405        'f220': CSQuantiles(LAST('ACD6'), groups='sw1'),406        'f221': CSQuantiles(LAST('ACD20'), groups='sw1'),407        'f222': CSQuantiles(LAST('EMA12'), groups='sw1'),408        'f223': CSQuantiles(LAST('EMA26'), groups='sw1'),409        'f224': CSQuantiles(LAST('APBMA'), groups='sw1'),410        'f225': CSQuantiles(LAST('APBMA'), groups='sw1'),411        'f226': CSQuantiles(LAST('BBIC'), groups='sw1'),412        'f227': CSQuantiles(LAST('TEMA10'), groups='sw1'),413        'f228': CSQuantiles(LAST('TEMA5'), groups='sw1'),414        'f229': CSQuantiles(LAST('MA10Close'), groups='sw1'),415        'f230': CSQuantiles(LAST('AR'), groups='sw1'),416        'f231': CSQuantiles(LAST('BR'), groups='sw1'),417        'f232': CSQuantiles(LAST('ARBR'), groups='sw1'),418        'f233': CSQuantiles(LAST('CR20'), groups='sw1'),419        'f234': CSQuantiles(LAST('MassIndex'), groups='sw1'),420        'f235': CSQuantiles(LAST('BearPower'), groups='sw1'),421        'f236': CSQuantiles(LAST('BullPower'), groups='sw1'),422        'f237': CSQuantiles(LAST('Elder'), groups='sw1'),423        'f238': CSQuantiles(LAST('NVI'), groups='sw1'),424        'f239': CSQuantiles(LAST('PVI'), groups='sw1'),425        'f240': CSQuantiles(LAST('RC12'), groups='sw1'),426        'f241': CSQuantiles(LAST('RC24'), groups='sw1'),427        'f242': CSQuantiles(LAST('JDQS20'), groups='sw1'),428        'f243': CSQuantiles(LAST('Variance20'), groups='sw1'),429        'f244': CSQuantiles(LAST('Variance60'), groups='sw1'),430        'f245': CSQuantiles(LAST('Variance120'), groups='sw1'),431        'f246': CSQuantiles(LAST('Kurtosis20'), groups='sw1'),432        'f247': CSQuantiles(LAST('Kurtosis60'), groups='sw1'),433        'f248': CSQuantiles(LAST('Kurtosis120'), groups='sw1'),434        'f249': CSQuantiles(LAST('Alpha20'), groups='sw1'),435        'f250': CSQuantiles(LAST('Alpha60'), groups='sw1'),436        'f251': CSQuantiles(LAST('Alpha120'), groups='sw1'),437        'f252': CSQuantiles(LAST('Beta20'), groups='sw1'),438        'f253': CSQuantiles(LAST('Beta60'), groups='sw1'),439        'f254': CSQuantiles(LAST('Beta60'), groups='sw1'),440        'f255': CSQuantiles(LAST('SharpeRatio20'), groups='sw1'),441        'f256': CSQuantiles(LAST('SharpeRatio60'), groups='sw1'),442        'f257': CSQuantiles(LAST('SharpeRatio120'), groups='sw1'),443        'f258': CSQuantiles(LAST('TreynorRatio20'), groups='sw1'),444        'f259': CSQuantiles(LAST('TreynorRatio60'), groups='sw1'),445        'f260': CSQuantiles(LAST('TreynorRatio120'), groups='sw1'),446        'f261': CSQuantiles(LAST('InformationRatio20'), groups='sw1'),447        'f262': CSQuantiles(LAST('InformationRatio60'), groups='sw1'),448        'f263': CSQuantiles(LAST('InformationRatio120'), groups='sw1'),449        'f264': CSQuantiles(LAST('GainVariance20'), groups='sw1'),450        'f265': CSQuantiles(LAST('GainVariance60'), groups='sw1'),451        'f266': CSQuantiles(LAST('GainVariance120'), groups='sw1'),452        'f267': CSQuantiles(LAST('LossVariance20'), groups='sw1'),453        'f268': CSQuantiles(LAST('LossVariance60'), groups='sw1'),454        'f269': CSQuantiles(LAST('LossVariance120'), groups='sw1'),455        'f270': CSQuantiles(LAST('GainLossVarianceRatio20'), groups='sw1'),456        'f271': CSQuantiles(LAST('GainLossVarianceRatio60'), groups='sw1'),457        'f272': CSQuantiles(LAST('GainLossVarianceRatio120'), groups='sw1'),458        'f273': CSQuantiles(LAST('RealizedVolatility'), groups='sw1'),459        'f274': CSQuantiles(LAST('REVS60'), groups='sw1'),460        'f275': CSQuantiles(LAST('REVS120'), groups='sw1'),461        'f276': CSQuantiles(LAST('REVS250'), groups='sw1'),462        'f277': CSQuantiles(LAST('REVS750'), groups='sw1'),463        'f278': CSQuantiles(LAST('REVS5m20'), groups='sw1'),464        'f279': CSQuantiles(LAST('REVS5m60'), groups='sw1'),465        'f280': CSQuantiles(LAST('REVS5Indu1'), groups='sw1'),466        'f281': CSQuantiles(LAST('REVS20Indu1'), groups='sw1'),467        'f282': CSQuantiles(LAST('Volumn1M'), groups='sw1'),468        'f283': CSQuantiles(LAST('Volumn3M'), groups='sw1'),469        'f284': CSQuantiles(LAST('Price1M'), groups='sw1'),470        'f285': CSQuantiles(LAST('Price3M'), groups='sw1'),471        'f286': CSQuantiles(LAST('Price1Y'), groups='sw1'),472        'f287': CSQuantiles(LAST('Rank1M'), groups='sw1'),473        'f288': CSQuantiles(LAST('CashDividendCover'), groups='sw1'),474        'f289': CSQuantiles(LAST('DividendCover'), groups='sw1'),475        'f290': CSQuantiles(LAST('DividendPaidRatio'), groups='sw1'),476        'f291': CSQuantiles(LAST('RetainedEarningRatio'), groups='sw1'),477        'f292': CSQuantiles(LAST('CashEquivalentPS'), groups='sw1'),478        'f293': CSQuantiles(LAST('DividendPS'), groups='sw1'),479        'f294': CSQuantiles(LAST('EPSTTM'), groups='sw1'),480        'f295': CSQuantiles(LAST('NetAssetPS'), groups='sw1'),481        'f296': CSQuantiles(LAST('TORPS'), groups='sw1'),482        'f297': CSQuantiles(LAST('TORPSLatest'), groups='sw1'),483        'f298': CSQuantiles(LAST('OperatingRevenuePS'), groups='sw1'),484        'f299': CSQuantiles(LAST('OperatingRevenuePSLatest'), groups='sw1'),485        'f300': CSQuantiles(LAST('OperatingProfitPS'), groups='sw1'),486        'f301': CSQuantiles(LAST('OperatingProfitPSLatest'), groups='sw1'),487        'f302': CSQuantiles(LAST('CapitalSurplusFundPS'), groups='sw1'),488        'f303': CSQuantiles(LAST('SurplusReserveFundPS'), groups='sw1'),489        'f304': CSQuantiles(LAST('UndividedProfitPS'), groups='sw1'),490        'f305': CSQuantiles(LAST('RetainedEarningsPS'), groups='sw1'),491        'f306': CSQuantiles(LAST('OperCashFlowPS'), groups='sw1'),492        'f307': CSQuantiles(LAST('CashFlowPS'), groups='sw1'),493        'f308': CSQuantiles(LAST('NetNonOIToTP'), groups='sw1'),494        'f309': CSQuantiles(LAST('NetNonOIToTPLatest'), groups='sw1'),495        'f310': CSQuantiles(LAST('PeriodCostsRate'), groups='sw1'),496        'f311': CSQuantiles(LAST('InterestCover'), groups='sw1'),497        'f312': CSQuantiles(LAST('NetProfitGrowRate3Y'), groups='sw1'),498        'f313': CSQuantiles(LAST('NetProfitGrowRate5Y'), groups='sw1'),499        'f314': CSQuantiles(LAST('OperatingRevenueGrowRate3Y'), groups='sw1'),500        'f315': CSQuantiles(LAST('OperatingRevenueGrowRate5Y'), groups='sw1'),501        'f316': CSQuantiles(LAST('NetCashFlowGrowRate'), groups='sw1'),502        'f317': CSQuantiles(LAST('NetProfitCashCover'), groups='sw1'),503        'f318': CSQuantiles(LAST('OperCashInToAsset'), groups='sw1'),504        'f319': CSQuantiles(LAST('CashConversionCycle'), groups='sw1'),505        'f320': CSQuantiles(LAST('OperatingCycle'), groups='sw1'),506        'f321': CSQuantiles(LAST('PEG3Y'), groups='sw1'),507        'f322': CSQuantiles(LAST('PEG5Y'), groups='sw1'),508        'f323': CSQuantiles(LAST('PEIndu'), groups='sw1'),509        'f324': CSQuantiles(LAST('PBIndu'), groups='sw1'),510        'f325': CSQuantiles(LAST('PSIndu'), groups='sw1'),511        'f326': CSQuantiles(LAST('PCFIndu'), groups='sw1'),512        'f327': CSQuantiles(LAST('PEHist20'), groups='sw1'),513        'f328': CSQuantiles(LAST('PEHist60'), groups='sw1'),514        'f329': CSQuantiles(LAST('PEHist120'), groups='sw1'),515        'f330': CSQuantiles(LAST('PEHist250'), groups='sw1'),516        'f331': CSQuantiles(LAST('StaticPE'), groups='sw1'),517        'f332': CSQuantiles(LAST('ForwardPE'), groups='sw1'),518        'f333': CSQuantiles(LAST('EnterpriseFCFPS'), groups='sw1'),519        'f334': CSQuantiles(LAST('ShareholderFCFPS'), groups='sw1'),520        'f335': CSQuantiles(LAST('ROEDiluted'), groups='sw1'),521        'f336': CSQuantiles(LAST('ROEAvg'), groups='sw1'),522        'f337': CSQuantiles(LAST('ROEWeighted'), groups='sw1'),523        'f338': CSQuantiles(LAST('ROECut'), groups='sw1'),524        'f339': CSQuantiles(LAST('ROECutWeighted'), groups='sw1'),525        'f340': CSQuantiles(LAST('ROIC'), groups='sw1'),526        'f341': CSQuantiles(LAST('ROAEBIT'), groups='sw1'),527        'f342': CSQuantiles(LAST('ROAEBITTTM'), groups='sw1'),528        'f343': CSQuantiles(LAST('OperatingNIToTP'), groups='sw1'),529        'f344': CSQuantiles(LAST('OperatingNIToTPLatest'), groups='sw1'),530        'f345': CSQuantiles(LAST('InvestRAssociatesToTP'), groups='sw1'),531        'f346': CSQuantiles(LAST('InvestRAssociatesToTPLatest'), groups='sw1'),532        'f347': CSQuantiles(LAST('NPCutToNP'), groups='sw1'),533        'f348': CSQuantiles(LAST('SuperQuickRatio'), groups='sw1'),534        'f349': CSQuantiles(LAST('TSEPToInterestBearDebt'), groups='sw1'),535        'f350': CSQuantiles(LAST('DebtTangibleEquityRatio'), groups='sw1'),536        'f351': CSQuantiles(LAST('TangibleAToInteBearDebt'), groups='sw1'),537        'f352': CSQuantiles(LAST('TangibleAToNetDebt'), groups='sw1'),538        'f353': CSQuantiles(LAST('NOCFToTLiability'), groups='sw1'),539        'f354': CSQuantiles(LAST('NOCFToInterestBearDebt'), groups='sw1'),540        'f355': CSQuantiles(LAST('NOCFToNetDebt'), groups='sw1'),541        'f356': CSQuantiles(LAST('TSEPToTotalCapital'), groups='sw1'),542        'f357': CSQuantiles(LAST('InteBearDebtToTotalCapital'), groups='sw1'),543        'f358': CSQuantiles(LAST('NPParentCompanyCutYOY'), groups='sw1'),544        'f359': CSQuantiles(LAST('SalesServiceCashToORLatest'), groups='sw1'),545        'f360': CSQuantiles(LAST('CashRateOfSalesLatest'), groups='sw1'),546        'f361': CSQuantiles(LAST('NOCFToOperatingNILatest'), groups='sw1'),547        'f362': CSQuantiles(LAST('TotalAssets'), groups='sw1'),548        'f363': CSQuantiles(LAST('MktValue'), groups='sw1'),549        'f364': CSQuantiles(LAST('NegMktValue'), groups='sw1'),550        'f365': CSQuantiles(LAST('TEAP'), groups='sw1'),551        'f366': CSQuantiles(LAST('NIAP'), groups='sw1'),552        'f367': CSQuantiles(LAST('TotalFixedAssets'), groups='sw1'),553        'f368': CSQuantiles(LAST('IntFreeCL'), groups='sw1'),554        'f369': CSQuantiles(LAST('IntFreeNCL'), groups='sw1'),555        'f370': CSQuantiles(LAST('IntCL'), groups='sw1'),556        'f371': CSQuantiles(LAST('IntDebt'), groups='sw1'),557        'f372': CSQuantiles(LAST('NetDebt'), groups='sw1'),558        'f373': CSQuantiles(LAST('NetTangibleAssets'), groups='sw1'),559        'f374': CSQuantiles(LAST('WorkingCapital'), groups='sw1'),560        'f375': CSQuantiles(LAST('WorkingCapital'), groups='sw1'),561        'f376': CSQuantiles(LAST('TotalPaidinCapital'), groups='sw1'),562        'f377': CSQuantiles(LAST('RetainedEarnings'), groups='sw1'),563        'f378': CSQuantiles(LAST('OperateNetIncome'), groups='sw1'),564        'f379': CSQuantiles(LAST('ValueChgProfit'), groups='sw1'),565        'f380': CSQuantiles(LAST('NetIntExpense'), groups='sw1'),566        'f381': CSQuantiles(LAST('EBIT'), groups='sw1'),567        'f382': CSQuantiles(LAST('EBITDA'), groups='sw1'),568        'f383': CSQuantiles(LAST('EBIAT'), groups='sw1'),569        'f384': CSQuantiles(LAST('NRProfitLoss'), groups='sw1'),570        'f385': CSQuantiles(LAST('NIAPCut'), groups='sw1'),571        'f386': CSQuantiles(LAST('FCFF'), groups='sw1'),572        'f387': CSQuantiles(LAST('FCFE'), groups='sw1'),573        'f388': CSQuantiles(LAST('DA'), groups='sw1'),574        'f389': CSQuantiles(LAST('TRevenueTTM'), groups='sw1'),575        'f390': CSQuantiles(LAST('TCostTTM'), groups='sw1'),576        'f391': CSQuantiles(LAST('RevenueTTM'), groups='sw1'),577        'f392': CSQuantiles(LAST('CostTTM'), groups='sw1'),578        'f393': CSQuantiles(LAST('GrossProfitTTM'), groups='sw1'),579        'f394': CSQuantiles(LAST('SalesExpenseTTM'), groups='sw1'),580        'f395': CSQuantiles(LAST('AdminExpenseTTM'), groups='sw1'),581        'f396': CSQuantiles(LAST('FinanExpenseTTM'), groups='sw1'),582        'f397': CSQuantiles(LAST('AssetImpairLossTTM'), groups='sw1'),583        'f398': CSQuantiles(LAST('NPFromOperatingTTM'), groups='sw1'),584        'f399': CSQuantiles(LAST('NPFromValueChgTTM'), groups='sw1'),585        'f400': CSQuantiles(LAST('OperateProfitTTM'), groups='sw1'),586        'f401': CSQuantiles(LAST('NonOperatingNPTTM'), groups='sw1'),587        'f402': CSQuantiles(LAST('TProfitTTM'), groups='sw1'),588        'f403': CSQuantiles(LAST('NetProfitTTM'), groups='sw1'),589        'f404': CSQuantiles(LAST('NetProfitAPTTM'), groups='sw1'),590        'f405': CSQuantiles(LAST('SaleServiceRenderCashTTM'), groups='sw1'),591        'f406': CSQuantiles(LAST('NetOperateCFTTM'), groups='sw1'),592        'f407': CSQuantiles(LAST('NetInvestCFTTM'), groups='sw1'),593        'f408': CSQuantiles(LAST('NetFinanceCFTTM'), groups='sw1'),594        'f409': CSQuantiles(LAST('GrossProfit'), groups='sw1'),595        'f410': CSQuantiles(LAST('Beta252'), groups='sw1'),596        'f411': CSQuantiles(LAST('RSTR504'), groups='sw1'),597        'f412': CSQuantiles(LAST('EPIBS'), groups='sw1'),598        'f413': CSQuantiles(LAST('CETOP'), groups='sw1'),599        'f414': CSQuantiles(LAST('DASTD'), groups='sw1'),600        'f415': CSQuantiles(LAST('CmraCNE5'), groups='sw1'),601        'f416': CSQuantiles(LAST('HsigmaCNE5'), groups='sw1'),602        'f417': CSQuantiles(LAST('HsigmaCNE5'), groups='sw1'),603        'f418': CSQuantiles(LAST('EgibsLong'), groups='sw1'),604        'f419': CSQuantiles(LAST('STOM'), groups='sw1'),605        'f420': CSQuantiles(LAST('STOQ'), groups='sw1'),606        'f421': CSQuantiles(LAST('STOA'), groups='sw1'),607        'f422': CSQuantiles(LAST('NLSIZE'), groups='sw1')}608    features = ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15',609                'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'f24', 'f25', 'f26', 'f27', 'f28', 'f29',610                'f30', 'f31', 'f32', 'f33', 'f34', 'f35', 'f36', 'f37', 'f38', 'f39', 'f40', 'f41', 'f42', 'f43',611                'f44', 'f45', 'f46', 'f47', 'f48', 'f49', 'f50', 'f51', 'f52', 'f53', 'f54', 'f55', 'f56', 'f57',612                'f58', 'f59', 'f60', 'f61', 'f62', 'f63', 'f64', 'f65', 'f66', 'f67', 'f68', 'f69', 'f70', 'f71',613                'f72', 'f73', 'f74', 'f75', 'f76', 'f77', 'f78', 'f79', 'f80', 'f81', 'f82', 'f83', 'f84', 'f85',614                'f86', 'f87', 'f88', 'f89', 'f90', 'f91', 'f92', 'f93', 'f94', 'f95', 'f96', 'f97', 'f98', 'f99',615                'f100']616    # features = ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15',617    #             'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'f24', 'f25', 'f26', 'f27', 'f28', 'f29',618    #             'f30', 'f31', 'f32', 'f33', 'f34', 'f35', 'f36', 'f37', 'f38', 'f39', 'f40', 'f41', 'f42', 'f43',619    #             'f44', 'f45', 'f46', 'f47', 'f48', 'f49', 'f50', 'f51', 'f52', 'f53', 'f54', 'f55', 'f56', 'f57',620    #             'f58', 'f59', 'f60', 'f61', 'f62', 'f63', 'f64', 'f65', 'f66', 'f67', 'f68', 'f69', 'f70', 'f71',621    #             'f72', 'f73', 'f74', 'f75', 'f76', 'f77', 'f78', 'f79', 'f80', 'f81', 'f82', 'f83', 'f84', 'f85',622    #             'f86', 'f87', 'f88', 'f89', 'f90', 'f91', 'f92', 'f93', 'f94', 'f95', 'f96', 'f97', 'f98', 'f99',623    #             'f100', 'f101', 'f102', 'f103', 'f104', 'f105', 'f106', 'f107', 'f108', 'f109', 'f110', 'f111', 'f112',624    #             'f113', 'f114', 'f115', 'f116', 'f117', 'f118', 'f119', 'f120', 'f121', 'f122', 'f123', 'f124', 'f125',625    #             'f126', 'f127', 'f128', 'f129', 'f130', 'f131', 'f132', 'f133', 'f134', 'f135', 'f136', 'f137', 'f138',626    #             'f139', 'f140', 'f141', 'f142', 'f143', 'f144', 'f145', 'f146', 'f147', 'f148', 'f149', 'f150', 'f151',627    #             'f152', 'f153', 'f154', 'f155', 'f156', 'f157', 'f158', 'f159', 'f160', 'f161', 'f162', 'f163', 'f164',628    #             'f165', 'f166', 'f167', 'f168', 'f169', 'f170', 'f171', 'f172', 'f173', 'f174', 'f175', 'f176', 'f177',629    #             'f178', 'f179', 'f180', 'f181', 'f182', 'f183', 'f184', 'f185', 'f186', 'f187', 'f188', 'f189', 'f190',630    #             'f191', 'f192', 'f193', 'f194', 'f195', 'f196', 'f197', 'f198', 'f199', 'f200', 'f201', 'f202', 'f203',631    #             'f204', 'f205', 'f206', 'f207', 'f208', 'f209', 'f210', 'f211', 'f212', 'f213', 'f214', 'f215', 'f216',632    #             'f217', 'f218', 'f219', 'f220', 'f221', 'f222', 'f223', 'f224', 'f225', 'f226', 'f227', 'f228', 'f229',633    #             'f230', 'f231', 'f232', 'f233', 'f234', 'f235', 'f236', 'f237', 'f238', 'f239', 'f240', 'f241', 'f242',634    #             'f243', 'f244', 'f245', 'f246', 'f247', 'f248', 'f249', 'f250', 'f251', 'f252', 'f253', 'f254', 'f255',635    #             'f256', 'f257', 'f258', 'f259', 'f260', 'f261', 'f262', 'f263', 'f264', 'f265', 'f266', 'f267', 'f268',636    #             'f269', 'f270', 'f271', 'f272', 'f273', 'f274', 'f275', 'f276', 'f277', 'f278', 'f279', 'f280', 'f281',637    #             'f282', 'f283', 'f284', 'f285', 'f286', 'f287', 'f288', 'f289', 'f290', 'f291', 'f292', 'f293', 'f294',638    #             'f295', 'f296', 'f297', 'f298', 'f299', 'f300', 'f301', 'f302', 'f303', 'f304', 'f305', 'f306', 'f307',639    #             'f308', 'f309', 'f310', 'f311', 'f312', 'f313', 'f314', 'f315', 'f316', 'f317', 'f318', 'f319', 'f320',640    #             'f321', 'f322', 'f323', 'f324', 'f325', 'f326', 'f327', 'f328', 'f329', 'f330', 'f331', 'f332', 'f333',641    #             'f334', 'f335', 'f336', 'f337', 'f338', 'f339', 'f340', 'f341', 'f342', 'f343', 'f344', 'f345', 'f346',642    #             'f347', 'f348', 'f349', 'f350', 'f351', 'f352', 'f353', 'f354', 'f355', 'f356', 'f357', 'f358', 'f359',643    #             'f360', 'f361', 'f362', 'f363', 'f364', 'f365', 'f366', 'f367', 'f368', 'f369', 'f370', 'f371', 'f372',644    #             'f373', 'f374', 'f375', 'f376', 'f377', 'f378', 'f379', 'f380', 'f381', 'f382', 'f383', 'f384', 'f385',645    #             'f386', 'f387', 'f388', 'f389', 'f390', 'f391', 'f392', 'f393', 'f394', 'f395', 'f396', 'f397', 'f398',646    #             'f399', 'f400', 'f401', 'f402', 'f403', 'f404', 'f405', 'f406', 'f407', 'f408', 'f409', 'f410', 'f411',647    #             'f412', 'f413', 'f414', 'f415', 'f416', 'f417', 'f418', 'f419', 'f420', 'f421', 'f422']648    label = ['dx']649    print('>>>>>>>>>>>>>>>>> Backtesting >>>>>>>>>>>>>>>>>')650    print('>>>>>>>>> Loading Factor Data >>>>>>>>>>')651    # è·åå åæ°æ®652    # factor_data_org = engine.fetch_factor_range(universe, basic_factor_store,653    #                                             dates=ref_dates, used_factor_tables=[Alpha191])654    factor_data_org = engine.fetch_factor_range(universe, basic_factor_store, dates=ref_dates)655    # è·åè¡ä¸æ°æ®ï¼ é£é©å å656    industry = engine.fetch_industry_range(universe, dates=ref_dates)657    factor_data = pd.merge(factor_data_org, industry, on=['trade_date', 'code']).fillna(0.)658    risk_total = engine.fetch_risk_model_range(universe, dates=ref_dates)[1]659    # è·åæ¶çç660    return_data = engine.fetch_dx_return_range(universe, dates=ref_dates, horizon=horizon, offset=0,661                                               benchmark=benchmark_code)662    print('>>>>>>>>> Loading Benchmark >>>>>>>>>>')663    # è·åbenchmark664    benchmark_total = engine.fetch_benchmark_range(dates=ref_dates, benchmark=benchmark_code)665    industry_total = engine.fetch_industry_matrix_range(universe, dates=ref_dates, category=industry_name,666                                                        level=industry_level)667    # Constraintes settings668    weight_gap = 1669    industry_names = industry_list(industry_name, industry_level)670    constraint_risk = ['EARNYILD', 'LIQUIDTY', 'GROWTH', 'SIZE', 'BETA', 'MOMENTUM'] + industry_names671    total_risk_names = constraint_risk + ['benchmark', 'total']672    b_type = []673    l_val = []674    u_val = []675    for name in total_risk_names:676        if name == 'benchmark':677            b_type.append(BoundaryType.RELATIVE)678            l_val.append(0.0)679            u_val.append(1.0)680        elif name == 'total':681            b_type.append(BoundaryType.ABSOLUTE)682            l_val.append(.0)683            u_val.append(.0)684        else:685            b_type.append(BoundaryType.ABSOLUTE)686            l_val.append(-1.005)687            u_val.append(1.005)688    bounds = create_box_bounds(total_risk_names, b_type, l_val, u_val)  # Constraintes settings689    train_data = pd.merge(factor_data, return_data, on=['trade_date', 'code']).dropna()690    print('>>>>>>>>>>>> Data Load Success >>>>>>>>>>>>')691    ret_df, tune_record = create_scenario(train_data, features, label, ref_dates, freq, lgb_conf, weight_gap,692                                          return_data, risk_total, benchmark_total, industry_total,693                                          bounds, constraint_risk, total_risk_names, GPUs)694    result_dic = {'ret_df': ret_df.to_json(), 'tune_record': tune_record.reset_index().to_json()}695    return result_dic696if __name__ == '__main__':...student-groups.component.spec.ts
Source:student-groups.component.spec.ts  
1import { async, ComponentFixture, TestBed } from '@angular/core/testing';2import { StudentGroupsComponent } from './student-groups.component';3import {GroupService} from "app/services/group/group.service";4import {UserService} from "app/services/user/user.service";5import {RouterTestingModule} from "@angular/router/testing";6import {FormsModule} from "@angular/forms";7import {Http, HttpModule} from "@angular/http";8import {AuthConfig, AuthHttp} from "angular2-jwt";9import {User} from "app/user";10import {Group} from "app/group";11import {GroupListComponent} from "app/components/core/group/group-list/group-list.component";12import {Observable} from "rxjs/Observable";13import {Subject} from "rxjs/Subject";14import {AuthService} from "../../../../../services/auth/auth.service";15import {UtilModule} from "../../../../util/util.module";16class AuthServiceMock {17  getUserAsObservable() {18    let user = new User(1, {19      first_name: 'Jan',20      last_name: 'Kowalski',21      role: 'STUDENT'22    });23    let sub = new Subject<User>();24    sub.next(user);25    return sub.asObservable();26  }27  public getAuthenticatedUser(): Promise<User> {28    let user = new User(1, {29      first_name: 'Jan',30      last_name: 'Kowalski',31      role: 'STUDENT'32    });33    return new Promise(r => r(user))34  }35}36class UserServiceMock {37  getAuthenticatedUserObject() {38    let user = new User(1, {39      'role': 'SUPERVISOR'40    })41    return new Promise((resolve) => resolve(user));42  }43  getAuthenticatedUser(): Observable<User> {44    let user = new User(1, {45      attributes: {46        role: 'SUPERVISOR'47      }48    });49    let sub = new Subject<User>();50    sub.next(user);51    return sub.asObservable();52  }53}54class GroupServiceMock {55  getGroups() {56    let source = {"data":[{"id":"1","type":"groups","links":{"self":"http://localhost:3000/groups/1"},"attributes":{"name":"Grupa 0","description":"Grupa testowa","user-count":2},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/1/relationships/users","related":"http://localhost:3000/groups/1/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/1/relationships/teachers","related":"http://localhost:3000/groups/1/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/1/relationships/courses","related":"http://localhost:3000/groups/1/courses"}}}},{"id":"2","type":"groups","links":{"self":"http://localhost:3000/groups/2"},"attributes":{"name":"SP3 GR 3","description":"LÄbork, klasa 5-6 ","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/2/relationships/users","related":"http://localhost:3000/groups/2/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/2/relationships/teachers","related":"http://localhost:3000/groups/2/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/2/relationships/courses","related":"http://localhost:3000/groups/2/courses"}}}},{"id":"3","type":"groups","links":{"self":"http://localhost:3000/groups/3"},"attributes":{"name":"Rokity gr 1","description":"Rokity, klasa 2-3","user-count":7},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/3/relationships/users","related":"http://localhost:3000/groups/3/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/3/relationships/teachers","related":"http://localhost:3000/groups/3/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/3/relationships/courses","related":"http://localhost:3000/groups/3/courses"}}}},{"id":"4","type":"groups","links":{"self":"http://localhost:3000/groups/4"},"attributes":{"name":"Nożyno gr 1","description":"Nożyno, klasa 4-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/4/relationships/users","related":"http://localhost:3000/groups/4/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/4/relationships/teachers","related":"http://localhost:3000/groups/4/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/4/relationships/courses","related":"http://localhost:3000/groups/4/courses"}}}},{"id":"10","type":"groups","links":{"self":"http://localhost:3000/groups/10"},"attributes":{"name":"Nożyno gr 2","description":"Nożyno, gimnazjum","user-count":10},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/10/relationships/users","related":"http://localhost:3000/groups/10/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/10/relationships/teachers","related":"http://localhost:3000/groups/10/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/10/relationships/courses","related":"http://localhost:3000/groups/10/courses"}}}},{"id":"11","type":"groups","links":{"self":"http://localhost:3000/groups/11"},"attributes":{"name":"Czarna DÄ
brówka gr 3","description":"Czarna DÄ
brówka, klasa 4-6, gr 3","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/11/relationships/users","related":"http://localhost:3000/groups/11/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/11/relationships/teachers","related":"http://localhost:3000/groups/11/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/11/relationships/courses","related":"http://localhost:3000/groups/11/courses"}}}},{"id":"12","type":"groups","links":{"self":"http://localhost:3000/groups/12"},"attributes":{"name":"Czarna DÄ
brówka gr 2","description":"Czarna DÄ
brówka, klasa 4-6, gr 2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/12/relationships/users","related":"http://localhost:3000/groups/12/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/12/relationships/teachers","related":"http://localhost:3000/groups/12/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/12/relationships/courses","related":"http://localhost:3000/groups/12/courses"}}}},{"id":"13","type":"groups","links":{"self":"http://localhost:3000/groups/13"},"attributes":{"name":"Czarna DÄ
brówka gr 1","description":"Czarna DÄ
brówka, klasa 2-3, gr 1","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/13/relationships/users","related":"http://localhost:3000/groups/13/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/13/relationships/teachers","related":"http://localhost:3000/groups/13/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/13/relationships/courses","related":"http://localhost:3000/groups/13/courses"}}}},{"id":"14","type":"groups","links":{"self":"http://localhost:3000/groups/14"},"attributes":{"name":"Czarna DÄ
brówka gr 4","description":"Czarna DÄ
brówka, gimnazjum, gr 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/14/relationships/users","related":"http://localhost:3000/groups/14/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/14/relationships/teachers","related":"http://localhost:3000/groups/14/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/14/relationships/courses","related":"http://localhost:3000/groups/14/courses"}}}},{"id":"15","type":"groups","links":{"self":"http://localhost:3000/groups/15"},"attributes":{"name":"Czarna DÄ
brówka gr 5","description":"Czarna DÄ
brówka, gimnazjum, gr 5","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/15/relationships/users","related":"http://localhost:3000/groups/15/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/15/relationships/teachers","related":"http://localhost:3000/groups/15/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/15/relationships/courses","related":"http://localhost:3000/groups/15/courses"}}}},{"id":"16","type":"groups","links":{"self":"http://localhost:3000/groups/16"},"attributes":{"name":"Czarna DÄ
brówka gr 6","description":"Czarna DÄ
brówka, gimnazjum, gr 6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/16/relationships/users","related":"http://localhost:3000/groups/16/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/16/relationships/teachers","related":"http://localhost:3000/groups/16/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/16/relationships/courses","related":"http://localhost:3000/groups/16/courses"}}}},{"id":"17","type":"groups","links":{"self":"http://localhost:3000/groups/17"},"attributes":{"name":"GIM 1 GR 2","description":"LÄbork, Gimnazjum 1, gr 2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/17/relationships/users","related":"http://localhost:3000/groups/17/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/17/relationships/teachers","related":"http://localhost:3000/groups/17/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/17/relationships/courses","related":"http://localhost:3000/groups/17/courses"}}}},{"id":"18","type":"groups","links":{"self":"http://localhost:3000/groups/18"},"attributes":{"name":"GIM 2 GR 2","description":"LÄbork, Gimnazjum 2, gr 2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/18/relationships/users","related":"http://localhost:3000/groups/18/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/18/relationships/teachers","related":"http://localhost:3000/groups/18/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/18/relationships/courses","related":"http://localhost:3000/groups/18/courses"}}}},{"id":"19","type":"groups","links":{"self":"http://localhost:3000/groups/19"},"attributes":{"name":"GIM 2 GR 3","description":"LÄbork, Gimnazjum 2, gr 3","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/19/relationships/users","related":"http://localhost:3000/groups/19/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/19/relationships/teachers","related":"http://localhost:3000/groups/19/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/19/relationships/courses","related":"http://localhost:3000/groups/19/courses"}}}},{"id":"21","type":"groups","links":{"self":"http://localhost:3000/groups/21"},"attributes":{"name":"GIM 2 GR 4","description":"LÄbork, Gimnazjum 2, gr 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/21/relationships/users","related":"http://localhost:3000/groups/21/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/21/relationships/teachers","related":"http://localhost:3000/groups/21/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/21/relationships/courses","related":"http://localhost:3000/groups/21/courses"}}}},{"id":"22","type":"groups","links":{"self":"http://localhost:3000/groups/22"},"attributes":{"name":"JASIEÅ","description":"JASIEÅ, klasa 5-6","user-count":7},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/22/relationships/users","related":"http://localhost:3000/groups/22/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/22/relationships/teachers","related":"http://localhost:3000/groups/22/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/22/relationships/courses","related":"http://localhost:3000/groups/22/courses"}}}},{"id":"23","type":"groups","links":{"self":"http://localhost:3000/groups/23"},"attributes":{"name":"GIM 1","description":"LÄbork, Gimnazjum nr 1","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/23/relationships/users","related":"http://localhost:3000/groups/23/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/23/relationships/teachers","related":"http://localhost:3000/groups/23/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/23/relationships/courses","related":"http://localhost:3000/groups/23/courses"}}}},{"id":"24","type":"groups","links":{"self":"http://localhost:3000/groups/24"},"attributes":{"name":"Magda","description":"Magda, kl II","user-count":1},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/24/relationships/users","related":"http://localhost:3000/groups/24/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/24/relationships/teachers","related":"http://localhost:3000/groups/24/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/24/relationships/courses","related":"http://localhost:3000/groups/24/courses"}}}},{"id":"25","type":"groups","links":{"self":"http://localhost:3000/groups/25"},"attributes":{"name":"Rokity gr 2","description":"Rokity, klasa 4-6","user-count":7},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/25/relationships/users","related":"http://localhost:3000/groups/25/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/25/relationships/teachers","related":"http://localhost:3000/groups/25/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/25/relationships/courses","related":"http://localhost:3000/groups/25/courses"}}}},{"id":"26","type":"groups","links":{"self":"http://localhost:3000/groups/26"},"attributes":{"name":"Rokity gr 3","description":"Rokity, gimnazjum","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/26/relationships/users","related":"http://localhost:3000/groups/26/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/26/relationships/teachers","related":"http://localhost:3000/groups/26/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/26/relationships/courses","related":"http://localhost:3000/groups/26/courses"}}}},{"id":"27","type":"groups","links":{"self":"http://localhost:3000/groups/27"},"attributes":{"name":"Rokity gr 4","description":"Rokity, gimnazjum","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/27/relationships/users","related":"http://localhost:3000/groups/27/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/27/relationships/teachers","related":"http://localhost:3000/groups/27/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/27/relationships/courses","related":"http://localhost:3000/groups/27/courses"}}}},{"id":"28","type":"groups","links":{"self":"http://localhost:3000/groups/28"},"attributes":{"name":"Rokity gr 5","description":"Rokity, gimnazjum","user-count":7},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/28/relationships/users","related":"http://localhost:3000/groups/28/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/28/relationships/teachers","related":"http://localhost:3000/groups/28/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/28/relationships/courses","related":"http://localhost:3000/groups/28/courses"}}}},{"id":"29","type":"groups","links":{"self":"http://localhost:3000/groups/29"},"attributes":{"name":"SP 3 GR 5","description":"LÄbork, SzkoÅa Podstawowa nr 5, klasa 4-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/29/relationships/users","related":"http://localhost:3000/groups/29/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/29/relationships/teachers","related":"http://localhost:3000/groups/29/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/29/relationships/courses","related":"http://localhost:3000/groups/29/courses"}}}},{"id":"30","type":"groups","links":{"self":"http://localhost:3000/groups/30"},"attributes":{"name":"SP4 GR 6","description":"LÄbork, SzkoÅa Podstawowa 4, klasa 4-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/30/relationships/users","related":"http://localhost:3000/groups/30/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/30/relationships/teachers","related":"http://localhost:3000/groups/30/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/30/relationships/courses","related":"http://localhost:3000/groups/30/courses"}}}},{"id":"31","type":"groups","links":{"self":"http://localhost:3000/groups/31"},"attributes":{"name":"SP4 GR 7","description":"LÄbork, SzkoÅa Podstawowa 4, klasa 4-6","user-count":9},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/31/relationships/users","related":"http://localhost:3000/groups/31/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/31/relationships/teachers","related":"http://localhost:3000/groups/31/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/31/relationships/courses","related":"http://localhost:3000/groups/31/courses"}}}},{"id":"32","type":"groups","links":{"self":"http://localhost:3000/groups/32"},"attributes":{"name":"SP 5 GR 1","description":"LÄbork, SzkoÅa Podstawowa nr 5, klasa 2,3 oraz 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/32/relationships/users","related":"http://localhost:3000/groups/32/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/32/relationships/teachers","related":"http://localhost:3000/groups/32/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/32/relationships/courses","related":"http://localhost:3000/groups/32/courses"}}}},{"id":"33","type":"groups","links":{"self":"http://localhost:3000/groups/33"},"attributes":{"name":"SP 5 GR 2","description":"LÄbork, SzkoÅa Podstawowa nr 5, klasa 4-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/33/relationships/users","related":"http://localhost:3000/groups/33/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/33/relationships/teachers","related":"http://localhost:3000/groups/33/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/33/relationships/courses","related":"http://localhost:3000/groups/33/courses"}}}},{"id":"34","type":"groups","links":{"self":"http://localhost:3000/groups/34"},"attributes":{"name":"SP 3 GR 2","description":"LÄbork, SzkoÅa Podstawowa nr 3, klasa 3-4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/34/relationships/users","related":"http://localhost:3000/groups/34/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/34/relationships/teachers","related":"http://localhost:3000/groups/34/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/34/relationships/courses","related":"http://localhost:3000/groups/34/courses"}}}},{"id":"35","type":"groups","links":{"self":"http://localhost:3000/groups/35"},"attributes":{"name":"SP4 GR 1","description":"LÄbork, SzkoÅa Podstawowa nr 4, klasa 1-2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/35/relationships/users","related":"http://localhost:3000/groups/35/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/35/relationships/teachers","related":"http://localhost:3000/groups/35/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/35/relationships/courses","related":"http://localhost:3000/groups/35/courses"}}}},{"id":"36","type":"groups","links":{"self":"http://localhost:3000/groups/36"},"attributes":{"name":"GIM 3 GR 2","description":"LÄbork, Gimnazjum nr 3, gr 2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/36/relationships/users","related":"http://localhost:3000/groups/36/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/36/relationships/teachers","related":"http://localhost:3000/groups/36/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/36/relationships/courses","related":"http://localhost:3000/groups/36/courses"}}}},{"id":"37","type":"groups","links":{"self":"http://localhost:3000/groups/37"},"attributes":{"name":"GIM 3 GR 1","description":"LÄbork, Gimnazjum nr 3, gr 1","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/37/relationships/users","related":"http://localhost:3000/groups/37/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/37/relationships/teachers","related":"http://localhost:3000/groups/37/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/37/relationships/courses","related":"http://localhost:3000/groups/37/courses"}}}},{"id":"38","type":"groups","links":{"self":"http://localhost:3000/groups/38"},"attributes":{"name":"SP 4 GR 3","description":"LÄbork, SzkoÅa Podstawowa nr 4, kl. 6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/38/relationships/users","related":"http://localhost:3000/groups/38/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/38/relationships/teachers","related":"http://localhost:3000/groups/38/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/38/relationships/courses","related":"http://localhost:3000/groups/38/courses"}}}},{"id":"39","type":"groups","links":{"self":"http://localhost:3000/groups/39"},"attributes":{"name":"ZS 3 GR 5","description":"LÄbork, szkoÅa podstawowa, klasa 6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/39/relationships/users","related":"http://localhost:3000/groups/39/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/39/relationships/teachers","related":"http://localhost:3000/groups/39/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/39/relationships/courses","related":"http://localhost:3000/groups/39/courses"}}}},{"id":"40","type":"groups","links":{"self":"http://localhost:3000/groups/40"},"attributes":{"name":"GIM 3 GR 3","description":"LÄbork, Gimnazjum nr 3, gr 3","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/40/relationships/users","related":"http://localhost:3000/groups/40/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/40/relationships/teachers","related":"http://localhost:3000/groups/40/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/40/relationships/courses","related":"http://localhost:3000/groups/40/courses"}}}},{"id":"41","type":"groups","links":{"self":"http://localhost:3000/groups/41"},"attributes":{"name":"SP 4 GR 2","description":"LÄbork, SzkoÅa Podstawowa nr 4, gr 2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/41/relationships/users","related":"http://localhost:3000/groups/41/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/41/relationships/teachers","related":"http://localhost:3000/groups/41/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/41/relationships/courses","related":"http://localhost:3000/groups/41/courses"}}}},{"id":"42","type":"groups","links":{"self":"http://localhost:3000/groups/42"},"attributes":{"name":"SP 4 GR 4","description":"LÄbork, SzkoÅa Podstawowa nr 4, gr 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/42/relationships/users","related":"http://localhost:3000/groups/42/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/42/relationships/teachers","related":"http://localhost:3000/groups/42/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/42/relationships/courses","related":"http://localhost:3000/groups/42/courses"}}}},{"id":"43","type":"groups","links":{"self":"http://localhost:3000/groups/43"},"attributes":{"name":"SP 8 GR 3","description":"LÄbork, SzkoÅa Podstawowa nr 8, gr 3","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/43/relationships/users","related":"http://localhost:3000/groups/43/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/43/relationships/teachers","related":"http://localhost:3000/groups/43/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/43/relationships/courses","related":"http://localhost:3000/groups/43/courses"}}}},{"id":"44","type":"groups","links":{"self":"http://localhost:3000/groups/44"},"attributes":{"name":" SP 8 GR 5","description":"LÄbork, SzkoÅa Podstawowa nr 8, gr 5","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/44/relationships/users","related":"http://localhost:3000/groups/44/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/44/relationships/teachers","related":"http://localhost:3000/groups/44/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/44/relationships/courses","related":"http://localhost:3000/groups/44/courses"}}}},{"id":"45","type":"groups","links":{"self":"http://localhost:3000/groups/45"},"attributes":{"name":"SP 8 GR 1","description":"LÄbork, SzkoÅa Podstawowa nr 8, klasa 1-2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/45/relationships/users","related":"http://localhost:3000/groups/45/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/45/relationships/teachers","related":"http://localhost:3000/groups/45/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/45/relationships/courses","related":"http://localhost:3000/groups/45/courses"}}}},{"id":"46","type":"groups","links":{"self":"http://localhost:3000/groups/46"},"attributes":{"name":"SP 8 GR 2","description":"LÄbork, SzkoÅa Podstawowa nr 8, klasa 3-4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/46/relationships/users","related":"http://localhost:3000/groups/46/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/46/relationships/teachers","related":"http://localhost:3000/groups/46/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/46/relationships/courses","related":"http://localhost:3000/groups/46/courses"}}}},{"id":"47","type":"groups","links":{"self":"http://localhost:3000/groups/47"},"attributes":{"name":"SP 8 GR 4","description":"LÄbork, SzkoÅa Podstawowa nr 8, klasa 4-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/47/relationships/users","related":"http://localhost:3000/groups/47/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/47/relationships/teachers","related":"http://localhost:3000/groups/47/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/47/relationships/courses","related":"http://localhost:3000/groups/47/courses"}}}},{"id":"48","type":"groups","links":{"self":"http://localhost:3000/groups/48"},"attributes":{"name":"SP 8 GR 6","description":"LÄbork, SzkoÅa Podstawowa nr 8, klasa 6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/48/relationships/users","related":"http://localhost:3000/groups/48/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/48/relationships/teachers","related":"http://localhost:3000/groups/48/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/48/relationships/courses","related":"http://localhost:3000/groups/48/courses"}}}},{"id":"49","type":"groups","links":{"self":"http://localhost:3000/groups/49"},"attributes":{"name":"SP3 GR 1","description":"LÄbork, SzkoÅa Podstawowa nr 3, klasa 2","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/49/relationships/users","related":"http://localhost:3000/groups/49/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/49/relationships/teachers","related":"http://localhost:3000/groups/49/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/49/relationships/courses","related":"http://localhost:3000/groups/49/courses"}}}},{"id":"50","type":"groups","links":{"self":"http://localhost:3000/groups/50"},"attributes":{"name":"SP3 GR 4","description":"LÄbork, SzkoÅa Podstawowa nr 3, klasa 5-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/50/relationships/users","related":"http://localhost:3000/groups/50/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/50/relationships/teachers","related":"http://localhost:3000/groups/50/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/50/relationships/courses","related":"http://localhost:3000/groups/50/courses"}}}},{"id":"51","type":"groups","links":{"self":"http://localhost:3000/groups/51"},"attributes":{"name":"GIM 2 GR 1","description":"LÄbork, Gimnazjum nr 2, gr 1","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/51/relationships/users","related":"http://localhost:3000/groups/51/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/51/relationships/teachers","related":"http://localhost:3000/groups/51/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/51/relationships/courses","related":"http://localhost:3000/groups/51/courses"}}}},{"id":"52","type":"groups","links":{"self":"http://localhost:3000/groups/52"},"attributes":{"name":"GIM 3 GR 5B","description":"LÄbork, Gimnazjum nr 3, klasa 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/52/relationships/users","related":"http://localhost:3000/groups/52/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/52/relationships/teachers","related":"http://localhost:3000/groups/52/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/52/relationships/courses","related":"http://localhost:3000/groups/52/courses"}}}},{"id":"53","type":"groups","links":{"self":"http://localhost:3000/groups/53"},"attributes":{"name":"LEÅNICE GR 1","description":"LeÅnice, szkoÅa podstawowa, klasa 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/53/relationships/users","related":"http://localhost:3000/groups/53/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/53/relationships/teachers","related":"http://localhost:3000/groups/53/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/53/relationships/courses","related":"http://localhost:3000/groups/53/courses"}}}},{"id":"54","type":"groups","links":{"self":"http://localhost:3000/groups/54"},"attributes":{"name":"NWL GR 1","description":"Nowa WieÅ LÄborska, szkoÅa podstawowa, klasa 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/54/relationships/users","related":"http://localhost:3000/groups/54/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/54/relationships/teachers","related":"http://localhost:3000/groups/54/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/54/relationships/courses","related":"http://localhost:3000/groups/54/courses"}}}},{"id":"55","type":"groups","links":{"self":"http://localhost:3000/groups/55"},"attributes":{"name":"NWL GR 2","description":"Nowa WieÅ LÄborska, szkoÅa podstawowa, klasa 6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/55/relationships/users","related":"http://localhost:3000/groups/55/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/55/relationships/teachers","related":"http://localhost:3000/groups/55/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/55/relationships/courses","related":"http://localhost:3000/groups/55/courses"}}}},{"id":"56","type":"groups","links":{"self":"http://localhost:3000/groups/56"},"attributes":{"name":"NWL GR 3","description":"Nowa WieÅ LÄborska, szkoÅa podstawowa, klasa 6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/56/relationships/users","related":"http://localhost:3000/groups/56/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/56/relationships/teachers","related":"http://localhost:3000/groups/56/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/56/relationships/courses","related":"http://localhost:3000/groups/56/courses"}}}},{"id":"57","type":"groups","links":{"self":"http://localhost:3000/groups/57"},"attributes":{"name":"NWL GR 4","description":"Nowa WieÅ LÄborska, gimnazjum","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/57/relationships/users","related":"http://localhost:3000/groups/57/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/57/relationships/teachers","related":"http://localhost:3000/groups/57/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/57/relationships/courses","related":"http://localhost:3000/groups/57/courses"}}}},{"id":"58","type":"groups","links":{"self":"http://localhost:3000/groups/58"},"attributes":{"name":"NWL GR 5","description":"Nowa WieÅ LÄborska, gimnazjum","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/58/relationships/users","related":"http://localhost:3000/groups/58/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/58/relationships/teachers","related":"http://localhost:3000/groups/58/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/58/relationships/courses","related":"http://localhost:3000/groups/58/courses"}}}},{"id":"59","type":"groups","links":{"self":"http://localhost:3000/groups/59"},"attributes":{"name":"NWL GR 6","description":"Nowa WieÅ LÄborska, gimnazjum","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/59/relationships/users","related":"http://localhost:3000/groups/59/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/59/relationships/teachers","related":"http://localhost:3000/groups/59/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/59/relationships/courses","related":"http://localhost:3000/groups/59/courses"}}}},{"id":"60","type":"groups","links":{"self":"http://localhost:3000/groups/60"},"attributes":{"name":"REDKOWICE GR 1","description":"Redkowice, szkoÅa podstawowa, klasa 1-3","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/60/relationships/users","related":"http://localhost:3000/groups/60/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/60/relationships/teachers","related":"http://localhost:3000/groups/60/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/60/relationships/courses","related":"http://localhost:3000/groups/60/courses"}}}},{"id":"61","type":"groups","links":{"self":"http://localhost:3000/groups/61"},"attributes":{"name":"REDKOWICE GR 2","description":"Redkowice, szkoÅa podstawowa, klasa 4","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/61/relationships/users","related":"http://localhost:3000/groups/61/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/61/relationships/teachers","related":"http://localhost:3000/groups/61/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/61/relationships/courses","related":"http://localhost:3000/groups/61/courses"}}}},{"id":"62","type":"groups","links":{"self":"http://localhost:3000/groups/62"},"attributes":{"name":"REDKOWICE GR 3","description":"Redkowice, szkoÅa podstawowa, klasa 4-6","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/62/relationships/users","related":"http://localhost:3000/groups/62/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/62/relationships/teachers","related":"http://localhost:3000/groups/62/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/62/relationships/courses","related":"http://localhost:3000/groups/62/courses"}}}},{"id":"63","type":"groups","links":{"self":"http://localhost:3000/groups/63"},"attributes":{"name":"REDKOWICE GR 4","description":"Redkowice, szkoÅa podstawowa, klasa 1-3","user-count":8},"relationships":{"users":{"links":{"self":"http://localhost:3000/groups/63/relationships/users","related":"http://localhost:3000/groups/63/users"}},"teachers":{"links":{"self":"http://localhost:3000/groups/63/relationships/teachers","related":"http://localhost:3000/groups/63/teachers"}},"courses":{"links":{"self":"http://localhost:3000/groups/63/relationships/courses","related":"http://localhost:3000/groups/63/courses"}}}}]};57    let groups = source.data.map((item) => {58      return new Group(+item.id, item.attributes);59    });60    return new Promise((resolve) => resolve(groups));61  }62}63describe('StudentGroupsComponent',  () => {64  let component: StudentGroupsComponent;65  let fixture: ComponentFixture<StudentGroupsComponent>;66  beforeEach(async(() => {67    TestBed.configureTestingModule({68      imports: [ RouterTestingModule, FormsModule, HttpModule, UtilModule ],69      declarations: [ StudentGroupsComponent, GroupListComponent ],70      providers: [71        {provide: GroupService, useClass: GroupServiceMock},72        {provide: AuthService, useClass: AuthServiceMock},73        {provide: UserService, useClass: UserServiceMock},74        {75          provide: AuthHttp,76          useFactory: (http) => {77            return new AuthHttp(new AuthConfig(), http);78          },79          deps: [Http]80        }81      ]82    })83    .compileComponents();84    fixture = TestBed.createComponent(StudentGroupsComponent);85    component = fixture.componentInstance;86    fixture.detectChanges();87  }))88  it('should create', () => {89    expect(component).toBeTruthy();90  });...test.py
Source:test.py  
...39def test_objects():40  db = bob.db.cbsr_nir_vis_2.Database()41  p = "view2_1"42  #Checking groups43  assert len(db.groups(protocol=p)) == 344  #cheking files45  assert len(db.objects(protocol=p))== 8750+6481+656646  assert len(db.objects(protocol=p, groups="world"))== 875047  # Checking the modalities48  assert len(db.objects(protocol=p, groups="world", modality=["VIS"])) == 248049  assert len(db.objects(protocol=p, groups="world", modality=["NIR"])) == 627050  51  assert len(db.objects(protocol=p, groups="dev"))== 648152  assert len(db.objects(protocol=p, groups="eval"))== 656653  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 35854  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 612355  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 35856  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 620857  p = "view2_2"58  #Checking groups59  assert len(db.groups(protocol=p)) == 360  #cheking files 61  assert len(db.objects(protocol=p))== 8750+6481+659062  assert len(db.objects(protocol=p, groups="world"))== 875063  assert len(db.objects(protocol=p, groups="world", modality=["VIS"])) == 248064  assert len(db.objects(protocol=p, groups="world", modality=["NIR"])) == 627065  66  assert len(db.objects(protocol=p, groups="dev"))== 648167  assert len(db.objects(protocol=p, groups="eval"))== 659068  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 35869  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 612370  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 35871  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 623272  p = "view2_3"73  #Checking groups74  assert len(db.groups(protocol=p)) == 375  #cheking files 76  assert len(db.objects(protocol=p))== 8750+6481+656877  assert len(db.objects(protocol=p, groups="world"))== 875078  assert len(db.objects(protocol=p, groups="dev"))== 648179  assert len(db.objects(protocol=p, groups="eval"))== 656880  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 35881  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 612382  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 35883  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 621084  p = "view2_4"85  #Checking groups86  assert len(db.groups(protocol=p)) == 387  #cheking files 88  assert len(db.objects(protocol=p))== 8750+6481+641389  assert len(db.objects(protocol=p, groups="world"))== 875090  assert len(db.objects(protocol=p, groups="dev"))== 648191  assert len(db.objects(protocol=p, groups="eval"))== 641392  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 35893  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 612394  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 35895  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 605596  p = "view2_5"97  #Checking groups98  assert len(db.groups(protocol=p)) == 399  #cheking files 100  assert len(db.objects(protocol=p))== 8750+6481+6562101  assert len(db.objects(protocol=p, groups="world"))== 8750102  assert len(db.objects(protocol=p, groups="dev"))== 6481103  assert len(db.objects(protocol=p, groups="eval"))== 6562104  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 358105  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 6123106  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 358107  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 6204108  p = "view2_6"109  #Checking groups110  assert len(db.groups(protocol=p)) == 3111  #cheking files 112  assert len(db.objects(protocol=p))== 8750+6481+6549113  assert len(db.objects(protocol=p, groups="world"))== 8750114  assert len(db.objects(protocol=p, groups="dev"))== 6481115  assert len(db.objects(protocol=p, groups="eval"))== 6549116  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 358117  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 6123118  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 358119  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 6191120  121  p = "view2_7"122  #Checking groups123  assert len(db.groups(protocol=p)) == 3124  #cheking files 125  assert len(db.objects(protocol=p))== 8750+6481+6605126  assert len(db.objects(protocol=p, groups="world"))== 8750127  assert len(db.objects(protocol=p, groups="dev"))== 6481128  assert len(db.objects(protocol=p, groups="eval"))== 6605129  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 358130  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 6123131  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 358132  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 6247133  p = "view2_8"134  #Checking groups135  assert len(db.groups(protocol=p)) == 3136  #cheking files 137  assert len(db.objects(protocol=p))== 8750+6481+6580138  assert len(db.objects(protocol=p, groups="world"))== 8750139  assert len(db.objects(protocol=p, groups="dev"))== 6481140  assert len(db.objects(protocol=p, groups="eval"))== 6580141  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 358142  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 6123143  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 358144  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 6222145  p = "view2_9"146  #Checking groups147  assert len(db.groups(protocol=p)) == 3148  #cheking files 149  assert len(db.objects(protocol=p))== 8750+6481+6520150  assert len(db.objects(protocol=p, groups="world"))== 8750151  assert len(db.objects(protocol=p, groups="dev"))== 6481152  assert len(db.objects(protocol=p, groups="eval"))== 6520153  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 358154  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 6123155  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 358156  assert len(db.objects(protocol=p, groups="eval", purposes="probe"))== 6162157  #db = bob.db.cbsr_nir_vis_2.Database()158  p = "view2_10"159  #Checking groups160  assert len(db.groups(protocol=p)) == 3161  #cheking files 162  assert len(db.objects(protocol=p))== 8750+6481+6603163  assert len(db.objects(protocol=p, groups="world"))== 8750164  assert len(db.objects(protocol=p, groups="dev"))== 6481165  assert len(db.objects(protocol=p, groups="eval"))== 6603166  assert len(db.objects(protocol=p, groups="dev", purposes="enroll"))== 358167  assert len(db.objects(protocol=p, groups="dev", purposes="probe"))== 6123168  assert len(db.objects(protocol=p, groups="eval", purposes="enroll"))== 358...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
