log
This commit is contained in:
parent
b39440dd48
commit
d354e3745a
@ -29,7 +29,7 @@ class OKXRegressionStrategy(IStrategy):
|
||||
|
||||
# 策略元数据(建议通过 config.json 配置)
|
||||
trailing_stop = True
|
||||
trailing_stop_positive = 0.01
|
||||
trailing_stop_positive = 0.07
|
||||
max_open_trades = 3
|
||||
stake_amount = 'dynamic'
|
||||
atr_period = CategoricalParameter([7, 14, 21], default=14, space='buy')
|
||||
@ -162,16 +162,6 @@ class OKXRegressionStrategy(IStrategy):
|
||||
|
||||
# 定义币对特定的ADX阈值和止损/ROI范围
|
||||
pair_thresholds = {
|
||||
"DOGE/USDT": {
|
||||
"adx_trend": 20, # 趋势市场ADX阈值
|
||||
"adx_oscillation": 15, # 震荡市场ADX阈值
|
||||
"stoploss_trend": -0.08, # 趋势市场止损:-8%
|
||||
"stoploss_oscillation": -0.04, # 震荡市场止损:-4%
|
||||
"stoploss_mid": -0.06, # 中间状态止损:-6%
|
||||
"roi_trend": 0.06, # 趋势市场ROI:6%
|
||||
"roi_oscillation": 0.025, # 震荡市场ROI:2.5%
|
||||
"roi_mid": 0.04 # 中间状态ROI:4%
|
||||
},
|
||||
"BTC/USDT": {
|
||||
"adx_trend": 25,
|
||||
"adx_oscillation": 20,
|
||||
@ -201,6 +191,26 @@ class OKXRegressionStrategy(IStrategy):
|
||||
"roi_trend": 0.045,
|
||||
"roi_oscillation": 0.02,
|
||||
"roi_mid": 0.03
|
||||
},
|
||||
"XRP/USDT": {
|
||||
"adx_trend": 22,
|
||||
"adx_oscillation": 18,
|
||||
"stoploss_trend": -0.06,
|
||||
"stoploss_oscillation": -0.03,
|
||||
"stoploss_mid": -0.045,
|
||||
"roi_trend": 0.045,
|
||||
"roi_oscillation": 0.02,
|
||||
"roi_mid": 0.03
|
||||
},
|
||||
"OKB/USDT": {
|
||||
"adx_trend": 36, # 放松趋势识别,更低的 ADX 阈值 (原值 x2)
|
||||
"adx_oscillation": 24, # 更低的震荡识别阈值 (原值 x2)
|
||||
"stoploss_trend": -0.20, # 更宽松的趋势止损 (原值 x2)
|
||||
"stoploss_oscillation": -0.12, # 更宽松的震荡止损 (原值 x2)
|
||||
"stoploss_mid": -0.16, # 中间状态止损也放宽 (原值 x2)
|
||||
"roi_trend": 0.14, # 提高趋势 ROI 目标 (原值 x2)
|
||||
"roi_oscillation": 0.08, # 提高震荡 ROI 目标 (原值 x2)
|
||||
"roi_mid": 0.10 # 中间状态 ROI 适度提高 (原值 x2)
|
||||
}
|
||||
}
|
||||
|
||||
@ -243,7 +253,8 @@ class OKXRegressionStrategy(IStrategy):
|
||||
|
||||
# 数据清洗
|
||||
dataframe = dataframe.replace([np.inf, -np.inf], np.nan)
|
||||
dataframe = dataframe.fillna(method="ffill").fillna(0)
|
||||
#dataframe = dataframe.fillna(method="ffill").fillna(0)
|
||||
dataframe = dataframe.ffill()
|
||||
|
||||
# 验证目标
|
||||
required_targets = ["&-s_close", "&-roi_0", "&-buy_rsi_pred", "&-stoploss_pred", "&-roi_0_pred"]
|
||||
@ -361,11 +372,20 @@ class OKXRegressionStrategy(IStrategy):
|
||||
dataframe['entry_price'] = dataframe['open'].where(dataframe['enter_long'] == 1).ffill()
|
||||
dataframe['stop_loss_line'] = dataframe['entry_price'] - dataframe[atr_col] * stop_loss_multiplier
|
||||
|
||||
# 应用止损逻辑
|
||||
dataframe.loc[
|
||||
(dataframe['close'] < dataframe['stop_loss_line']),
|
||||
'exit_long'
|
||||
] = 1
|
||||
# 应用止损逻辑(OKB/USDT 使用更平滑的退出)
|
||||
if metadata.get('pair') == 'OKB/USDT':
|
||||
# 对 OKB 添加缓冲区,避免频繁触发
|
||||
buffer_ratio = 0.005 # 0.5% 缓冲
|
||||
buffered_stop_loss = dataframe['stop_loss_line'] * (1 - buffer_ratio)
|
||||
dataframe.loc[
|
||||
(dataframe['close'] < buffered_stop_loss),
|
||||
'exit_long'
|
||||
] = 1
|
||||
else:
|
||||
dataframe.loc[
|
||||
(dataframe['close'] < dataframe['stop_loss_line']),
|
||||
'exit_long'
|
||||
] = 1
|
||||
|
||||
return dataframe
|
||||
|
||||
@ -443,7 +463,7 @@ class OKXRegressionStrategy(IStrategy):
|
||||
dataframe['ATR_14'] = 0.0
|
||||
|
||||
# 应用动态止损和止盈逻辑
|
||||
dataframe = self._dynamic_stop_loss(dataframe, metadata)
|
||||
# dataframe = self._dynamic_stop_loss(dataframe, metadata)
|
||||
dataframe = self._dynamic_take_profit(dataframe, metadata)
|
||||
|
||||
return dataframe
|
||||
@ -476,13 +496,13 @@ class OKXRegressionStrategy(IStrategy):
|
||||
avg_atr_window = 20
|
||||
dataframe['avg_atr'] = dataframe['ATR_14'].rolling(window=avg_atr_window).mean()
|
||||
|
||||
# 获取最新数据
|
||||
latest_row = dataframe.iloc[-1].copy()
|
||||
|
||||
# 计算当前ATR在历史窗口中的百分位
|
||||
historical_atr = dataframe['avg_atr'].dropna().values
|
||||
if len(historical_atr) < avg_atr_window:
|
||||
return None
|
||||
# 根据交易对调整基础ATR值
|
||||
pair_specific_atr = {
|
||||
"BTC/USDT": latest_row['ATR_14'],
|
||||
"ETH/USDT": latest_row['ATR_14'],
|
||||
"OKB/USDT": latest_row['ATR_14'], # 使用更长周期 ATR 减少波动影响
|
||||
"TON/USDT": latest_row['ATR_7']
|
||||
}
|
||||
|
||||
current_atr = latest_row['avg_atr']
|
||||
percentile = (np.sum(historical_atr < current_atr) / len(historical_atr)) * 100
|
||||
@ -495,11 +515,11 @@ class OKXRegressionStrategy(IStrategy):
|
||||
else: # 正常波动市场
|
||||
atr_multiplier = 2.0
|
||||
|
||||
# 根据交易对调整基础ATR值
|
||||
# 根据交易对调整基础ATR值
|
||||
pair_specific_atr = {
|
||||
"BTC/USDT": latest_row['ATR_14'],
|
||||
"ETH/USDT": latest_row['ATR_14'],
|
||||
"OKB/USDT": latest_row['ATR_7'],
|
||||
"OKB/USDT": latest_row['ATR_14'], # 使用更长周期 ATR 减少波动影响
|
||||
"TON/USDT": latest_row['ATR_7']
|
||||
}
|
||||
|
||||
@ -597,9 +617,9 @@ class OKXRegressionStrategy(IStrategy):
|
||||
# 设置不同币种的回调乘数
|
||||
callback_multipliers = {
|
||||
"BTC/USDT": 1.5,
|
||||
"ETH/USDT": 1.8,
|
||||
"OKB/USDT": 2.0,
|
||||
"TON/USDT": 2.2,
|
||||
"ETH/USDT": 2.0,
|
||||
"OKB/USDT": 1.3,
|
||||
"TON/USDT": 2.0,
|
||||
}
|
||||
callback_multiplier = callback_multipliers.get(pair, 2.0)
|
||||
|
||||
@ -610,8 +630,21 @@ class OKXRegressionStrategy(IStrategy):
|
||||
# 计算动态回调百分比(基于ATR)
|
||||
dataframe['callback_threshold'] = dataframe[atr_col] * callback_multiplier
|
||||
|
||||
# 计算滚动最高价
|
||||
dataframe['rolling_high'] = dataframe['close'].rolling(window=rolling_high_period).max()
|
||||
# 计算ATR
|
||||
if 'ATR_14' not in dataframe.columns:
|
||||
dataframe['ATR_14'] = ta.ATR(dataframe['high'], dataframe['low'], dataframe['close'], timeperiod=14)
|
||||
|
||||
# 计算最近高点
|
||||
dataframe['rolling_high'] = dataframe['close'].rolling(window=20).max()
|
||||
|
||||
# 计算回调阈值
|
||||
dataframe['take_profit_line'] = dataframe['entry_price'] + dataframe['ATR_14'] * callback_multiplier
|
||||
|
||||
# 应用止盈逻辑
|
||||
dataframe.loc[
|
||||
(dataframe['close'] > dataframe['take_profit_line']),
|
||||
'exit_long'
|
||||
] = 1
|
||||
|
||||
# 计算当前价格相对于最近高点的回撤比例(使用ATR标准化)
|
||||
dataframe['callback_ratio'] = (dataframe['close'] - dataframe['rolling_high']) / dataframe['rolling_high']
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user