胜率35%

This commit is contained in:
zhangkun9038@dingtalk.com 2025-05-04 18:44:32 +08:00
parent 1dc550f347
commit 0079497a06

View File

@ -318,28 +318,80 @@ class OKXRegressionStrategy(IStrategy):
:param multiplier: ATR乘数
:return: 更新后的DataFrame
"""
# 获取交易对信息
pair = metadata.get('pair', 'unknown')
# 设置默认的止损倍数
stop_loss_multiplier = 2.0
# 根据交易对调整止损倍数示例BTC/USDT 更稳定,止损倍数较低)
if pair == "BTC/USDT":
stop_loss_multiplier = 1.5
elif pair == "DOGE/USDT":
stop_loss_multiplier = 2.5
elif pair == "SOL/USDT":
stop_loss_multiplier = 2.0
elif pair == "XRP/USDT":
stop_loss_multiplier = 2.0
# 计算止损线
dataframe['entry_price'] = dataframe['open'].where(dataframe['enter_long'] == 1).ffill()
dataframe['stop_loss_line'] = dataframe['entry_price'] - dataframe[atr_col] * multiplier
dataframe['stop_loss_line'] = dataframe['entry_price'] - dataframe[atr_col] * stop_loss_multiplier
# 应用止损逻辑
dataframe.loc[
(dataframe['close'] < dataframe['stop_loss_line']),
'exit_long'
] = 1
return dataframe
def _dynamic_take_profit(self, dataframe: DataFrame, metadata: dict, atr_col: str = 'ATR_14', multiplier: float = 2.0) -> DataFrame:
"""
封装动态止盈逻辑基于入场价和ATR计算止盈线
:param dataframe: 原始DataFrame
:param metadata: 策略元数据
:param atr_col: 使用的ATR列名
:param multiplier: ATR乘数
:return: 更新后的DataFrame
"""
# 获取交易对信息
pair = metadata.get('pair', 'unknown')
# 设置默认的止盈倍数
take_profit_multiplier = 2.0
# 根据交易对调整止盈倍数示例BTC/USDT 更稳定,止盈倍数较高)
if pair == "BTC/USDT":
take_profit_multiplier = 3.0
elif pair == "DOGE/USDT":
take_profit_multiplier = 1.5
elif pair == "SOL/USDT":
take_profit_multiplier = 2.0
elif pair == "XRP/USDT":
take_profit_multiplier = 2.0
# 计算止盈线
dataframe['entry_price'] = dataframe['open'].where(dataframe['enter_long'] == 1).ffill()
dataframe['take_profit_line'] = dataframe['entry_price'] + dataframe[atr_col] * take_profit_multiplier
# 应用止盈逻辑
dataframe.loc[
(dataframe['close'] > dataframe['take_profit_line']),
'exit_long'
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: Dict) -> DataFrame:
# 确保 ATR 列存在
if 'ATR_14' not in dataframe.columns:
dataframe['ATR_14'] = 0.0
# 计算动态止损线
dataframe['stop_loss_line'] = dataframe['entry_price'] - (dataframe['ATR_14'] * 2)
# 应用动态止损和止盈逻辑
dataframe = self._dynamic_stop_loss(dataframe, metadata)
dataframe = self._dynamic_take_profit(dataframe, metadata)
# 发送止损信息
self.dp.send_msg(f"ATR: {dataframe['ATR_14'].iloc[-1]:.5f}, Stop Loss Line: {dataframe['stop_loss_line'].iloc[-1]:.5f}")
# 应用动态止损逻辑
return self._dynamic_stop_loss(dataframe, metadata)
return dataframe
def custom_stake_amount(self, pair: str, current_time: 'datetime', current_rate: float,
proposed_stake: float, min_stake: float, max_stake: float,