mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-28 06:13:40 +08:00
ef4f642e62
This patch lays the groundwork for a compute engine designed to facilitate construction of factor-based universe screening and portfolio allocation. It contains: A new module, `zipline.modelling`, containing entities that can be used to express computations as dependency graphs. Each node in such a graph is an instance of the base `Term` class, defined in `zipline.modelling.term`. Dependency graphs are executed by instances of `FFCEngine`, defined in `zipline.modelling.engine`. A new module, `zipline.data.ffc`, containing loaders and dataset definitions for inputs to the modelling API. New `TradingAlgorithm` api methods: `add_factor`, and `add_filter`. These methods can only be called from `initialize`, and are used to inform the algorithm that each day it should compute the given terms. Computed factor results are made available through a new attribute of the `data` object in `before_trading_start` and `handle_data`. Computed filter results control which assets are available in the factor matrix on each day.
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
#
|
|
# Copyright 2013 Quantopian, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import math
|
|
|
|
|
|
def tolerant_equals(a, b, atol=10e-7, rtol=10e-7):
|
|
return math.fabs(a - b) <= (atol + rtol * math.fabs(b))
|
|
|
|
|
|
try:
|
|
# fast versions
|
|
import bottleneck as bn
|
|
nanmean = bn.nanmean
|
|
nanstd = bn.nanstd
|
|
nansum = bn.nansum
|
|
nanmax = bn.nanmax
|
|
nanmin = bn.nanmin
|
|
nanargmax = bn.nanargmax
|
|
nanargmin = bn.nanargmin
|
|
except ImportError:
|
|
# slower numpy
|
|
import numpy as np
|
|
nanmean = np.nanmean
|
|
nanstd = np.nanstd
|
|
nansum = np.nansum
|
|
nanmax = np.nanmax
|
|
nanmin = np.nanmin
|
|
nanargmax = np.nanargmax
|
|
nanargmin = np.nanargmin
|