胜率35%
This commit is contained in:
parent
1dc550f347
commit
0079497a06
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user