Test nouvelle stratégie max 24h

This commit is contained in:
Jérôme Delacotte
2026-02-14 15:25:56 +01:00
parent 978f062991
commit fb7a841bd2

View File

@@ -124,21 +124,18 @@ class Zeus_8_3_2_B_4_2(IStrategy):
]
levels = [1, 2, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# startup_candle_count = 12 * 24 * 5
startup_candle_count = 12 * 24 * 5
# ROI table:
minimal_roi = {
"0": 0.564,
"567": 0.273,
"2814": 0.12,
"7675": 0
"1440": 0
}
stakes = 40
# Stoploss:
stoploss = -1 # 0.256
# Custom stoploss
use_custom_stoploss = False
use_custom_stoploss = True
trailing_stop = True
trailing_stop_positive = 0.15
@@ -257,6 +254,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
columns_logged = False
pairs = {
pair: {
'first_amount': 0,
"first_buy": 0,
"last_buy": 0.0,
"last_min": 999999999999999.5,
@@ -329,52 +327,11 @@ class Zeus_8_3_2_B_4_2(IStrategy):
pct = DecimalParameter(0.005, 0.05, default=0.012, decimals=3, space='buy', optimize=True, load=True)
pct_inc = DecimalParameter(0.0001, 0.003, default=0.0022, decimals=4, space='buy', optimize=True, load=True)
indic_5m_slope_sup_buy = CategoricalParameter(indicators, default="sma60", space='buy')
# indic_deriv_5m_slop_sup_buy = CategoricalParameter(indicators, default="sma12", space='buy', optimize=True, load=True)
# deriv_5m_slope_sup_buy = DecimalParameter(-0.1, 0.5, default=0, decimals=2, space='buy', optimize=True, load=True)
indic_5m_slope_inf_buy = CategoricalParameter(indicators, default="sma60", space='buy')
# indic_deriv_5m_slop_inf_buy = CategoricalParameter(indicators, default="sma12", space='buy', optimize=True, load=True)
# deriv_5m_slope_inf_buy = DecimalParameter(-0.1, 0.5, default=0, decimals=2, space='buy', optimize=True, load=True)
# indic_deriv1_5m = DecimalParameter(-2, 2, default=0, decimals=2, space='buy', optimize=True, load=True)
# indic_deriv2_5m = DecimalParameter(-2, 2, default=0, decimals=2, space='buy', optimize=True, load=True)
# indic_1h = CategoricalParameter(indicators, default="sma60", space='buy')
# indic_deriv1_1h = DecimalParameter(-5, 5, default=0, decimals=1, space='buy', optimize=True, load=True)
# indic_deriv2_1h = DecimalParameter(-10, 10, default=0, decimals=1, space='buy', optimize=True, load=True)
# indic_1d_p = CategoricalParameter(indicators, default="sma60", space='protection')
# indic_deriv1_1d_p_stop = DecimalParameter(-2, 2, default=0, decimals=1, space='protection', optimize=True, load=True)
# indic_deriv2_1d_p_stop = DecimalParameter(-4, 4, default=0, decimals=1, space='protection', optimize=True, load=True)
# indic_deriv1_1d_p_start = DecimalParameter(-2, 2, default=0, decimals=1, space='protection', optimize=True, load=True)
# indic_deriv2_1d_p_start = DecimalParameter(-4, 4, default=0, decimals=1, space='protection', optimize=True, load=True)
indic_5m_slope_sup_sell = CategoricalParameter(indicators, default="sma60", space='sell')
indic_deriv_5m_slope_sup_sell = CategoricalParameter(indicators, default="sma60", space='sell')
deriv_5m_slope_sup_sell = DecimalParameter(-0.1, 0.5, default=0, decimals=2, space='sell', optimize=True, load=True)
indic_5m_slope_inf_sell = CategoricalParameter(indicators, default="sma60", space='sell')
indic_deriv_5m_slope_inf_sell = CategoricalParameter(indicators, default="sma60", space='sell')
deriv_5m_slope_inf_sell = DecimalParameter(-0.1, 0.5, default=0, decimals=2, space='sell', optimize=True, load=True)
deriv1_buy_protect = DecimalParameter(-0.3, 0.1, default=-0.1, decimals=2, space='protection', optimize=True, load=True)
rsi_buy_protect = IntParameter(50, 90, default=70, space='protection', optimize=True, load=True)
indic_5m_slope_sup = CategoricalParameter(indicators, default="sma60", space='protection')
indic_1h_slope_sup = CategoricalParameter(indicators, default="sma5", space='protection')
# indic_percent_sell = CategoricalParameter(indicators_percent, default="sma60", space='sell')
# percent_5m_sell = DecimalParameter(-0.1, -0.0, default=0, decimals=2, space='sell', optimize=True, load=True)
# indic_deriv1_5m_sell = DecimalParameter(-2, 2, default=0, decimals=2, space='sell', optimize=True, load=True)
# indic_deriv2_5m_sell = DecimalParameter(-2, 2, default=0, decimals=2, space='sell', optimize=True, load=True)
# indic_deriv1_1h_sell = DecimalParameter(-5, 5, default=0, decimals=1, space='sell', optimize=True, load=True)
# indic_deriv2_1h_sell = DecimalParameter(-10, 10, default=0, decimals=1, space='sell', optimize=True, load=True)
labels = ['B3', 'B2', 'B1', 'N0', 'H1', 'H2', 'H3']
index_labels = ['B3', 'B2', 'B1', 'N0', 'H1', 'H2', 'H3']
ordered_labels = ['B3', 'B2', 'B1', 'N0', 'H1', 'H2', 'H3']
@@ -456,6 +413,18 @@ class Zeus_8_3_2_B_4_2(IStrategy):
if not self.should_enter_trade(pair, last_candle, current_time):
allow_to_buy = False
# On récupère le dernier trade ouvert (toutes paires)
last_date = self.pairs[pair]['last_date']
if not last_date:
last_date = dataframe.iloc[-1]["date"]
self.pairs[pair]['last_date'] = last_date
now = dataframe.iloc[-1]["date"]
if now - last_date >= timedelta(hours=24):
allow_to_buy = True
if allow_to_buy:
self.trades = list()
self.pairs[pair]['first_buy'] = rate
@@ -466,7 +435,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.pairs[pair]['current_profit'] = 0
self.pairs[pair]['last_max'] = max(last_candle['close'], self.pairs[pair]['last_max'])
self.pairs[pair]['last_min'] = min(last_candle['close'], self.pairs[pair]['last_min'])
self.pairs[pair]['last_date'] = current_time
dispo = round(self.wallets.get_available_stake_amount())
self.printLineLog()
@@ -499,7 +468,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
profit =trade.calc_profit(rate)
force = self.pairs[pair]['force_sell']
allow_to_sell = (last_candle['hapercent'] < 0 and profit > 0) or force or (exit_reason == 'force_exit') or (exit_reason == 'stop_loss')
allow_to_sell = (last_candle['hapercent'] < 0 and profit > 0) or force or (exit_reason == 'sma48') or (exit_reason == 'force_exit') or (exit_reason == 'stop_loss')
minutes = int(round((current_time - trade.date_last_filled_utc).total_seconds() / 60, 0))
@@ -534,7 +503,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.pairs[pair]['current_trade'] = None
# else:
# print(f"STOP triggered for {pair} ({exit_reason}) but condition blocked", "warning")
return (allow_to_sell) | (exit_reason == 'force_exit') | (exit_reason == 'stop_loss')
return (allow_to_sell) | (exit_reason == 'force_exit') | (exit_reason == 'stop_loss') | force
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake: float, max_stake: float,
@@ -580,21 +549,15 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.pairs[pair]['current_profit'] = profit
dispo = round(self.wallets.get_available_stake_amount())
hours_since_first_buy = (current_time - trade.open_date_utc).seconds / 3600.0
hours_since_first_buy = round((current_time - trade.open_date_utc).seconds / 3600.0, 1)
days_since_first_buy = (current_time - trade.open_date_utc).days
hours = (current_time - trade.date_last_filled_utc).total_seconds() / 3600.0
# trend = last_candle['trend_class']
#
# indic_5m_sell = self.getParamValue( pair, trend, 'sell', 'indic_5m_sell')
# indic_deriv1_5m_sell = self.getParamValue( pair, trend, 'sell', 'indic_deriv1_5m_sell')
# indic_deriv2_5m_sell = self.getParamValue( pair, trend, 'sell', 'indic_deriv2_5m_sell')
if hours % 4 == 0:
self.log_trade(
last_candle=last_candle,
date=current_time,
action="🔴 CURRENT" if self.pairs[pair]['stop'] else "🟢 CURRENT",
action="🔴 CURRENT" if self.pairs[pair]['stop'] else "🟢 CURRENT " + str(hours_since_first_buy),
dispo=dispo,
pair=pair,
rate=last_candle['close'],
@@ -612,32 +575,16 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# if (last_candle['sma24_deriv1'] < 0 and before_last_candle['sma24_deriv1'] >= 0) and (current_profit > expected_profit):
# return 'Drv_' + str(count_of_buys)
pair_name = self.getShortName(pair)
# if (current_profit > expected_profit) and last_candle['can_sell']:
# return 'Can_' + pair_name + '_' + str(count_of_buys)
# trend = last_candle['trend_class_1d']
# if (trend == "B-" or trend == "B--") and self.pairs[pair]['has_gain'] == 0: # and (last_candle[f"{indic_5m_sell}_deriv1"] <= indic_deriv1_5m_sell and last_candle[f"{indic_5m_sell}_deriv2"] <= indic_deriv2_5m_sell):
#
# if (last_candle['max_rsi_12_1h'] > 75) and last_candle['trend_class_1h'] == 1 and profit > max(5, expected_profit) and (last_candle['hapercent'] < 0):
# self.pairs[pair]['stop'] = True
# self.log_trade(
# last_candle=last_candle,
# date=current_time,
# action="🔴STOP",
# dispo=dispo,
# pair=pair,
# rate=last_candle['close'],
# trade_type='',
# profit=self.pairs[pair]['current_profit'],
# buys=self.pairs[pair]['count_of_buys'],
# stake=0
# )
# return "MAX_RSI"
#
# return None
# if (trend == "B-" or trend == "B--") and last_candle[f"{self.indic_5m_sell.value}_deriv1"] <= self.indic_deriv1_5m_sell.value \
# and last_candle[f"{self.indic_5m_sell.value}_deriv2"] <= self.indic_deriv2_5m_sell.value:
# return None
if current_profit < - 0.02 and last_candle['sma48'] < before_last_candle['sma48'] - 10:
self.pairs[pair]['force_sell'] = True
self.pairs[pair]['force_buy'] = False #(self.pairs[pair]['count_of_buys'] - self.pairs[pair]['has_gain'] > 3)
return str(count_of_buys) + '_' + 'stop48_' + pair_name + '_' + str(self.pairs[pair]['has_gain'])
if hours_since_first_buy >= 23.9 :
self.pairs[pair]['force_sell'] = True
self.pairs[pair]['force_buy'] = False #(self.pairs[pair]['count_of_buys'] - self.pairs[pair]['has_gain'] > 3)
return str(count_of_buys) + '_' + 'hours_' + pair_name + '_' + str(self.pairs[pair]['has_gain'])
if last_candle['max_rsi_24'] > 85 and profit > max(5, expected_profit) and (last_candle['hapercent'] < 0) and last_candle['sma60_deriv1'] < 0.05:
self.pairs[pair]['force_sell'] = False
@@ -650,12 +597,12 @@ class Zeus_8_3_2_B_4_2(IStrategy):
return str(count_of_buys) + '_' + 'Frc_' + pair_name + '_' + str(self.pairs[pair]['has_gain'])
if profit > max(5, expected_profit) and baisse > 0.30:
self.pairs[pair]['force_sell'] = False
self.pairs[pair]['force_sell'] = True
self.pairs[pair]['force_buy'] = (self.pairs[pair]['count_of_buys'] - self.pairs[pair]['has_gain'] > 3)
return str(count_of_buys) + '_' + 'B30_' + pair_name + '_' + str(self.pairs[pair]['has_gain'])
if max_profit > 0.5 * count_of_buys and baisse > 0.15 and last_candle['sma12_state'] <= 0 and last_candle['sma60_state'] <= - 1:
self.pairs[pair]['force_sell'] = False
self.pairs[pair]['force_sell'] = True
self.pairs[pair]['force_buy'] = (self.pairs[pair]['count_of_buys'] - self.pairs[pair]['has_gain'] > 3)
return str(count_of_buys) + '_' + 'B15_' + pair_name + '_' + str(self.pairs[pair]['has_gain'])
@@ -831,16 +778,6 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# 🟡 Dérivée 1 > 0 et dérivée 2 < 0: tendance haussière qui ralentit → essoufflement potentiel.
# 🔴 Dérivée 1 < 0 et dérivée 2 < 0: tendance baissière qui saccélère.
# 🟠 Dérivée 1 < 0 et dérivée 2 > 0: tendance baissière qui ralentit → possible bottom.
# trend = last_candle['trend_class_1d']
#
# indic_5m = self.getParamValue(pair, trend, 'buy', 'indic_5m')
# indic_deriv1_5m = self.getParamValue(pair, trend, 'buy', 'indic_deriv1_5m')
# indic_deriv2_5m = self.getParamValue(pair, trend, 'buy', 'indic_deriv2_5m')
#
# indic_5m_sell = self.getParamValue(pair, trend, 'sell', 'indic_5m_sell')
# indic_deriv1_5m_sell = self.getParamValue(pair, trend, 'sell', 'indic_deriv1_5m_sell')
# indic_deriv2_5m_sell = self.getParamValue(pair, trend, 'sell', 'indic_deriv2_5m_sell')
self.printLog(
f"| {date:<16} |{action:<10} | {pair[0:3]:<3} | {trade_type or '-':<18} |{rate or '-':>9}| {dispo or '-':>6} "
@@ -856,7 +793,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# f"|{last_candle['min60_1d']}|{last_candle['max60_1d']}"
# f"|{last_candle['mid_smooth_tdc_5_1d'] or '-':>3}|{last_candle['mid_smooth_tdc_5_1h'] or '-':>3}|{last_candle['mid_smooth_tdc_5'] or '-':>3}"
f"|{last_candle['mid_smooth_5_state_1d'] or '-':>3}|{last_candle['mid_smooth_24_state_1h'] or '-':>3}|{last_candle['mid_smooth_5_state_1h'] or '-':>3}|{last_candle['mid_smooth_5_state'] or '-':>3}"
f"|{last_candle['trend_class_1d']:>5} {last_candle['trend_class_1h']:>5}" # {indic_5m} {indic_deriv1_5m} {indic_deriv2_5m} {indic_5m_sell} {indic_deriv1_5m_sell} {indic_deriv2_5m_sell}"
f"|{last_candle['trend_class_1d']:>5} {last_candle['trend_class_1h']:>5}"
)
def getLastLost(self, last_candle, pair):
@@ -1921,14 +1858,14 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# dérivée relative simple
dataframe[d1_col] = (dataframe[name] - dataframe[name].shift(1)) / dataframe[name].shift(1)
dataframe[d1_col] = factor1 * ((dataframe[name] - dataframe[name].shift(3)) / dataframe[name].shift(3))
# lissage EMA
dataframe[d1_col] = factor1 * dataframe[d1_col].ewm(span=ema_period, adjust=False).mean()
# dataframe[d1_col] = factor1 * dataframe[d1_col].ewm(span=ema_period, adjust=False).mean()
# dataframe[d1_col] = dataframe[d1_col].rolling(window=ema_period, center=True).median()
dataframe[d2_col] = dataframe[d1_col] - dataframe[d1_col].shift(1)
dataframe[d2_col] = factor2 * dataframe[d2_col].ewm(span=ema_period, adjust=False).mean()
dataframe[d2_col] = factor2 * (dataframe[d1_col] - dataframe[d1_col].shift(1))
# dataframe[d2_col] = factor2 * dataframe[d2_col].ewm(span=ema_period, adjust=False).mean()
# epsilon adaptatif via rolling percentile
p_low_d1 = dataframe[d1_col].rolling(window=window, min_periods=1).quantile(0.05)
@@ -2006,116 +1943,13 @@ class Zeus_8_3_2_B_4_2(IStrategy):
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
pair = metadata['pair']
# trend = self.getTrend(dataframe)
# # params = self.loadParamsFor(pair, trend)
#
# indic_5m = self.getParamValue(pair, trend, 'buy', 'indic_5m')
# indic_deriv1_5m = self.getParamValue( pair, trend, 'buy', 'indic_deriv1_5m')
# indic_deriv2_5m = self.getParamValue( pair, trend, 'buy', 'indic_deriv2_5m')
# dataframe.loc[
# (
# (dataframe['mid_smooth_3'].shift(1) < dataframe['mid_smooth_3'])
# & (dataframe['hapercent'] > 0)
# & ((dataframe['max_rsi_24_1h'] < 70) | (dataframe['close'] < dataframe['close_1d']))
# & (dataframe['open'] <= dataframe['bb_middleband'])
# & (dataframe[f"{self.indic_5m.value}_deriv1"] >= self.indic_deriv1_5m.value)
# & (dataframe[f"{self.indic_5m.value}_deriv2"] >= self.indic_deriv2_5m.value)
# # & (dataframe[f"{indic_1h}_deriv1"] >= self.indic_deriv1_1h.value)
# # & (dataframe[f"{indic_1h}_deriv2"] >= self.indic_deriv2_1h.value)
# ), ['enter_long', 'enter_tag']] = (1, 'smth')
# dataframe.loc[
# (
# (dataframe['sma24_deriv2'].shift(1) < 0)
# & (dataframe['sma24_deriv2'] > 0)
# & ((dataframe['max_rsi_24_1h'] < 70) | (dataframe['close'] < dataframe['close_1d']))
# & (dataframe[f"{self.indic_5m.value}_deriv1"] >= self.indic_deriv1_5m.value)
# & (dataframe[f"{self.indic_5m.value}_deriv2"] >= self.indic_deriv2_5m.value)
# # & (dataframe[f"{indic_1h}_deriv1"] >= self.indic_deriv1_1h.value)
# # & (dataframe[f"{indic_1h}_deriv2"] >= self.indic_deriv2_1h.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# ), ['enter_long', 'enter_tag']] = (1, 'invert')
#
# dataframe.loc[
# (
# (dataframe['sma24_deriv1'] > 0)
# & (dataframe['sma60_deriv1'].shift(1) < 0)
# & (dataframe['sma60_deriv1'] > 0)
# & ((dataframe['max_rsi_24_1h'] < 70) | (dataframe['close'] < dataframe['close_1d']))
# & (dataframe[f"{self.indic_5m.value}_deriv1"] >= self.indic_deriv1_5m.value)
# & (dataframe[f"{self.indic_5m.value}_deriv2"] >= self.indic_deriv2_5m.value)
# # & (dataframe[f"{indic_1h}_deriv1"] >= self.indic_deriv1_1h.value)
# # & (dataframe[f"{indic_1h}_deriv2"] >= self.indic_deriv2_1h.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# ), ['enter_long', 'enter_tag']] = (1, 'raise')
#
# dataframe.loc[
# (
# (dataframe['sma60_deriv1'].shift(1) < 0)
# & (dataframe['sma24_deriv2'] > 0)
# & ((dataframe['max_rsi_24_1h'] < 70) | (dataframe['close'] < dataframe['close_1d']))
# & (dataframe[f"{self.indic_5m.value}_deriv1"] >= self.indic_deriv1_5m.value)
# & (dataframe[f"{self.indic_5m.value}_deriv2"] >= self.indic_deriv2_5m.value)
# # & (dataframe[f"{indic_1h}_deriv1"] >= self.indic_deriv1_1h.value)
# # & (dataframe[f"{indic_1h}_deriv2"] >= self.indic_deriv2_1h.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# ), ['enter_long', 'enter_tag']] = (1, 'stg_inv')
#
# dataframe.loc[
# (
# (dataframe['mid_smooth_24'].shift(24) >= dataframe['mid_smooth_24'].shift(12))
# & (dataframe['mid_smooth_24'].shift(12) <= dataframe['mid_smooth_24'])
# & ((dataframe['max_rsi_24_1h'] < 70) | (dataframe['close'] < dataframe['close_1d']))
# & (dataframe[f"{self.indic_5m.value}_deriv1"] >= self.indic_deriv1_5m.value)
# & (dataframe[f"{self.indic_5m.value}_deriv2"] >= self.indic_deriv2_5m.value)
# # & (dataframe[f"{indic_1h}_deriv1"] >= self.indic_deriv1_1h.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# ), ['enter_long', 'enter_tag']] = (1, 'smth3_inv')
dataframe.loc[
(
(dataframe['percent3'] < -0.03)
& (dataframe['percent'] > 0)
), ['enter_long', 'enter_tag']] = (1, 'pct3')
dataframe.loc[
(
(dataframe["sma24"].shift(2) >= dataframe["sma24"].shift(1))
& (dataframe["sma24"].shift(1) <= dataframe["sma24"])
& (dataframe['percent3_1h'] < -0.03)
), ['enter_long', 'enter_tag']] = (1, 'pct3_1h')
dataframe.loc[
(
(dataframe[f"{self.indic_5m_slope_sup_buy.value}"].shift(2) >= dataframe[f"{self.indic_5m_slope_sup_buy.value}"].shift(1))
& (dataframe[f"{self.indic_5m_slope_sup_buy.value}"].shift(1) <= dataframe[f"{self.indic_5m_slope_sup_buy.value}"])
& (dataframe['slope_norm_1d'] < dataframe['slope_norm_1h'])
& (dataframe['stop_buying'] == False)
# & (dataframe[f"{self.indic_deriv_5m_buy.value}_deriv1"] > self.deriv_5m_buy.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# & (dataframe[f"hapercent"] >= -0.001)
), ['enter_long', 'enter_tag']] = (1, f"{self.indic_5m_slope_sup.value}_sup")
dataframe.loc[
(
(dataframe[f"{self.indic_5m_slope_inf_buy.value}"].shift(2) >= dataframe[f"{self.indic_5m_slope_inf_buy.value}"].shift(1))
& (dataframe[f"{self.indic_5m_slope_inf_buy.value}"].shift(1) <= dataframe[f"{self.indic_5m_slope_inf_buy.value}"])
& (dataframe['slope_norm_1d'] > dataframe['slope_norm_1h'])
& (dataframe['stop_buying'] == False)
# & (dataframe[f"{self.indic_deriv_5m_buy.value}_deriv1"] > self.deriv_5m_buy.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# & (dataframe[f"hapercent"] >= -0.001)
), ['enter_long', 'enter_tag']] = (1, f"{self.indic_5m_slope_inf_buy.value}_inf")
dataframe.loc[
(
(dataframe['stop_buying'] == False)
& (dataframe['stop_buying'].shift(1) == True)
# & (dataframe[f"{self.indic_deriv_5m_buy.value}_deriv1"] > self.deriv_5m_buy.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# & (dataframe[f"hapercent"] >= -0.001)
), ['enter_long', 'enter_tag']] = (1, f"end")
# (dataframe["mid_smooth_5_deriv1_1d"] > 0)
# (dataframe["sma48_deriv2"] > 0)
(dataframe['sma48'] > dataframe['sma48'].shift(1) + 20)
), ['enter_long', 'enter_tag']] = (1, 'sma48')
dataframe['test'] = np.where(dataframe['enter_long'] == 1, dataframe['close'] * 1.01, np.nan)
@@ -2270,40 +2104,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# dataframe.loc[
# (
# (dataframe['mid_smooth_deriv1'] == 0)
# & (dataframe['mid_smooth_deriv1'].shift(1) > 0)
# ), ['sell', 'exit_long']] = (1, 'sell_sma5_pct_1h')
# {indic_5m_sell} {indic_deriv1_5m_sell} {indic_deriv2_5m_sell}
dataframe.loc[
(
(dataframe[f"{self.indic_5m_slope_sup_sell.value}"].shift(2) < dataframe[f"{self.indic_5m_slope_sup_sell.value}"].shift(1))
& (dataframe[f"{self.indic_5m_slope_sup_sell.value}"].shift(1) > dataframe[f"{self.indic_5m_slope_sup_sell.value}"])
& (dataframe[f"{self.indic_deriv_5m_slope_sup_sell.value}_deriv1"] < self.deriv_5m_slope_sup_sell.value)
& (dataframe['slope_norm_1d'] > dataframe['slope_norm_1h'])
), ['exit_long', 'exit_tag']] = (1, f"{self.indic_5m_slope_sup_sell.value}_sup")
dataframe.loc[
(
(dataframe[f"{self.indic_5m_slope_inf_sell.value}"].shift(2) < dataframe[f"{self.indic_5m_slope_inf_sell.value}"].shift(1))
& (dataframe[f"{self.indic_5m_slope_inf_sell.value}"].shift(1) > dataframe[f"{self.indic_5m_slope_inf_sell.value}"])
& (dataframe[f"{self.indic_deriv_5m_slope_inf_sell.value}_deriv1"] < self.deriv_5m_slope_inf_sell.value)
& (dataframe['slope_norm_1d'] < dataframe['slope_norm_1h'])
), ['exit_long', 'exit_tag']] = (1, f"{self.indic_5m_slope_inf_sell.value}_inf")
dataframe.loc[
(
(dataframe['stop_buying'] == True)
& (dataframe['stop_buying'].shift(1) == False)
# & (dataframe[f"{self.indic_deriv_5m_buy.value}_deriv1"] > self.deriv_5m_buy.value)
# & (dataframe[f"sma60_deriv1"] >= -0.2)
# & (dataframe[f"hapercent"] >= -0.001)
), ['enter_long', 'enter_tag']] = (1, f"start")
# dataframe.loc[
# (
# (dataframe[f"{self.indic_percent_sell.value}"] < self.percent_5m_sell.value)
# ), ['exit_long', 'exit_tag']] = (1, f"{self.indic_percent_sell.value}")
# (dataframe['sma48'] < dataframe['sma48'].shift(1) - 10)
# ), ['exit_long', 'exit_tag']] = (1, 'sma48')
return dataframe
@@ -2542,6 +2344,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# Calculer le minimum des 14 derniers jours
nb_pairs = len(self.dp.current_whitelist())
return self.config.get('stake_amount')
base_stake_amount = self.config.get('stake_amount') / (self.mises.value) # * nb_pairs) # Montant de base configuré
# pct60 = round(100 * self.getPctClose60D(pair, last_candle), 2)