stable1 7
This commit is contained in:
parent
d6fe9f8573
commit
42781656b4
@ -75,30 +75,29 @@ class FreqaiExampleStrategy(IStrategy):
|
||||
# 保留关键的技术指标
|
||||
dataframe["rsi"] = ta.RSI(dataframe, timeperiod=14)
|
||||
|
||||
# 确保 MACD 列被正确计算并保留
|
||||
def calculate_macd(self, dataframe: DataFrame) -> DataFrame:
|
||||
"""
|
||||
Centralized method to calculate MACD and ensure proper assignment to the dataframe.
|
||||
"""
|
||||
try:
|
||||
macd = ta.MACD(dataframe, fastperiod=12, slowperiod=26, signalperiod=9)
|
||||
dataframe["macd"] = macd["macd"]
|
||||
dataframe["macdsignal"] = macd["macdsignal"]
|
||||
|
||||
# Ensure no NaN or infinite values in MACD columns
|
||||
dataframe["macd"] = dataframe["macd"].replace([np.inf, -np.inf], np.nan).ffill().fillna(0)
|
||||
dataframe["macdsignal"] = dataframe["macdsignal"].replace([np.inf, -np.inf], np.nan).ffill().fillna(0)
|
||||
|
||||
logger.info("MACD 列已成功计算并验证。")
|
||||
except Exception as e:
|
||||
logger.error(f"计算 MACD 列时出错:{str(e)}")
|
||||
dataframe["macd"] = np.nan
|
||||
dataframe["macdsignal"] = np.nan
|
||||
|
||||
# 检查并填充 NaN 值
|
||||
if "macd" in dataframe.columns and "macdsignal" in dataframe.columns:
|
||||
dataframe["macd"] = dataframe["macd"].fillna(method='ffill').fillna(0)
|
||||
dataframe["macdsignal"] = dataframe["macdsignal"].fillna(method='ffill').fillna(0)
|
||||
else:
|
||||
logger.error("MACD 或 MACD 信号列缺失,无法生成买入信号。尝试重新计算 MACD 列。")
|
||||
try:
|
||||
macd = ta.MACD(dataframe, fastperiod=12, slowperiod=26, signalperiod=9)
|
||||
dataframe["macd"] = macd["macd"].fillna(method='ffill').fillna(0)
|
||||
dataframe["macdsignal"] = macd["macdsignal"].fillna(method='ffill').fillna(0)
|
||||
logger.info("MACD 列已成功重新计算。")
|
||||
except Exception as e:
|
||||
logger.error(f"重新计算 MACD 列时出错:{str(e)}")
|
||||
raise ValueError("DataFrame 缺少必要的 MACD 列且无法重新计算。")
|
||||
return dataframe
|
||||
|
||||
# 使用 centralized 方法计算 MACD
|
||||
dataframe = self.calculate_macd(dataframe)
|
||||
|
||||
# 检查 MACD 列是否存在
|
||||
if "macd" not in dataframe.columns or "macdsignal" not in dataframe.columns:
|
||||
@ -325,18 +324,13 @@ class FreqaiExampleStrategy(IStrategy):
|
||||
return dataframe
|
||||
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
# 改进买入信号条件
|
||||
# 检查 MACD 列是否存在
|
||||
# 使用 centralized 方法计算 MACD
|
||||
dataframe = self.calculate_macd(dataframe)
|
||||
|
||||
# 再次检查 MACD 列是否存在
|
||||
if "macd" not in dataframe.columns or "macdsignal" not in dataframe.columns:
|
||||
logger.error("MACD 或 MACD 信号列缺失,无法生成买入信号。尝试重新计算 MACD 列。")
|
||||
|
||||
try:
|
||||
macd = ta.MACD(dataframe, fastperiod=12, slowperiod=26, signalperiod=9)
|
||||
dataframe["macd"] = macd["macd"]
|
||||
dataframe["macdsignal"] = macd["macdsignal"]
|
||||
logger.info("MACD 列已成功重新计算。")
|
||||
except Exception as e:
|
||||
logger.error(f"重新计算 MACD 列时出错:{str(e)}")
|
||||
raise ValueError("dataframe 缺少必要的 MACD 列且无法重新计算。")
|
||||
logger.error("MACD 或 MACD 信号列仍然缺失,无法生成买入信号。")
|
||||
raise ValueError("dataframe 缺少必要的 MACD 列且无法重新计算。")
|
||||
|
||||
enter_long_conditions = [
|
||||
(dataframe["rsi"] < dataframe["buy_rsi_pred"]), # RSI 低于买入阈值
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user