有交易了,但是多
This commit is contained in:
parent
489c91f887
commit
f65dda12b4
@ -26,8 +26,8 @@ class FreqaiPrimer(IStrategy):
|
||||
bb_length = 20
|
||||
bb_std = 2.0
|
||||
rsi_length = 14
|
||||
rsi_overbought = 70
|
||||
rsi_oversold = 40 # 放宽超卖阈值到 40
|
||||
rsi_overbought = 65 # 收紧超买阈值到 65
|
||||
rsi_oversold = 30 # 收紧超卖阈值到 30
|
||||
|
||||
def informative_pairs(self):
|
||||
pairs = self.dp.current_whitelist()
|
||||
@ -43,7 +43,7 @@ class FreqaiPrimer(IStrategy):
|
||||
# 成交量过滤
|
||||
dataframe['volume_ma'] = dataframe['volume'].rolling(20).mean()
|
||||
|
||||
# 计算 ATR 用于动态止损
|
||||
# 计算 ATR 用于动态止损和退出
|
||||
dataframe['atr'] = ta.atr(dataframe['high'], dataframe['low'], dataframe['close'], length=14)
|
||||
|
||||
# 获取 15m 数据
|
||||
@ -87,26 +87,26 @@ class FreqaiPrimer(IStrategy):
|
||||
return dataframe
|
||||
|
||||
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
# 做多条件(进一步放宽)
|
||||
# 做多条件(收紧条件以减少交易量)
|
||||
conditions = [
|
||||
(dataframe['close'] <= dataframe['bb_lower_3m'] * 1.05), # 价格接近 3m 布林带下轨(允许 5% 偏差)
|
||||
(dataframe['rsi_3m'] < self.rsi_oversold), # 3m RSI 超卖 (< 40)
|
||||
(dataframe['rsi_15m'] < self.rsi_oversold), # 15m RSI 超卖 (< 40)
|
||||
(dataframe['volume'] > dataframe['volume_ma']) # 成交量高于均量
|
||||
(dataframe['close'] <= dataframe['bb_lower_3m']), # 严格要求价格低于 3m 布林带下轨
|
||||
(dataframe['rsi_3m'] < self.rsi_oversold), # 3m RSI < 30
|
||||
(dataframe['rsi_15m'] < self.rsi_oversold), # 15m RSI < 30
|
||||
(dataframe['close'] <= dataframe['bb_lower_15m']), # 价格低于 15m 布林带下轨
|
||||
(dataframe['bullish_engulfing']), # 强制要求看涨吞没
|
||||
(dataframe['volume'] > dataframe['volume_ma'] * 1.2) # 成交量高于均量的 1.2 倍
|
||||
]
|
||||
# 看涨吞没或极低 RSI(可选)
|
||||
conditions.append(dataframe['bullish_engulfing'] | (dataframe['rsi_3m'] < self.rsi_oversold - 10)) # RSI < 30 替代看涨吞没
|
||||
|
||||
# 应用条件
|
||||
dataframe.loc[conditions[0] & conditions[1] & conditions[2] & conditions[3] & conditions[4], 'enter_long'] = 1
|
||||
dataframe.loc[conditions[0] & conditions[1] & conditions[2] & conditions[3] & conditions[4] & conditions[5], 'enter_long'] = 1
|
||||
|
||||
# 调试:检查每个条件的触发情况
|
||||
print(f"Pair: {metadata['pair']}, Entry condition checks:")
|
||||
print(f" - Close <= bb_lower_3m * 1.05: {(dataframe['close'] <= dataframe['bb_lower_3m'] * 1.05).sum()} candles")
|
||||
print(f" - Close <= bb_lower_3m: {(dataframe['close'] <= dataframe['bb_lower_3m']).sum()} candles")
|
||||
print(f" - RSI_3m < {self.rsi_oversold}: {(dataframe['rsi_3m'] < self.rsi_oversold).sum()} candles")
|
||||
print(f" - RSI_15m < {self.rsi_oversold}: {(dataframe['rsi_15m'] < self.rsi_oversold).sum()} candles")
|
||||
print(f" - Volume > Volume_MA: {(dataframe['volume'] > dataframe['volume_ma']).sum()} candles")
|
||||
print(f" - Bullish Engulfing or RSI_3m < {self.rsi_oversold - 10}: {(dataframe['bullish_engulfing'] | (dataframe['rsi_3m'] < self.rsi_oversold - 10)).sum()} candles")
|
||||
print(f" - Close <= bb_lower_15m: {(dataframe['close'] <= dataframe['bb_lower_15m']).sum()} candles")
|
||||
print(f" - Bullish Engulfing: {(dataframe['bullish_engulfing']).sum()} candles")
|
||||
print(f" - Volume > Volume_MA * 1.2: {(dataframe['volume'] > dataframe['volume_ma'] * 1.2).sum()} candles")
|
||||
if dataframe['enter_long'].sum() > 0:
|
||||
print(f"Entry signals found at:")
|
||||
print(dataframe[dataframe['enter_long'] == 1][['date', 'close', 'rsi_3m', 'rsi_15m', 'bullish_engulfing']])
|
||||
@ -116,11 +116,12 @@ class FreqaiPrimer(IStrategy):
|
||||
return dataframe
|
||||
|
||||
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
# 做多退出
|
||||
# 做多退出(添加 ATR 动态退出)
|
||||
dataframe.loc[
|
||||
(
|
||||
(dataframe['close'] >= dataframe['bb_upper_3m']) |
|
||||
(dataframe['rsi_3m'] > self.rsi_overbought)
|
||||
(dataframe['rsi_3m'] > self.rsi_overbought) |
|
||||
(dataframe['close'] > dataframe['open'] + dataframe['atr'] * 2) # 获利 2 倍 ATR
|
||||
),
|
||||
'exit_long'] = 1
|
||||
return dataframe
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user