示例#1
0
 def Dependency(self):
     Dependency = {}
     if self.Benchmark: Dependency["基准投资组合"] = True
     if self.TargetIDs:
         CompiledIDFilterStr, IDFilterFactors = testIDFilterStr(self.TargetIDs)
         if CompiledIDFilterStr is None: raise __QS_Error__("ID 过滤字符串有误!")
         Dependency["因子"] = IDFilterFactors
     return Dependency
示例#2
0
 def __QS_start__(self, mdl, dts, **kwargs):
     if self._isStarted: return ()
     super().__QS_start__(mdl=mdl, dts=dts, **kwargs)
     self._Output = {}
     self._Output["正常收益率"] = np.zeros(shape=(0, self.EventPreWindow+1+self.EventPostWindow))
     self._Output["异常收益率"] = np.zeros(shape=(0, self.EventPreWindow+1+self.EventPostWindow))
     self._Output["异常协方差"] = np.zeros(shape=(0, self.EventPreWindow+1+self.EventPostWindow, self.EventPreWindow+1+self.EventPostWindow))
     self._Output["事件记录"] = np.full(shape=(0, 3), fill_value=None, dtype="O")# [ID, 时点, 事件发生距离当前的时点数]
     self._AllDTs = self._FactorTable.getDateTime()
     if self.EstSampleFilter: self._CompiledIDFilterStr, self._FilterFactors = testIDFilterStr(self.EstSampleFilter, self._FactorTable.FactorNames)
     if not self._AllDTs: self._AllDTs = dts
     return (self._FactorTable, )
示例#3
0
 def genConstraint(self):
     if not self.TargetIDs:
         UpConstraint = pd.Series(self.UpLimit, index=self._PC._TargetIDs)
         DownConstraint = pd.Series(self.DownLimit, index=self._PC._TargetIDs)
     else:
         UpConstraint = pd.Series(np.inf, index=self._PC._TargetIDs)
         DownConstraint = pd.Series(-np.inf, index=self._PC._TargetIDs)
         CompiledIDFilterStr, IDFilterFactors = testIDFilterStr(self.TargetIDs)
         TargetIDs = filterID(self._PC.FactorData.loc[:, IDFilterFactors])
         TargetIDs = list(set(TargetIDs).intersection(self._PC._TargetIDs))
         UpConstraint[TargetIDs] = self.UpLimit
         DownConstraint[TargetIDs] = self.DownLimit
     if self.Benchmark:
         UpConstraint += self._PC.BenchmarkHolding
         DownConstraint += self._PC.BenchmarkHolding
     return [{"type":"Box", "lb":DownConstraint.values.reshape((self._PC._nID, 1)), "ub":UpConstraint.values.reshape((self._PC._nID, 1))}]
示例#4
0
def _getDefaultNontradableIDFilter(data_source=None,
                                   nonbuyable=True,
                                   qs_env=None):
    if data_source is None:
        return None
    with shelve.open(qs_env.SysArgs['LibPath'] + os.sep +
                     'IDFilter') as LibFile:
        if nonbuyable:
            DefaultNontradableIDFilter = LibFile.get('默认限买条件')
        else:
            DefaultNontradableIDFilter = LibFile.get('默认限卖条件')
    if DefaultNontradableIDFilter is not None:
        CompiledIDFilterStr, IDFilterFactors = testIDFilterStr(
            DefaultNontradableIDFilter, data_source.FactorNames)
        if CompiledIDFilterStr is not None:
            return DefaultNontradableIDFilter
    AllFactorNames = set(data_source.FactorNames)
    if {'交易状态', '涨跌停'}.issubset(AllFactorNames):
        if nonbuyable:
            DefaultNontradableIDFilter = "(@交易状态==0) | (@交易状态==-2) | pd.isnull(@交易状态) | (@涨跌停==1)"
        else:
            DefaultNontradableIDFilter = "(@交易状态==0) | (@交易状态==-2) | pd.isnull(@交易状态) | (@涨跌停==-1)"
    elif '交易状态' in AllFactorNames:
        DefaultNontradableIDFilter = "(@交易状态==0) | (@交易状态==-2) | pd.isnull(@交易状态)"
    elif {'是否在市', '涨跌停'}.issubset(AllFactorNames):
        if nonbuyable:
            DefaultNontradableIDFilter = "(@是否在市!=1) | (@涨跌停==1)"
        else:
            DefaultNontradableIDFilter = "(@是否在市!=1) | (@涨跌停==-1)"
    elif '是否在市' in AllFactorNames:
        DefaultNontradableIDFilter = "(@是否在市!=1)"
    elif '涨跌停' in AllFactorNames:
        if nonbuyable:
            DefaultNontradableIDFilter = "(@涨跌停==1)"
        else:
            DefaultNontradableIDFilter = "(@涨跌停==-1)"
    else:
        DefaultNontradableIDFilter = None
    return DefaultNontradableIDFilter