1、研究多空不对称策略
This commit is contained in:
@@ -521,4 +521,72 @@ class RelativeVolumeInWindow(Indicator):
|
||||
return relative_volume
|
||||
|
||||
def get_name(self) -> str:
|
||||
return f"relative_volume_sma{self.n_period}_idx{self.impulse_index_from_end}"
|
||||
return f"relative_volume_sma{self.n_period}_idx{self.impulse_index_from_end}"
|
||||
|
||||
|
||||
class ROC_MA(Indicator):
|
||||
"""
|
||||
变动率的移动平均 (ROC_MA) 指标实现。
|
||||
该指标首先计算ROC,然后对其结果应用移动平均,以获得更平滑的动量曲线。
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
roc_window: int = 60,
|
||||
ma_window: int = 20,
|
||||
down_bound: float = None,
|
||||
up_bound: float = None,
|
||||
shift_window: int = 0,
|
||||
):
|
||||
"""
|
||||
初始化 ROC_MA 指标。
|
||||
|
||||
Args:
|
||||
roc_window (int): 计算ROC所需的回看周期。
|
||||
ma_window (int): 对ROC值进行平滑的移动平均周期。
|
||||
down_bound (float): (可选) 用于条件判断的下轨。
|
||||
up_bound (float): (可选) 用于条件判断的上轨。
|
||||
shift_window (int): (可选) 指标值的时间偏移。
|
||||
"""
|
||||
# 【关键】调用父类的初始化方法
|
||||
super().__init__(down_bound, up_bound)
|
||||
|
||||
self.roc_window = roc_window
|
||||
self.ma_window = ma_window
|
||||
self.shift_window = shift_window
|
||||
|
||||
def get_values(
|
||||
self,
|
||||
close: np.array,
|
||||
open: np.array,
|
||||
high: np.array,
|
||||
low: np.array,
|
||||
volume: np.array,
|
||||
) -> np.array:
|
||||
"""
|
||||
根据收盘价列表计算 ROC_MA 值。
|
||||
|
||||
Args:
|
||||
close (np.array): 收盘价列表。
|
||||
其他 OHLCV 参数在此指标中不使用。
|
||||
|
||||
Returns:
|
||||
np.array: ROC_MA 值列表。如果数据不足,则列表开头为NaN。
|
||||
"""
|
||||
# 步骤 1: 使用 talib.ROC 计算原始的ROC值
|
||||
# TA-Lib 会在数据不足时自动填充 NaN
|
||||
roc_values = talib.ROC(close, timeperiod=self.roc_window)
|
||||
|
||||
# 步骤 2: 对 roc_values 计算移动平均 (SMA)
|
||||
# 注意:在计算MA之前,ROC已经产生了一些NaN,TA-Lib的MA函数会处理这些NaN
|
||||
# 并产生更多的NaN,这是正常的。
|
||||
roc_ma_values = talib.SMA(roc_values, timeperiod=self.ma_window)
|
||||
|
||||
# 返回最终的 numpy 数组
|
||||
return roc_ma_values
|
||||
|
||||
def get_name(self) -> str:
|
||||
"""
|
||||
返回指标的唯一名称,用于标识和调试。
|
||||
"""
|
||||
return f"roc_ma_{self.roc_window}_{self.ma_window}"
|
||||
Reference in New Issue
Block a user