theforce-noai-test 里实现动态roi

This commit is contained in:
zhangkun9038@dingtalk.com 2025-05-28 15:41:47 +00:00
parent 1b2c7b3d92
commit 2718e7a024

View File

@ -1,8 +1,11 @@
import logging
import numpy as np
import datetime
from functools import reduce
from freqtrade.persistence import Trade
import talib.abstract as ta
from pandas import DataFrame
from typing import Dict
from technical import qtpylib
from freqtrade.strategy import IStrategy
@ -134,7 +137,11 @@ class FreqaiPrimer(IStrategy):
# FreqAI 提供的预测列
if "&-trend" in dataframe.columns:
dataframe["in_uptrend"] = dataframe["&-trend"] > 0.5
# 将 roi_target 存入 dataframe供后续使用
if "&-roi_target" in dataframe.columns:
dataframe["&-roi_target"] = dataframe["&-roi_target"].ffill().fillna(0.01)
else:
dataframe["&-roi_target"] = 0.01
return dataframe
def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
@ -176,3 +183,43 @@ class FreqaiPrimer(IStrategy):
df.loc[reduce(lambda x, y: x & y, conditions), 'exit_long'] = 1
return df
def adjust_trade_position(self, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float,
min_roi: Dict[float, float], max_profit: float):
"""
动态调整当前交易的止盈目标
"""
# 获取当前币种的 dataframe
pair = trade.pair
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
last_candle = dataframe.iloc[-1]
# 获取预测的 ROI 目标
roi_target = last_candle.get("&-roi_target", 0.01)
# 根据预测值生成新的 ROI 表
if roi_target > 0.05:
new_minimal_roi = {
"0": roi_target * 1.0,
"10": roi_target * 0.8,
"30": roi_target * 0.5,
"60": roi_target * 0.2,
"120": 0.01
}
elif 0.02 <= roi_target <= 0.05:
new_minimal_roi = {
"0": roi_target * 1.0,
"20": roi_target * 0.7,
"60": roi_target * 0.3,
"120": 0.01
}
else:
new_minimal_roi = {
"0": max(0.01, roi_target),
"60": 0.01,
"180": 0.01
}
# 返回新的 minimal_roi
return new_minimal_roi