custom roi
This commit is contained in:
parent
252da1194a
commit
84b625013d
@ -8,17 +8,16 @@ import pandas_ta as ta
|
||||
from freqtrade.persistence import Trade
|
||||
import numpy as np
|
||||
import datetime
|
||||
import math
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class FreqaiPrimer(IStrategy):
|
||||
# 策略参数 - 调整以提高单笔盈利潜力
|
||||
minimal_roi = {
|
||||
"0": 0.05, # 5% ROI (10 分钟内)
|
||||
"60": 0.03, # 3% ROI (1 小时)
|
||||
"180": 0.01, # 1% ROI (3 小时)
|
||||
"360": 0.005 # 0.5% ROI (6 小时)
|
||||
}
|
||||
# 策略参数 - 使用custom_roi替代minimal_roi字典
|
||||
minimal_roi = {}
|
||||
|
||||
# 启用自定义ROI回调函数
|
||||
use_custom_roi = True
|
||||
|
||||
stoploss = -0.15 # 固定止损 -15% (大幅放宽止损以承受更大波动)
|
||||
trailing_stop = True
|
||||
@ -104,6 +103,11 @@ class FreqaiPrimer(IStrategy):
|
||||
h1_max_candles = IntParameter(100, 300, default=200, optimize=True, load=True, space='buy')
|
||||
h1_rapid_rise_threshold = DecimalParameter(0.05, 0.15, decimals=3, default=0.11, optimize=True, load=True, space='buy')
|
||||
h1_max_consecutive_candles = IntParameter(1, 4, default=2, optimize=True, load=True, space='buy')
|
||||
|
||||
# 动态ROI参数 - 指数衰减函数参数 (ROI(t) = a·e^(-k·t) + c)
|
||||
roi_param_a = DecimalParameter(0.01, 0.1, decimals=3, default=0.05, optimize=True, load=True, space='roi') # 初始ROI水平
|
||||
roi_param_k = DecimalParameter(0.001, 0.01, decimals=4, default=0.003, optimize=True, load=True, space='roi') # 衰减速率
|
||||
roi_param_c = DecimalParameter(0, 0.01, decimals=4, default=0.005, optimize=True, load=True, space='roi') # 最低ROI水平
|
||||
|
||||
def informative_pairs(self):
|
||||
pairs = self.dp.current_whitelist()
|
||||
@ -604,6 +608,43 @@ class FreqaiPrimer(IStrategy):
|
||||
# 返回应退出的比例(0.0表示不退出,1.0表示全部退出)
|
||||
return exit_ratio
|
||||
|
||||
def custom_roi(self, pair: str, trade: 'Trade', current_time, **kwargs) -> float:
|
||||
"""
|
||||
自定义动态ROI函数,使用指数衰减公式:ROI(t) = a·e^(-k·t) + c
|
||||
- t: 交易已持仓时间(分钟)
|
||||
- a: 初始ROI水平参数
|
||||
- k: 衰减速率参数
|
||||
- c: 最低ROI水平参数
|
||||
|
||||
该实现支持快进快出和趋势奔跑策略,并仅用于多头交易。
|
||||
"""
|
||||
# 只支持多头
|
||||
if trade.is_short:
|
||||
return 0.0
|
||||
|
||||
# 计算交易已持仓时间(分钟)
|
||||
trade_age_minutes = (current_time - trade.open_date_utc).total_seconds() / 60
|
||||
|
||||
# 防止负数时间
|
||||
if trade_age_minutes < 0:
|
||||
trade_age_minutes = 0
|
||||
|
||||
# 获取Hyperopt优化的参数值
|
||||
a = self.roi_param_a.value
|
||||
k = self.roi_param_k.value
|
||||
c = self.roi_param_c.value
|
||||
|
||||
# 应用指数衰减公式计算ROI阈值
|
||||
roi_threshold = a * math.exp(-k * trade_age_minutes) + c
|
||||
|
||||
# 确保ROI阈值为正数
|
||||
roi_threshold = max(roi_threshold, 0.0)
|
||||
|
||||
# 记录ROI计算日志
|
||||
logger.info(f"[{pair}] 动态ROI计算: 持仓时间={trade_age_minutes:.1f}分钟, a={a:.3f}, k={k:.4f}, c={c:.4f}, ROI阈值={roi_threshold:.4f}")
|
||||
|
||||
return roi_threshold
|
||||
|
||||
def adjust_trade_position(self, trade: 'Trade', current_time, current_rate: float,
|
||||
current_profit: float, min_stake: float, max_stake: float, **kwargs) -> float:
|
||||
"""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user