mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-16 01:06:56 +08:00
add docstring & fix code
This commit is contained in:
@@ -8,6 +8,20 @@ from qlib.data.data import Cal
|
|||||||
|
|
||||||
|
|
||||||
def get_calendar_day(freq="day", future=False):
|
def get_calendar_day(freq="day", future=False):
|
||||||
|
"""Load High-Freq Calendar Date Using Memcache.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
freq : str
|
||||||
|
frequency of read calendar file.
|
||||||
|
future : bool
|
||||||
|
whether including future trading day.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
_calendar:
|
||||||
|
array of date.
|
||||||
|
"""
|
||||||
flag = f"{freq}_future_{future}_day"
|
flag = f"{freq}_future_{future}_day"
|
||||||
if flag in H["c"]:
|
if flag in H["c"]:
|
||||||
_calendar = H["c"][flag]
|
_calendar = H["c"][flag]
|
||||||
@@ -18,6 +32,19 @@ def get_calendar_day(freq="day", future=False):
|
|||||||
|
|
||||||
|
|
||||||
class DayLast(ElemOperator):
|
class DayLast(ElemOperator):
|
||||||
|
"""DayLast Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature : Expression
|
||||||
|
feature instance
|
||||||
|
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
a series of that each value equals the last value of its day
|
||||||
|
"""
|
||||||
|
|
||||||
def _load_internal(self, instrument, start_index, end_index, freq):
|
def _load_internal(self, instrument, start_index, end_index, freq):
|
||||||
_calendar = get_calendar_day(freq=freq)
|
_calendar = get_calendar_day(freq=freq)
|
||||||
series = self.feature.load(instrument, start_index, end_index, freq)
|
series = self.feature.load(instrument, start_index, end_index, freq)
|
||||||
@@ -25,18 +52,57 @@ class DayLast(ElemOperator):
|
|||||||
|
|
||||||
|
|
||||||
class FFillNan(ElemOperator):
|
class FFillNan(ElemOperator):
|
||||||
|
"""FFillNan Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature : Expression
|
||||||
|
feature instance
|
||||||
|
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
a forward fill nan feature
|
||||||
|
"""
|
||||||
|
|
||||||
def _load_internal(self, instrument, start_index, end_index, freq):
|
def _load_internal(self, instrument, start_index, end_index, freq):
|
||||||
series = self.feature.load(instrument, start_index, end_index, freq)
|
series = self.feature.load(instrument, start_index, end_index, freq)
|
||||||
return series.fillna(method="ffill")
|
return series.fillna(method="ffill")
|
||||||
|
|
||||||
|
|
||||||
class BFillNan(ElemOperator):
|
class BFillNan(ElemOperator):
|
||||||
|
"""BFillNan Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature : Expression
|
||||||
|
feature instance
|
||||||
|
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
a backfoward fill nan feature
|
||||||
|
"""
|
||||||
|
|
||||||
def _load_internal(self, instrument, start_index, end_index, freq):
|
def _load_internal(self, instrument, start_index, end_index, freq):
|
||||||
series = self.feature.load(instrument, start_index, end_index, freq)
|
series = self.feature.load(instrument, start_index, end_index, freq)
|
||||||
return series.fillna(method="bfill")
|
return series.fillna(method="bfill")
|
||||||
|
|
||||||
|
|
||||||
class Date(ElemOperator):
|
class Date(ElemOperator):
|
||||||
|
"""Date Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature : Expression
|
||||||
|
feature instance
|
||||||
|
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
a series of that each value is the date corresponding to feature.index
|
||||||
|
"""
|
||||||
|
|
||||||
def _load_internal(self, instrument, start_index, end_index, freq):
|
def _load_internal(self, instrument, start_index, end_index, freq):
|
||||||
_calendar = get_calendar_day(freq=freq)
|
_calendar = get_calendar_day(freq=freq)
|
||||||
series = self.feature.load(instrument, start_index, end_index, freq)
|
series = self.feature.load(instrument, start_index, end_index, freq)
|
||||||
@@ -44,6 +110,22 @@ class Date(ElemOperator):
|
|||||||
|
|
||||||
|
|
||||||
class Select(PairOperator):
|
class Select(PairOperator):
|
||||||
|
"""Select Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature_left : Expression
|
||||||
|
feature instance, select condition
|
||||||
|
feature_right : Expression
|
||||||
|
feature instance, select value
|
||||||
|
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
value(feature_right) that meets the condition(feature_left)
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
def _load_internal(self, instrument, start_index, end_index, freq):
|
def _load_internal(self, instrument, start_index, end_index, freq):
|
||||||
series_condition = self.feature_left.load(instrument, start_index, end_index, freq)
|
series_condition = self.feature_left.load(instrument, start_index, end_index, freq)
|
||||||
series_feature = self.feature_right.load(instrument, start_index, end_index, freq)
|
series_feature = self.feature_right.load(instrument, start_index, end_index, freq)
|
||||||
@@ -51,16 +133,46 @@ class Select(PairOperator):
|
|||||||
|
|
||||||
|
|
||||||
class IsNull(ElemOperator):
|
class IsNull(ElemOperator):
|
||||||
|
"""IsNull Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature : Expression
|
||||||
|
feature instance
|
||||||
|
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
A series indicating whether the feature is nan
|
||||||
|
"""
|
||||||
|
|
||||||
def _load_internal(self, instrument, start_index, end_index, freq):
|
def _load_internal(self, instrument, start_index, end_index, freq):
|
||||||
series = self.feature.load(instrument, start_index, end_index, freq)
|
series = self.feature.load(instrument, start_index, end_index, freq)
|
||||||
return series.isnull()
|
return series.isnull()
|
||||||
|
|
||||||
|
|
||||||
class Cut(ElemOperator):
|
class Cut(ElemOperator):
|
||||||
|
"""Cut Operator
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
feature : Expression
|
||||||
|
feature instance
|
||||||
|
l : int
|
||||||
|
l > 0, delete the first l elements of feature (default is None, which means 0)
|
||||||
|
r : int
|
||||||
|
r < 0, delete the last -r elements of feature (default is None, which means 0)
|
||||||
|
Returns
|
||||||
|
----------
|
||||||
|
feature:
|
||||||
|
A series with the first l and last -r elements deleted from the feature.
|
||||||
|
Note: It is deleted from the raw data, not the sliced data
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, feature, l=None, r=None):
|
def __init__(self, feature, l=None, r=None):
|
||||||
self.l = l
|
self.l = l
|
||||||
self.r = r
|
self.r = r
|
||||||
if (self.l != None and self.l <= 0) or (self.r != None and self.r >= 0):
|
if (not self.l is None and self.l <= 0) or (not self.r is None and self.r >= 0):
|
||||||
raise ValueError("Cut operator l shoud > 0 and r should < 0")
|
raise ValueError("Cut operator l shoud > 0 and r should < 0")
|
||||||
|
|
||||||
super(Cut, self).__init__(feature)
|
super(Cut, self).__init__(feature)
|
||||||
@@ -70,8 +182,8 @@ class Cut(ElemOperator):
|
|||||||
return series.iloc[self.l : self.r]
|
return series.iloc[self.l : self.r]
|
||||||
|
|
||||||
def get_extended_window_size(self):
|
def get_extended_window_size(self):
|
||||||
ll = 0 if self.l == None else self.l
|
ll = 0 if self.l is None else self.l
|
||||||
rr = 0 if self.r == None else abs(self.r)
|
rr = 0 if self.r is None else abs(self.r)
|
||||||
lft_etd, rght_etd = self.feature.get_extended_window_size()
|
lft_etd, rght_etd = self.feature.get_extended_window_size()
|
||||||
lft_etd = lft_etd + ll
|
lft_etd = lft_etd + ll
|
||||||
rght_etd = rght_etd + rr
|
rght_etd = rght_etd + rr
|
||||||
|
|||||||
Reference in New Issue
Block a user