1、研究多空不对称策略

This commit is contained in:
2025-09-20 00:04:51 +08:00
parent 9a58fec9ca
commit bc93a547f0
15 changed files with 14240 additions and 3432 deletions

View File

@@ -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已经产生了一些NaNTA-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}"