Calcul 20240101-20250514 2635.892 199.501$ => 13,21 max 11 mises BTC / 14 mises DOGE

This commit is contained in:
Jérôme Delacotte
2025-07-15 20:42:52 +02:00
parent 501f5507ca
commit d1cf9ab72f
2 changed files with 390 additions and 189 deletions

View File

@@ -42,6 +42,7 @@ def normalize(df):
df = (df - df.min()) / (df.max() - df.min())
return df
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 * 2
@@ -156,15 +157,19 @@ class Zeus_8_3_2_B_4_2(IStrategy):
pair: {
"first_buy": 0,
"last_max": 0,
"trade_info": {},
"max_touch": 0.0,
"last_min": 0.0,
"last_sell": 0.0,
"last_buy": 0.0,
'total_amount': 0.0,
'count_of_buys': 0,
'current_profit': 0,
'expected_profit': 0,
"last_candle": {},
"last_trade": None,
"last_count_of_buys": 0,
'base_stake_amount': 0,
'stop_buy': False,
'last_date': 0,
'stop': False,
'max_profit': 0,
@@ -201,27 +206,28 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# =========================================================================
# variables pour probabilité
# Bornes des quantiles pour
sma5_deriv1_1h = [-2.2582, -0.2665, -0.1475, -0.0860, -0.0428, -0.0084, 0.0244, 0.0592, 0.1038, 0.1656, 0.2766, 1.8331]
ema_volume = [-8.9178, -0.0196, -0.0096, -0.0053, -0.0026, -0.0007, 0.0009, 0.0029, 0.0056, 0.0101, 0.0200, 3.8009]
# Bornes des quantiles pour
mid_smooth_3_deriv1 = [-1.5837, -0.0765, -0.0451, -0.0280, -0.0155, -0.0046, 0.0058, 0.0167, 0.0298, 0.0472, 0.0785, 1.1362]
mid_smooth_1h_deriv1 = [-1.0482, -0.0571, -0.0336, -0.0206, -0.0113, -0.0033, 0.0044, 0.0127, 0.0225, 0.0356, 0.0591, 0.8335]
ema_volume_mid_smooth_1h_deriv1_matrice = {
'B5': [28.0, 32.8, 33.6, 36.4, 35.5, 35.6, 40.1, 40.9, 45.9, 49.7, 52.2],
'B4': [33.9, 37.2, 38.6, 40.7, 39.7, 43.0, 46.2, 47.1, 51.9, 55.9, 61.1],
'B3': [36.4, 41.3, 39.1, 41.8, 44.6, 46.1, 50.3, 47.9, 47.6, 57.0, 58.5],
'B2': [40.7, 40.6, 40.9, 44.6, 48.0, 48.4, 48.5, 53.5, 53.0, 54.8, 53.3],
'B1': [37.5, 41.4, 48.0, 46.3, 48.5, 49.1, 53.7, 53.4, 56.4, 56.7, 62.8],
'N0': [47.0, 44.3, 45.6, 47.0, 52.9, 52.2, 55.7, 53.0, 57.6, 58.1, 63.4],
'H1': [44.1, 46.2, 49.4, 49.3, 52.2, 53.7, 58.2, 57.1, 59.0, 61.6, 61.3],
'H2': [51.0, 44.7, 49.4, 51.3, 54.9, 57.9, 56.7, 58.1, 60.3, 60.6, 65.6],
'H3': [50.5, 48.3, 49.9, 60.4, 57.8, 56.3, 60.2, 61.9, 62.2, 65.3, 68.3],
'H4': [43.1, 53.6, 58.1, 61.4, 58.7, 62.6, 61.3, 65.4, 67.5, 68.2, 71.4],
'H5': [56.6, 56.2, 57.7, 63.8, 64.8, 64.7, 66.5, 68.8, 70.9, 72.8, 76.6],
sma5_deriv1_1h_mid_smooth_3_deriv1_matrice = {
'B5': [6.1, 11.7, 15.6, 20.6, 24.0, 26.0, 30.9, 40.7, 51.4, 54.9, 76.2],
'B4': [10.4, 13.2, 19.6, 22.7, 31.9, 36.8, 44.5, 50.8, 68.0, 74.6, 88.2],
'B3': [10.2, 16.7, 24.4, 25.1, 32.2, 42.6, 53.7, 60.0, 74.3, 78.8, 88.2],
'B2': [11.5, 18.0, 24.8, 29.1, 35.6, 44.9, 54.1, 66.4, 75.5, 81.3, 90.0],
'B1': [10.2, 18.8, 26.0, 31.6, 39.3, 48.7, 60.7, 71.4, 78.5, 83.4, 90.5],
'N0': [12.5, 22.6, 26.4, 34.3, 42.2, 56.8, 63.3, 71.4, 80.7, 83.3, 89.5],
'H1': [14.4, 24.5, 28.7, 40.0, 49.2, 60.2, 68.0, 72.3, 82.2, 83.4, 92.5],
'H2': [12.7, 26.3, 33.5, 42.6, 53.6, 61.9, 68.8, 75.1, 80.9, 83.8, 92.0],
'H3': [13.2, 26.9, 40.9, 46.8, 56.9, 65.7, 72.5, 75.8, 84.4, 86.9, 93.2],
'H4': [15.8, 31.3, 43.6, 49.9, 64.2, 68.6, 75.9, 77.0, 85.4, 88.9, 95.0],
'H5': [18.8, 39.1, 54.7, 64.0, 70.1, 79.6, 77.7, 81.8, 89.9, 89.4, 96.4]
}
sma5_deriv1_1h_mid_smooth_3_deriv1_matrice_df = pd.DataFrame(sma5_deriv1_1h_mid_smooth_3_deriv1_matrice, index=index_labels)
ema_volume_mid_smooth_1h_deriv1_matrice_df = pd.DataFrame(ema_volume_mid_smooth_1h_deriv1_matrice, index=index_labels)
# Extraction de la matrice numérique
sma5_deriv1_1h_mid_smooth_3_deriv1__numeric_matrice = sma5_deriv1_1h_mid_smooth_3_deriv1_matrice_df.reindex(index=ordered_labels, columns=ordered_labels).values
ema_volume_mid_smooth_1h_deriv1_numeric_matrice = ema_volume_mid_smooth_1h_deriv1_matrice_df.reindex(index=ordered_labels, columns=ordered_labels).values
# paliers = {}
@@ -231,6 +237,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# buy_mid_smooth_3_deriv1 = DecimalParameter(-0.1, 0.1, decimals=2, default=-0.06, space='buy')
# buy_mid_smooth_24_deriv1 = DecimalParameter(-0.6, 0, decimals=2, default=-0.03, space='buy')
buy_horizon_predict_1h = IntParameter(1, 6, default=2, space='buy')
# buy_level_predict_1h = IntParameter(2, 5, default=4, space='buy')
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float, time_in_force: str,
@@ -247,7 +254,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# val = self.getProbaHausse144(last_candle)
# allow_to_buy = True #(not self.stop_all) #& (not self.all_down)
allow_to_buy = not self.pairs[pair]['stop'] #and val > self.buy_val.value #not last_candle['tendency'] in ('B-', 'B--') # (rate <= float(limit)) | (entry_tag == 'force_entry')
allow_to_buy = not self.pairs[pair][
'stop'] # and val > self.buy_val.value #not last_candle['tendency'] in ('B-', 'B--') # (rate <= float(limit)) | (entry_tag == 'force_entry')
# if allow_to_buy:
# poly_func, x_future, y_future, count = self.polynomial_forecast(
@@ -306,13 +314,13 @@ class Zeus_8_3_2_B_4_2(IStrategy):
if allow_to_sell:
self.trades = list()
self.pairs[pair]['last_count_of_buys'] = trade.nr_of_successful_entries #self.pairs[pair]['count_of_buys']
self.pairs[pair]['last_count_of_buys'] = trade.nr_of_successful_entries # self.pairs[pair]['count_of_buys']
self.pairs[pair]['last_sell'] = rate
self.pairs[pair]['last_trade'] = trade
self.pairs[pair]['last_candle'] = last_candle
self.pairs[pair]['max_profit'] = 0
self.trades = list()
dispo= round(self.wallets.get_available_stake_amount())
dispo = round(self.wallets.get_available_stake_amount())
# print(f"Sell {pair} {current_time} {exit_reason} dispo={dispo} amount={amount} rate={rate} open_rate={trade.open_rate}")
self.log_trade(
last_candle=last_candle,
@@ -351,12 +359,15 @@ class Zeus_8_3_2_B_4_2(IStrategy):
last_candle_1h = dataframe.iloc[-13].squeeze()
before_last_candle = dataframe.iloc[-2].squeeze()
before_last_candle_2 = dataframe.iloc[-3].squeeze()
before_last_candle_12 = dataframe.iloc[-13].squeeze()
before_last_candle_24 = dataframe.iloc[-25].squeeze()
expected_profit = self.expectedProfit(pair, last_candle)
# print(f"current_time={current_time} current_profit={current_profit} expected_profit={expected_profit}")
max_touch_before = self.pairs[pair]['max_touch']
self.pairs[pair]['last_max'] = max(last_candle['haclose'], self.pairs[pair]['last_max'])
self.pairs[pair]['last_min'] = min(last_candle['haclose'], self.pairs[pair]['last_min'])
count_of_buys = trade.nr_of_successful_entries
@@ -375,11 +386,23 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# if (last_candle['sma20_deriv1'] < 0 and before_last_candle['sma20_deriv1'] >= 0) and (current_profit > expected_profit):
# return 'Drv_' + str(count_of_buys)
if 1 <= count_of_buys <= 3:
if ((before_last_candle_2['mid_smooth_3_deriv1'] <= before_last_candle['mid_smooth_3_deriv1'])
& (before_last_candle['mid_smooth_3_deriv1'] >= last_candle['mid_smooth_3_deriv1'])) \
and (current_profit > expected_profit):
return 'Drv_' + str(count_of_buys)
return 'Drv3_' + pair + '_' + str(count_of_buys)
if 4 <= count_of_buys <= 6:
if ((before_last_candle_2['mid_smooth_12_deriv1'] <= before_last_candle['mid_smooth_12_deriv1'])
& (before_last_candle['mid_smooth_12_deriv1'] >= last_candle['mid_smooth_12_deriv1'])) \
and (current_profit > expected_profit):
return 'Drv13_' + pair + '_' + str(count_of_buys)
if 7 <= count_of_buys:
if ((before_last_candle_24['sma24_deriv1_1h'] <= before_last_candle_12['sma24_deriv1_1h'])
& (before_last_candle_12['sma24_deriv1_1h'] >= last_candle['sma24_deriv1_1h'])) \
and (current_profit > expected_profit):
return 'Drv24_' + pair + '_' + str(count_of_buys)
# if (baisse > mx) & (current_profit > expected_profit):
# self.trades = list()
@@ -461,8 +484,15 @@ class Zeus_8_3_2_B_4_2(IStrategy):
last_lost = round((last_candle['haclose'] - self.pairs[pair]['max_touch']) / self.pairs[pair]['max_touch'], 3)
max_touch = '' #round(last_candle['max12_1d'], 1) #round(self.pairs[pair]['max_touch'], 1)
pct_max = round((last_candle['close'] - self.pairs[pair]['first_buy']) / self.pairs[pair]['first_buy'], 3) # round(100 * self.pairs[pair]['current_profit'], 1)
if buys is None:
buys = ''
max_touch = '' # round(last_candle['max12_1d'], 1) #round(self.pairs[pair]['max_touch'], 1)
pct_max = round((last_candle['close'] - self.pairs[pair]['first_buy']) / self.pairs[pair]['first_buy'],
3) # round(100 * self.pairs[pair]['current_profit'], 1)
total_counts = str(buys) + '/' + str(sum(pair_data['count_of_buys'] for pair_data in
self.pairs.values())) # if not pair in ('BTC/USDT', 'BTC/USDC'))
# if trade_type is not None:
# if np.isnan(last_candle['rsi_1d']):
@@ -481,8 +511,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.printLog(
f"| {date:<16} | {action:<10} | {pair[0:3]:<3} | {trade_type or '-':<18} |{rate or '-':>9}| {dispo or '-':>6} "
f"| {profit or '-':>8} | {pct_max or '-':>6} | {round(self.pairs[pair]['max_touch'], 2) or '-':>11} | {last_lost or '-':>12} "
f"| {int(self.pairs[pair]['last_max']) or '-':>7} |{buys or '-':>4}|{stake or '-':>7}"
f"|{last_candle['tendency_12'] or '-':>3}|" #{last_candle['tendency_1h'] or '-':>3}|{last_candle['tendency_1d'] or '-':>3}"
f"| {int(self.pairs[pair]['last_max']) or '-':>7} |{total_counts or '-':>4}|{stake or '-':>7}"
f"|{last_candle['tendency_12'] or '-':>3}|" # {last_candle['tendency_1h'] or '-':>3}|{last_candle['tendency_1d'] or '-':>3}"
# f"|{round(last_candle['mid_smooth_24_deriv1'],3) or '-':>6}|{round(last_candle['mid_smooth_1h_deriv1'],3) or '-':>6}|{round(last_candle['mid_smooth_deriv1_1d'],3) or '-' :>6}|"
# f"{round(last_candle['mid_smooth_24_deriv2'],3) or '-' :>6}|{round(last_candle['mid_smooth_1h_deriv2'],3) or '-':>6}|{round(last_candle['mid_smooth_deriv2_1d'],3) or '-':>6}|"
f"{round(val, 1) or '-' :>6}|"
@@ -494,7 +524,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.printLog(
f"+{'-' * 18}+{'-' * 12}+{'-' * 5}+{'-' * 20}+{'-' * 9}+{'-' * 8}+{'-' * 10}+{'-' * 8}+{'-' * 13}+{'-' * 14}+{'-' * 9}+{'-' * 4}+{'-' * 7}+"
f"{'-' * 3}"
#"+{'-' * 3}+{'-' * 3}
# "+{'-' * 3}+{'-' * 3}
f"+{'-' * 6}+{'-' * 7}+{'-' * 7}+"
)
@@ -514,9 +544,9 @@ class Zeus_8_3_2_B_4_2(IStrategy):
if d1 >= d1_lim_inf and d1 <= d1_lim_sup: # and d2 >= d2_lim_inf and d2 <= d2_lim_sup:
return 'P' # Palier
if d1 == 0.0:
return 'DH' if d2 > 0 else 'DB' #Depart Hausse / Départ Baisse
return 'DH' if d2 > 0 else 'DB' # Depart Hausse / Départ Baisse
if d1 > d1_lim_sup:
return 'H++' if d2 > 0 else 'H+' #Acceleration Hausse / Ralentissement Hausse
return 'H++' if d2 > 0 else 'H+' # Acceleration Hausse / Ralentissement Hausse
if d1 < d1_lim_inf:
return 'B--' if d2 < 0 else 'B-' # Accéleration Baisse / Ralentissement Baisse
return 'Mid'
@@ -532,6 +562,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe['haopen'] = heikinashi['open']
dataframe['haclose'] = heikinashi['close']
dataframe['hapercent'] = (dataframe['haclose'] - dataframe['haopen']) / dataframe['haclose']
dataframe['hapercent3'] = (dataframe['haclose'] - dataframe['haopen'].shift(3)) / dataframe['haclose'].shift(3)
dataframe['sma5'] = talib.SMA(dataframe, timeperiod=5)
dataframe['sma10'] = talib.SMA(dataframe, timeperiod=10)
@@ -547,7 +578,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe["percent12"] = (dataframe["close"] - dataframe["open"].shift(12)) / dataframe["open"].shift(12)
dataframe = self.calculateDerivation(dataframe, window=3, suffixe="_3")
dataframe["mid_re_smooth_3"] = self.conditional_smoothing(dataframe['mid_smooth_3'].dropna(), threshold=0.0005).dropna()
dataframe["mid_re_smooth_3"] = self.conditional_smoothing(dataframe['mid_smooth_3'].dropna(),
threshold=0.0005).dropna()
self.calculeDerivees(dataframe, "mid_re_smooth_3")
dataframe = self.calculateDerivation(dataframe, window=12, suffixe="_12")
dataframe = self.calculateDerivation(dataframe, window=24, suffixe="_24", factor_1=1000, factor_2=10)
@@ -583,9 +615,12 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# informative = self.calculateDerivation(informative, window=12)
# informative = self.apply_regression_derivatives(informative, column='mid', window=5, degree=4)
# informative['volatility'] = talib.STDDEV(informative['close'], timeperiod=14) / informative['close']
# informative['atr'] = (talib.ATR(informative['high'], informative['low'], informative['close'], timeperiod=14)) / informative['close']
informative['rsi'] = talib.RSI(informative['close']) #, timeperiod=7)
informative['volatility'] = talib.STDDEV(informative['close'], timeperiod=14) / informative['close']
self.calculeDerivees(informative, 'volatility')
informative['atr'] = (talib.ATR(informative['high'], informative['low'], informative['close'], timeperiod=14)) / \
informative['close']
self.calculeDerivees(informative, 'atr')
informative['rsi'] = talib.RSI(informative['close']) # , timeperiod=7)
informative['sma5'] = talib.SMA(informative, timeperiod=5)
informative['sma24'] = talib.SMA(informative, timeperiod=24)
self.calculeDerivees(informative, 'sma5')
@@ -611,6 +646,9 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# informative = self.apply_regression_derivatives(informative, column='mid', window=5, degree=4)
informative['max12'] = talib.MAX(informative['close'], timeperiod=12)
informative['max60'] = talib.MAX(informative['close'], timeperiod=60)
informative['min12'] = talib.MIN(informative['close'], timeperiod=12)
informative['min60'] = talib.MIN(informative['close'], timeperiod=60)
# informative['rsi'] = talib.RSI(informative['close']) #, timeperiod=7)
# self.calculeDerivees(informative, 'rsi')
@@ -619,7 +657,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.calculeDerivees(informative, 'sma5', factor_1=10, factor_2=1)
informative['futur_percent_3'] = 100 * ((informative['sma5'].shift(-3) - informative['sma5']) / informative['sma5'])
informative['futur_percent_3'] = 100 * (
(informative['sma5'].shift(-3) - informative['sma5']) / informative['sma5'])
# if self.dp.runmode.value in ('backtest'):
# print("##################")
@@ -655,11 +694,13 @@ class Zeus_8_3_2_B_4_2(IStrategy):
for buy in filled_buys:
if count == 0:
dataframe['first_price'] = buy.price
self.pairs[pair]['first_buy'] = buy.price
# dataframe['close01'] = buy.price * 1.01
# Order(id=2396, trade=1019, order_id=29870026652, side=buy, filled=0.00078, price=63921.01,
# status=closed, date=2024-08-26 02:20:11)
dataframe['last_price'] = buy.price
self.pairs[pair]['last_buy'] = buy.price
count = count + 1
amount += buy.price * buy.filled
# dataframe['mid_price'] = (dataframe['last_price'] + dataframe['first_price']) / 2
@@ -688,7 +729,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
horizon_h = 12
dataframe['sma5_1h'] = dataframe['sma5_1h'].rolling(window=horizon_h).mean()
# dataframe['sma5_deriv1_1h'] = dataframe['sma5_deriv1_1h'].rolling(window=horizon_h).mean()
# dataframe['ema_volume'] = dataframe['ema_volume'].rolling(window=horizon_h).mean()
# dataframe['sma24_1h'] = dataframe['sma24_1h'].rolling(window=horizon_h).mean()
# dataframe['sma24_deriv1_1h'] = dataframe['sma24_deriv1_1h'].rolling(window=horizon_h).mean()
@@ -701,8 +742,10 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# dataframe['smooth_24_deriv1'] = 100 * dataframe['smooth_24_deriv1'] / dataframe['mid_smooth_24']
# dataframe['smooth_24_deriv2'] = 100 * dataframe['smooth_24_deriv2'] / dataframe['mid_smooth_24']
dataframe['close_smooth'] = self.conditional_smoothing(dataframe['mid'].rolling(3).mean().dropna(), threshold=0.001)
dataframe['smooth'], dataframe['deriv1'], dataframe['deriv2'] = self.smooth_and_derivatives(dataframe['close_smooth'])
dataframe['close_smooth'] = self.conditional_smoothing(dataframe['mid'].rolling(3).mean().dropna(),
threshold=0.001)
dataframe['smooth'], dataframe['deriv1'], dataframe['deriv2'] = self.smooth_and_derivatives(
dataframe['close_smooth'])
dataframe['deriv1'] = 100 * dataframe['deriv1'] / dataframe['mid']
dataframe['deriv2'] = 100 * dataframe['deriv2'] / dataframe['mid']
@@ -724,7 +767,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
#
# horizon_h = 24 * 5
# dataframe['futur_percent_1h'] = 100 * ((dataframe['mid_smooth_1h'].shift(-12) - dataframe['mid_smooth_1h']) / dataframe['mid_smooth_1h']).rolling(horizon_h).mean()
# dataframe['futur_percent_3h'] = 100 * ((dataframe['mid_smooth_1h'].shift(-36) - dataframe['mid_smooth_1h']) / dataframe['mid_smooth_1h']).rolling(horizon_h).mean()
dataframe['futur_percent_3h'] = 100 * (
(dataframe['close'].shift(-36) - dataframe['close']) / dataframe['close']).rolling(horizon_h).mean()
# dataframe['futur_percent_5h'] = 100 * ((dataframe['mid_smooth_1h'].shift(-60) - dataframe['mid_smooth_1h']) / dataframe['mid_smooth_1h']).rolling(horizon_h).mean()
# dataframe['futur_percent_12h'] = 100 * ((dataframe['mid_smooth_1h'].shift(-144) - dataframe['mid_smooth_1h']) / dataframe['mid_smooth_1h']).rolling(horizon_h).mean()
#
@@ -733,13 +777,18 @@ class Zeus_8_3_2_B_4_2(IStrategy):
#
# self.calculateProbabilite2Index(dataframe, ['futur_percent_1d'], 'sma24_deriv1_1h', 'sma5_1d')
# if self.dp.runmode.value in ('backtest'):
# print("##################")
# print("# STAT DAY vs HOUR")
# print("##################")
# self.calculateProbabilite2Index(dataframe, futur_cols=['futur_percent_3_1h'], indic_1='sma5_deriv1_1h', indic_2='mid_smooth_3_deriv1')
dataframe['ema_volume'] = 20 * (dataframe['volume'] * dataframe['hapercent']) / (
abs(dataframe['volume'].shift(1)) + abs(dataframe['volume'].shift(2)))
dataframe['ema_volume'] = EMAIndicator(dataframe['volume'] * dataframe['hapercent'], window=5).ema_indicator()
self.calculeDerivees(dataframe, 'ema_volume', factor_1=10, factor_2=1)
if self.dp.runmode.value in ('backtest'):
print("##################")
print("# STAT DAY vs HOUR")
print("##################")
self.calculateProbabilite2Index(dataframe, futur_cols=['futur_percent_3h'], indic_1='ema_volume',
indic_2='mid_smooth_1h_deriv1')
dataframe['proba_hausse'] = dataframe.apply(lambda row: self.getProbaHausse(row), axis=1)
return dataframe
@@ -748,8 +797,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe[f"{indic}_deriv2"] = factor_2 * dataframe[f"{indic}_deriv1"].diff()
def calculateDownAndUp(self, dataframe, limit=0.0001):
dataframe['down'] = dataframe['mid_smooth_1h_deriv1'] < limit #dataframe['hapercent'] <= limit
dataframe['up'] = dataframe['mid_smooth_1h_deriv1'] > limit #dataframe['hapercent'] >= limit
dataframe['down'] = dataframe['mid_smooth_1h_deriv1'] < limit # dataframe['hapercent'] <= limit
dataframe['up'] = dataframe['mid_smooth_1h_deriv1'] > limit # dataframe['hapercent'] >= limit
dataframe['down_count'] = - dataframe['down'].astype(int) * (
dataframe['down'].groupby((dataframe['down'] != dataframe['down'].shift()).cumsum()).cumcount() + 1)
dataframe['up_count'] = dataframe['up'].astype(int) * (
@@ -763,10 +812,13 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# 1. Calcul du lissage par moyenne mobile médiane
dataframe[f"mid_smooth{suffixe}"] = dataframe['haclose'].rolling(window=window).mean()
# 2. Dérivée première = différence entre deux bougies successives
dataframe[f"mid_smooth{suffixe}_deriv1"] = round(factor_1 * dataframe[f"mid_smooth{suffixe}"].rolling(window=3).mean().diff() / dataframe[f"mid_smooth{suffixe}"], 4)
dataframe[f"mid_smooth{suffixe}_deriv1"] = round(
factor_1 * dataframe[f"mid_smooth{suffixe}"].rolling(window=3).mean().diff() / dataframe[
f"mid_smooth{suffixe}"], 4)
# 3. Dérivée seconde = différence de la dérivée première
dataframe[f"mid_smooth{suffixe}_deriv2"] = round(factor_2 * dataframe[f"mid_smooth{suffixe}_deriv1"].rolling(window=3).mean().diff(), 4)
dataframe[f"mid_smooth{suffixe}_deriv2"] = round(
factor_2 * dataframe[f"mid_smooth{suffixe}_deriv1"].rolling(window=3).mean().diff(), 4)
dataframe = self.add_tendency_column(dataframe, suffixe)
return dataframe
@@ -806,6 +858,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
), ['enter_long', 'enter_tag']] = (1, 'smth')
dataframe['test'] = np.where(dataframe['enter_long'] == 1, dataframe['close'] * 1.01, np.nan)
dataframe['perte_02'] = np.where((dataframe['hapercent3'] * 100 < -0.2), dataframe['close'], np.nan)
# self.paliers = self.get_dca_stakes()
@@ -912,8 +965,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
last_candle = dataframe.iloc[-1].squeeze()
before_last_candle = dataframe.iloc[-2].squeeze()
last_candle_2 = dataframe.iloc[-3].squeeze()
before_last_candle_12 = dataframe.iloc[-13].squeeze()
before_last_candle_24 = dataframe.iloc[-25].squeeze()
last_candle_3 = dataframe.iloc[-4].squeeze()
last_candle_previous_1h = dataframe.iloc[-13].squeeze()
# prépare les données
@@ -930,6 +983,10 @@ class Zeus_8_3_2_B_4_2(IStrategy):
pair = trade.pair
pct_first = 0
total_counts = sum(
pair_data['count_of_buys'] for pair_data in self.pairs.values() if not pair in ('BTC/USDT', 'BTC/USDC'))
if self.pairs[pair]['first_buy']:
pct_first = round((last_candle['close'] - self.pairs[pair]['first_buy']) / self.pairs[pair]['first_buy'], 3)
@@ -938,14 +995,15 @@ class Zeus_8_3_2_B_4_2(IStrategy):
pct_max = current_profit
else:
if self.pairs[trade.pair]['last_buy']:
pct_max = round((last_candle['close'] - self.pairs[trade.pair]['last_buy']) / self.pairs[trade.pair]['last_buy'], 4)
pct_max = round(
(last_candle['close'] - self.pairs[trade.pair]['last_buy']) / self.pairs[trade.pair]['last_buy'], 4)
else:
pct_max = - pct
if pair in ('BTC/USDT', 'BTC/USDC') or count_of_buys <= 2:
lim = - pct - (count_of_buys * 0.001)
# lim = - (0.012 * (1 + round(count_of_buys / 5)) + 0.001 * (count_of_buys - 1))
#lim = - (0.012 + 0.001 * (count_of_buys - 1) + (0.002 * count_of_buys if count_of_buys > 10 else 0.001 * count_of_buys if count_of_buys > 5 else 0))
# lim = - (0.012 + 0.001 * (count_of_buys - 1) + (0.002 * count_of_buys if count_of_buys > 10 else 0.001 * count_of_buys if count_of_buys > 5 else 0))
else:
pct = 0.05
@@ -1067,13 +1125,14 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# > - 0.015 ==>Avg. stake amount 249.107 USDT │ Total trade volume 138186.861 USDT 275 │ 1.20 │ 901.976 │ 45.1 │ 1 day, 19:17:00 │ 274 0 1 99.6 │ 0.684 USDT 0.02%
condition = (last_candle['sma5_deriv1_1h'] > 0 or count_of_buys <= 5)
#last_candle['mid_smooth_1h_deriv1'] > - 0.05 #(last_candle['mid_smooth_3_deriv1'] > self.buy_mid_smooth_3_deriv1.value) and (last_candle['mid_smooth_24_deriv1'] > self.buy_mid_smooth_24_deriv1.value)
# last_candle['mid_smooth_1h_deriv1'] > - 0.05 #(last_candle['mid_smooth_3_deriv1'] > self.buy_mid_smooth_3_deriv1.value) and (last_candle['mid_smooth_24_deriv1'] > self.buy_mid_smooth_24_deriv1.value)
# (last_candle['enter_long'] == 1 & (count_of_buys < 3)) \
# or ((before_last_candle['mid_re_smooth_3_deriv1'] <= 0) & (last_candle['mid_re_smooth_3_deriv1'] >= 0) & (3 <= count_of_buys < 6)) \
# or ((before_last_candle['mid_smooth_1h_deriv1'] <= 0) & (last_candle['mid_smooth_1h_deriv1'] >= 0) & (6 <= count_of_buys))
limit_buy = 20
if (count_of_buys < limit_buy) and condition and (pct_max < lim): # and val > self.buy_val_adjust.value and last_candle['mid_smooth_deriv1_1d'] > - 1):
if (count_of_buys < limit_buy) and condition and (
pct_max < lim): # and val > self.buy_val_adjust.value and last_candle['mid_smooth_deriv1_1d'] > - 1):
try:
# print(f"{trade.pair} current_profit={current_profit} count_of_buys={count_of_buys} pct_first={pct_first:.3f} pct_max={pct_max:.3f} lim={lim:.3f} index={index}")
# self.pairs[trade.pair]['last_palier_index'] = index
@@ -1090,7 +1149,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
max_amount = self.config.get('stake_amount') * 2.5
# stake_amount = min(stake_amount, self.wallets.get_available_stake_amount())
stake_amount = min(min(max_amount, self.wallets.get_available_stake_amount()),
self.adjust_stake_amount(pair, last_candle) - 10 * pct_first / pct) # min(200, self.adjust_stake_amount(pair, last_candle) * self.fibo[count_of_buys])
self.adjust_stake_amount(pair,
last_candle) - 10 * pct_first / pct) # min(200, self.adjust_stake_amount(pair, last_candle) * self.fibo[count_of_buys])
trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48'
self.pairs[trade.pair]['count_of_buys'] += 1
@@ -1118,7 +1178,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# print(f" {key:20}: {value}")
df = pd.DataFrame.from_dict(self.pairs, orient='index')
colonnes_a_exclure = ['last_candle', 'last_trade', 'last_palier_index', 'stop']
colonnes_a_exclure = ['last_candle', 'last_trade', 'last_palier_index', 'stop',
'trade_info', 'last_date', 'expected_profit', 'last_count_of_buys', 'base_stake_amount', 'stop_buy']
df_filtered = df[df['count_of_buys'] > 0].drop(columns=colonnes_a_exclure)
# df_filtered = df_filtered["first_buy", "last_max", "max_touch", "last_sell","last_buy", 'count_of_buys', 'current_profit']
@@ -1175,21 +1236,24 @@ class Zeus_8_3_2_B_4_2(IStrategy):
return None
def getProbaHausse(self, last_candle):
value_1 = self.getValuesFromTable(self.sma5_deriv1_1h, last_candle['sma5_deriv1_1h'])
value_2 = self.getValuesFromTable(self.mid_smooth_3_deriv1, last_candle['mid_smooth_3_deriv1'])
value_1 = self.getValuesFromTable(self.ema_volume, last_candle['ema_volume'])
value_2 = self.getValuesFromTable(self.mid_smooth_1h_deriv1, last_candle['mid_smooth_1h_deriv1'])
val = self.approx_val_from_bins(
matrice=self.sma5_deriv1_1h_mid_smooth_3_deriv1_matrice_df,
numeric_matrice=self.sma5_deriv1_1h_mid_smooth_3_deriv1__numeric_matrice,
row_label=value_1,
col_label=value_2
matrice=self.ema_volume_mid_smooth_1h_deriv1_matrice_df,
numeric_matrice=self.ema_volume_mid_smooth_1h_deriv1_numeric_matrice,
row_label=value_2,
col_label=value_1
)
return val
def adjust_stake_amount(self, pair: str, last_candle: DataFrame):
# Calculer le minimum des 14 derniers jours
base_stake_amount = self.config.get('stake_amount') # Montant de base configuré
if not pair.startswith('BTC'):
factors = [1, 1.25, 1.5, 2.0]
if not pair in ('BTC/USDT', 'BTC/USDC'):
factors = [1, 1.2, 1.3, 1.4]
base_stake_amount = base_stake_amount * 0.75
first_price = self.pairs[pair]['first_buy']
@@ -1201,17 +1265,20 @@ class Zeus_8_3_2_B_4_2(IStrategy):
if last_max > 0:
pct = 100 * (last_max - first_price) / last_max
thresholds = [2, 5, 10, 20]
factors = [1, 1.25, 1.5, 2.0]
factor = self.multi_step_interpolate(pct, thresholds, factors)
adjusted_stake_amount = base_stake_amount * factor #max(base_stake_amount, min(100, base_stake_amount * percent_4))
adjusted_stake_amount = base_stake_amount * factor # max(base_stake_amount, min(100, base_stake_amount * percent_4))
return adjusted_stake_amount
def expectedProfit(self, pair: str, last_candle: DataFrame):
expected_profit = 0.004 #min(0.01, first_max)
count_of_buys = self.pairs[pair]['count_of_buys']
pct_first = round((last_candle['close'] - self.pairs[pair]['first_buy']) / self.pairs[pair]['first_buy'], 3)
expected_profit = max(0.004, abs(
pct_first / 3)) # 0.004 + 0.002 * self.pairs[pair]['count_of_buys'] #min(0.01, first_max)
# print(
# f"Expected profit price={current_price:.4f} min_max={min_max:.4f} min_14={min_14_days:.4f} max_14={max_14_days:.4f} percent={percent:.4f} expected_profit={expected_profit:.4f}")
@@ -1251,8 +1318,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# Détecter les zones de retournement: quand dérivée1 ≈ 0 et que dérivée2 change de signe.
def calculateRegression(self,
dataframe: DataFrame,
column= 'close',
window= 50,
column='close',
window=50,
degree=3,
future_offset: int = 10 # projection à n bougies après
) -> DataFrame:
@@ -1298,10 +1365,12 @@ class Zeus_8_3_2_B_4_2(IStrategy):
df[f"{column}_regression"] = regression_fit
# 2. Dérivée première = différence entre deux bougies successives
df[f"{column}_regression_deriv1"] = round(100 * df[f"{column}_regression"].diff() / df[f"{column}_regression"], 4)
df[f"{column}_regression_deriv1"] = round(100 * df[f"{column}_regression"].diff() / df[f"{column}_regression"],
4)
# 3. Dérivée seconde = différence de la dérivée première
df[f"{column}_regression_deriv2"] = round(10 * df[f"{column}_regression_deriv1"].rolling(int(window / 4)).mean().diff(), 4)
df[f"{column}_regression_deriv2"] = round(
10 * df[f"{column}_regression_deriv1"].rolling(int(window / 4)).mean().diff(), 4)
df[f"{column}_future_{future_offset}"] = regression_future_fit
@@ -1395,7 +1464,6 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# Approximation directe (aucune interpolation complexe ici, juste une lecture)
return numeric_matrice[row_idx, col_idx]
@property
def protections(self):
return [
@@ -1460,7 +1528,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
deriv1 = np.diff(smooth, prepend=smooth[0])
deriv2 = np.diff(deriv1, prepend=deriv1[0])
return pd.Series(smooth, index=series.index), pd.Series(deriv1, index=series.index), pd.Series(deriv2, index=series.index)
return pd.Series(smooth, index=series.index), pd.Series(deriv1, index=series.index), pd.Series(deriv2,
index=series.index)
def causal_savgol(self, series, window=25, polyorder=3):
result = []
@@ -1478,7 +1547,6 @@ class Zeus_8_3_2_B_4_2(IStrategy):
result.append(poly(window - 1))
return pd.Series(result, index=series.index)
def get_stake_from_drawdown(self, pct: float, base_stake: float = 100.0, step: float = 0.04, growth: float = 1.15,
max_stake: float = 1000.0) -> float:
"""
@@ -1498,7 +1566,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
stake = base_stake * (growth ** level)
return min(stake, max_stake)
def compute_adaptive_paliers(self, max_drawdown: float = 0.65, first_steps: list[float] = [0.01, 0.01, 0.015, 0.02], growth: float = 1.2) -> list[float]:
def compute_adaptive_paliers(self, max_drawdown: float = 0.65, first_steps: list[float] = [0.01, 0.01, 0.015, 0.02],
growth: float = 1.2) -> list[float]:
"""
Génère une liste de drawdowns négatifs avec des paliers plus rapprochés au début.
@@ -1632,7 +1701,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
#
# return result
def polynomial_forecast(self, series: pd.Series, window: int = 20, degree: int = 2, steps = [12, 24, 36]):
def polynomial_forecast(self, series: pd.Series, window: int = 20, degree: int = 2, steps=[12, 24, 36]):
"""
Calcule une régression polynomiale sur les `window` dernières valeurs de la série,
puis prédit les `n_future` prochaines valeurs.
@@ -1661,14 +1730,14 @@ class Zeus_8_3_2_B_4_2(IStrategy):
current = series.iloc[-1]
count = 0
for future_step in steps: #range(1, n_future + 1)
for future_step in steps: # range(1, n_future + 1)
future_x = window - 1 + future_step
prediction = poly(future_x)
# series.loc[series.index[future_x], f'poly_pred_t+{future_step}'] = prediction
# Afficher les prédictions
# print(f"{current} → t+{future_step}: x={future_x}, y={prediction:.2f}")
if prediction > 0: #current:
if prediction > 0: # current:
count += 1
return poly, x_future, y_future, count
@@ -1750,7 +1819,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# return False
if max_pair != '':
#if this_pair_count >= limit:
# if this_pair_count >= limit:
# Si une autre paire non-BTC a aussi >3 trades, blocage
# if max_pair == pair:
# print(f"{pair} Cette paire {max_pair} est la seule avec >=3 / {max_nb_trades}")

View File

@@ -1,116 +1,248 @@
BACKTESTING REPORT
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ BTC/USDT │ 1130.9 339.50311.32 1 day, 4:02:00 │ 112 0 1 99.1
ETH/USDT │ 351.01 62.255 2.08 4 days, 5:04:00 │ 35 0 0 100 │
DOGE/USDT │ 45 1.4 59.878 2.0 │ 1 day, 18:01:00 │ 44 0 1 97.8
XRP/USDT │ 33 │ 1.21 51.964 │ 1.73 │ 2 days, 2:35:00 │ 33 0 0 100
SOL/USDT │ 300.71 25.8550.862 days, 16:38:00 │ 29 0 1 96.7
│ TOTAL │ 256 │ 1.02 539.45517.98 │ 1 day, 23:40:00 │ 253 0 3 98.8
└───────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┘
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ BTC/USDT │ 3521.01158.045 38.6 │ 1 day, 8:33:00 │ 351 0 1 99.7
DOGE/USDT │ 1102.19748.87324.963 days, 4:05:00 │ 110 0 0 100 │
XRP/USDT │ 106 │ 1.75332.75711.092 days, 3:54:00 │ 106 0 0 100
SOL/USDT │ 91 │ 1.26213.864 │ 7.13 │ 3 days, 8:55:00 │ 90 0 1 98.9
ETH/USDT │ 781.19182.3546.083 days, 1:24:00 │ 78 0 0 100
│ TOTAL │ 737 │ 1.342635.89287.862 days, 4:08:00 │ 735 0 2 99.7
└───────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┘
LEFT OPEN TRADES REPORT
┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
BTC/USDT │ 1 │ -0.27 │ -0.560 │ -0.0218:15:00 │ 0 0 1 0 │
SOL/USDT │ 1 │ -13.37 │ -21.520 │ -0.72 │ 51 days, 14:10:00 │ 0 0 1 0 │
DOGE/USDT1 -7.2 │ -29.206 │ -0.97 │ 51 days, 21:20:00 │ 0 0 1 0 │
│ TOTAL │ 3 │ -6.95 │ -51.286 │ -1.71 │ 34 days, 17:55:00 │ 0 0 3 0 │
└───────────┴────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘
┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ BTC/USDT │ 1 │ -0.28 │ -0.280 │ -0.01 1:35:00 │ 0 0 1 0 │
│ SOL/USDT │ 1 │ -17.25 │ -69.281 │ -2.31 │ 109 days, 8:10:00 │ 0 0 1 0 │
TOTAL2 │ -8.76 │ -69.561 │ -2.32 │ 54 days, 16:52:00 │ 0 0 2 0 │
└──────────┴────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘
ENTER TAG STATS
┏━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Enter Tag ┃ Entries ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ smth │ 256 │ 1.02 539.45517.98 │ 1 day, 23:40:00 │ 253 0 3 98.8
│ TOTAL │ 256 │ 1.02 539.45517.98 │ 1 day, 23:40:00 │ 253 0 3 98.8
│ smth │ 737 │ 1.342635.89287.862 days, 4:08:00 │ 735 0 2 99.7
│ TOTAL │ 737 │ 1.342635.89287.862 days, 4:08:00 │ 735 0 2 99.7
└───────────┴─────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┘
EXIT REASON STATS
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
Drv_1 │ 143 1.16 │ 143.8154.79 │ 4:26:00 │ 143 0 0 100 │
Drv_261 │ 1.0 │ 114.8933.83 │ 18:19:00 │ 61 0 0 100 │
Drv_9 22.65 78.8102.637 days, 7:22:00 │ 2 0 0 100 │
Drv_327 │ 0.91 73.7532.46 │ 1 day, 21:31:00 │ 27 0 0 100 │
Drv_74 │ 1.59 59.6741.99 │ 18 days, 2:38:00 │ 4 0 0 100 │
Drv_4 9 1.4 56.857 1.9 3 days, 17:07:00 │ 9 0 0 100 │
Drv_5 2 │ 1.5826.858 0.9 1 day, 6:22:00 │ 2 0 0 100 │
Drv_13 1 │ 1.0418.124 0.6 │ 122 days, 13:40:00 │ 1 0 0 100 │
Drv_6 4 │ 0.6217.956 0.6 8 days, 15:32:00 │ 4 0 0 100 │
force_exit 3 │ -6.95-51.286-1.7134 days, 17:55:00 │ 0 0 3 0 │
TOTAL2561.02539.45517.98 │ 1 day, 23:40:00 │ 253 0 3 98.8
└─────────────┴───────┴──────────────┴─────────────────┴──────────────┴────────────────────┴────────────────────────┘
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
Drv24_BTC/USDT_9 │ 6 │ 3.11270.369 │ 9.01 │ 22 days, 4:49:00 │ 6 0 0 100 │
Drv24_DOGE/USDT_14 1 │ 13.03260.851 8.7 │ 110 days, 4:15:00 │ 1 0 0 100 │
Drv3_BTC/USDT_11910.92181.8436.06 6:45:00 │ 191 0 0 100 │
Drv3_BTC/USDT_289 │ 0.86166.6545.56 │ 21:15:00 │ 89 0 0 100 │
Drv13_BTC/USDT_68 │ 1.71116.7133.89 │ 6 days, 18:23:00 │ 8 0 0 100 │
Drv13_BTC/USDT_511 │ 1.55116.2743.882 days, 23:30:00 │ 11 0 0 100 │
Drv3_XRP/USDT_230 │ 1.6793.4293.112 days, 8:33:00 │ 30 0 0 100 │
│ Drv3_DOGE/USDT_1 │ 60 │ 1.987.5552.92 │ 1:50:00 │ 60 0 0 100 │
Drv3_DOGE/USDT_314 │ 2.1483.1612.776 days, 12:10:00 │ 14 0 0 100 │
Drv3_XRP/USDT_156 │ 1.81 82.770 2.76 5:13:00 │ 56 0 0 100 │
Drv3_BTC/USDT_3 270.86 81.397 2.71 │ 1 day, 6:53:00 │ 27 0 0 100
│ Drv24_DOGE/USDT_8 │ 1 │ 8.9 │ 78.446 │ 2.61 │ 40 days, 5:05:00 │ 1 0 0 100 │
│ Drv24_SOL/USDT_9 │ 1 │ 7.72 │ 74.152 │ 2.47 │ 83 days, 18:30:00 │ 1 0 0 100 │
│ Drv13_BTC/USDT_4 │ 14 │ 1.06 │ 71.372 │ 2.38 │ 2 days, 15:36:00 │ 14 0 0 100 │
│ Drv3_DOGE/USDT_2 │ 24 │ 1.79 │ 70.935 │ 2.36 │ 5:17:00 │ 24 0 0 100 │
│ Drv13_DOGE/USDT_6 │ 3 │ 3.92 │ 68.603 │ 2.29 │ 7 days, 19:27:00 │ 3 0 0 100 │
│ Drv24_BTC/USDT_11 │ 1 │ 3.5 │ 66.946 │ 2.23 │ 25 days, 6:00:00 │ 1 0 0 100 │
│ Drv24_XRP/USDT_8 │ 1 │ 6.67 │ 66.930 │ 2.23 │ 121 days, 8:00:00 │ 1 0 0 100 │
│ Drv13_ETH/USDT_6 │ 2 │ 5.02 │ 63.737 │ 2.12 │ 88 days, 5:50:00 │ 2 0 0 100 │
│ Drv24_BTC/USDT_7 │ 3 │ 2.1 │ 61.808 │ 2.06 │ 7 days, 12:20:00 │ 3 0 0 100 │
│ Drv3_SOL/USDT_1 │ 56 │ 1.37 │ 61.038 │ 2.03 │ 3:19:00 │ 56 0 0 100 │
│ Drv3_XRP/USDT_3 │ 16 │ 1.37 │ 60.439 │ 2.01 │ 1 day, 0:28:00 │ 16 0 0 100 │
│ Drv3_SOL/USDT_3 │ 16 │ 1.32 │ 55.885 │ 1.86 │ 1 day, 0:05:00 │ 16 0 0 100 │
│ Drv3_ETH/USDT_3 │ 13 │ 1.36 │ 47.989 │ 1.6 │ 2 days, 2:17:00 │ 13 0 0 100 │
│ Drv13_DOGE/USDT_5 │ 3 │ 2.73 │ 39.290 │ 1.31 │ 2 days, 22:28:00 │ 3 0 0 100 │
│ Drv24_DOGE/USDT_7 │ 1 │ 5.25 │ 37.276 │ 1.24 │ 7 days, 8:30:00 │ 1 0 0 100 │
│ Drv24_SOL/USDT_8 │ 1 │ 4.08 │ 37.269 │ 1.24 │ 27 days, 17:55:00 │ 1 0 0 100 │
│ Drv3_ETH/USDT_1 │ 50 │ 0.93 │ 35.934 │ 1.2 │ 4:02:00 │ 50 0 0 100 │
│ Drv13_SOL/USDT_4 │ 2 │ 3.63 │ 29.424 │ 0.98 │ 28 days, 21:55:00 │ 2 0 0 100 │
│ Drv3_ETH/USDT_2 │ 12 │ 1.41 │ 28.425 │ 0.95 │ 1 day, 10:20:00 │ 12 0 0 100 │
│ Drv3_SOL/USDT_2 │ 14 │ 1.08 │ 25.377 │ 0.85 │ 7:22:00 │ 14 0 0 100 │
│ Drv24_BTC/USDT_8 │ 1 │ 1.69 │ 24.949 │ 0.83 │ 5 days, 1:45:00 │ 1 0 0 100 │
│ Drv13_DOGE/USDT_4 │ 3 │ 2.05 │ 22.757 │ 0.76 │ 19 days, 6:08:00 │ 3 0 0 100 │
│ Drv13_XRP/USDT_6 │ 1 │ 2.85 │ 17.834 │ 0.59 │ 2 days, 21:10:00 │ 1 0 0 100 │
│ Drv13_XRP/USDT_5 │ 1 │ 1.44 │ 6.467 │ 0.22 │ 4 days, 13:00:00 │ 1 0 0 100 │
│ Drv13_ETH/USDT_4 │ 1 │ 1.81 │ 6.269 │ 0.21 │ 9 days, 6:30:00 │ 1 0 0 100 │
│ Drv13_XRP/USDT_4 │ 1 │ 1.38 │ 4.889 │ 0.16 │ 1 day, 5:55:00 │ 1 0 0 100 │
│ force_exit │ 2 │ -8.76 │ -69.561 │ -2.32 │ 54 days, 16:52:00 │ 0 0 2 0 │
│ TOTAL │ 737 │ 1.34 │ 2635.892 │ 87.86 │ 2 days, 4:08:00 │ 735 0 2 99.7 │
└────────────────────┴───────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘
MIXED TAG STATS
┏━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Enter Tag ┃ Exit Reason ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
('smth', 'Drv_1') │ │ 143 │ 1.16 │ 143.8154.79 │ 4:26:00 │ 143 0 0 100 │
('smth', 'Drv_2') │ │ 61 │ 1.0 │ 114.8933.83 │ 18:19:00 │ 61 0 0 100 │
('smth', 'Drv_9') │ │ 22.65 78.8102.637 days, 7:22:00 │ 2 0 0 100 │
('smth', 'Drv_3') │ │ 27 │ 0.91 73.7532.46 │ 1 day, 21:31:00 │ 27 0 0 100 │
('smth', 'Drv_7') │ │ 4 │ 1.59 59.6741.99 │ 18 days, 2:38:00 │ 4 0 0 100 │
('smth', 'Drv_4') │ │ 9 1.4 56.857 1.9 3 days, 17:07:00 │ 9 0 0 100 │
('smth', 'Drv_5') │ │ 2 │ 1.5826.858 0.9 │ 1 day, 6:22:00 │ 2 0 0 100 │
('smth', 'Drv_13') │ │ 1 │ 1.0418.124 0.6 │ 122 days, 13:40:00 │ 1 0 0 100 │
('smth', 'Drv_6') │ │ 4 │ 0.6217.956 0.6 8 days, 15:32:00 │ 4 0 0 100 │
│ ('smth', 'force_exit') │ │ 3-6.95-51.286-1.7134 days, 17:55:00 │ 0 0 3 0 │
TOTAL │ │ 2561.02539.45517.98 │ 1 day, 23:40:00 │ 253 0 3 98.8
└────────────────────────┴─────────────┴────────┴──────────────┴─────────────────┴──────────────┴────────────────────┴────────────────────────┘
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ ('smth', 'Drv24_BTC/USDT_9') │ │ 6 │ 3.11270.369 │ 9.01 │ 22 days, 4:49:00 │ 6 0 0 100 │
│ ('smth', 'Drv24_DOGE/USDT_14') │ │ 1 │ 13.03260.851 8.7 │ 110 days, 4:15:00 │ 1 0 0 100 │
│ ('smth', 'Drv3_BTC/USDT_1') │ │ 1910.92181.8436.06 6:45:00 │ 191 0 0 100 │
│ ('smth', 'Drv3_BTC/USDT_2') │ │ 89 │ 0.86166.6545.56 │ 21:15:00 │ 89 0 0 100 │
│ ('smth', 'Drv13_BTC/USDT_6') │ │ 8 │ 1.71116.7133.89 │ 6 days, 18:23:00 │ 8 0 0 100 │
│ ('smth', 'Drv13_BTC/USDT_5') │ │ 11 │ 1.55116.2743.882 days, 23:30:00 │ 11 0 0 100 │
│ ('smth', 'Drv3_XRP/USDT_2') │ │ 30 │ 1.6793.4293.11 │ 2 days, 8:33:00 │ 30 0 0 100 │
│ ('smth', 'Drv3_DOGE/USDT_1') │ │ 60 1.987.5552.92 │ 1:50:00 │ 60 0 0 100 │
│ ('smth', 'Drv3_DOGE/USDT_3') │ │ 14 │ 2.1483.1612.776 days, 12:10:00 │ 14 0 0 100 │
('smth', 'Drv3_XRP/USDT_1') │ │ 56 1.81 82.770 2.76 5:13:00 │ 56 0 0 100 │
('smth', 'Drv3_BTC/USDT_3') │ │ 270.86 81.397 2.71 │ 1 day, 6:53:00 │ 27 0 0 100
│ ('smth', 'Drv24_DOGE/USDT_8') │ │ 1 │ 8.9 │ 78.446 │ 2.61 │ 40 days, 5:05:00 │ 1 0 0 100 │
│ ('smth', 'Drv24_SOL/USDT_9') │ │ 1 │ 7.72 │ 74.152 │ 2.47 │ 83 days, 18:30:00 │ 1 0 0 100 │
│ ('smth', 'Drv13_BTC/USDT_4') │ │ 14 │ 1.06 │ 71.372 │ 2.38 │ 2 days, 15:36:00 │ 14 0 0 100 │
│ ('smth', 'Drv3_DOGE/USDT_2') │ │ 24 │ 1.79 │ 70.935 │ 2.36 │ 5:17:00 │ 24 0 0 100 │
│ ('smth', 'Drv13_DOGE/USDT_6') │ │ 3 │ 3.92 │ 68.603 │ 2.29 │ 7 days, 19:27:00 │ 3 0 0 100 │
│ ('smth', 'Drv24_BTC/USDT_11') │ │ 1 │ 3.5 │ 66.946 │ 2.23 │ 25 days, 6:00:00 │ 1 0 0 100 │
│ ('smth', 'Drv24_XRP/USDT_8') │ │ 1 │ 6.67 │ 66.930 │ 2.23 │ 121 days, 8:00:00 │ 1 0 0 100 │
│ ('smth', 'Drv13_ETH/USDT_6') │ │ 2 │ 5.02 │ 63.737 │ 2.12 │ 88 days, 5:50:00 │ 2 0 0 100 │
│ ('smth', 'Drv24_BTC/USDT_7') │ │ 3 │ 2.1 │ 61.808 │ 2.06 │ 7 days, 12:20:00 │ 3 0 0 100 │
│ ('smth', 'Drv3_SOL/USDT_1') │ │ 56 │ 1.37 │ 61.038 │ 2.03 │ 3:19:00 │ 56 0 0 100 │
│ ('smth', 'Drv3_XRP/USDT_3') │ │ 16 │ 1.37 │ 60.439 │ 2.01 │ 1 day, 0:28:00 │ 16 0 0 100 │
│ ('smth', 'Drv3_SOL/USDT_3') │ │ 16 │ 1.32 │ 55.885 │ 1.86 │ 1 day, 0:05:00 │ 16 0 0 100 │
│ ('smth', 'Drv3_ETH/USDT_3') │ │ 13 │ 1.36 │ 47.989 │ 1.6 │ 2 days, 2:17:00 │ 13 0 0 100 │
│ ('smth', 'Drv13_DOGE/USDT_5') │ │ 3 │ 2.73 │ 39.290 │ 1.31 │ 2 days, 22:28:00 │ 3 0 0 100 │
│ ('smth', 'Drv24_DOGE/USDT_7') │ │ 1 │ 5.25 │ 37.276 │ 1.24 │ 7 days, 8:30:00 │ 1 0 0 100 │
│ ('smth', 'Drv24_SOL/USDT_8') │ │ 1 │ 4.08 │ 37.269 │ 1.24 │ 27 days, 17:55:00 │ 1 0 0 100 │
│ ('smth', 'Drv3_ETH/USDT_1') │ │ 50 │ 0.93 │ 35.934 │ 1.2 │ 4:02:00 │ 50 0 0 100 │
│ ('smth', 'Drv13_SOL/USDT_4') │ │ 2 │ 3.63 │ 29.424 │ 0.98 │ 28 days, 21:55:00 │ 2 0 0 100 │
│ ('smth', 'Drv3_ETH/USDT_2') │ │ 12 │ 1.41 │ 28.425 │ 0.95 │ 1 day, 10:20:00 │ 12 0 0 100 │
│ ('smth', 'Drv3_SOL/USDT_2') │ │ 14 │ 1.08 │ 25.377 │ 0.85 │ 7:22:00 │ 14 0 0 100 │
│ ('smth', 'Drv24_BTC/USDT_8') │ │ 1 │ 1.69 │ 24.949 │ 0.83 │ 5 days, 1:45:00 │ 1 0 0 100 │
│ ('smth', 'Drv13_DOGE/USDT_4') │ │ 3 │ 2.05 │ 22.757 │ 0.76 │ 19 days, 6:08:00 │ 3 0 0 100 │
│ ('smth', 'Drv13_XRP/USDT_6') │ │ 1 │ 2.85 │ 17.834 │ 0.59 │ 2 days, 21:10:00 │ 1 0 0 100 │
│ ('smth', 'Drv13_XRP/USDT_5') │ │ 1 │ 1.44 │ 6.467 │ 0.22 │ 4 days, 13:00:00 │ 1 0 0 100 │
│ ('smth', 'Drv13_ETH/USDT_4') │ │ 1 │ 1.81 │ 6.269 │ 0.21 │ 9 days, 6:30:00 │ 1 0 0 100 │
│ ('smth', 'Drv13_XRP/USDT_4') │ │ 1 │ 1.38 │ 4.889 │ 0.16 │ 1 day, 5:55:00 │ 1 0 0 100 │
│ ('smth', 'force_exit') │ │ 2 │ -8.76 │ -69.561 │ -2.32 │ 54 days, 16:52:00 │ 0 0 2 0 │
│ TOTAL │ │ 737 │ 1.34 │ 2635.892 │ 87.86 │ 2 days, 4:08:00 │ 735 0 2 99.7 │
└────────────────────────────────┴─────────────┴────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘
WEEK BREAKDOWN
┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━━┓
┃ Week ┃ Tot Profit USDT ┃ Wins ┃ Draws ┃ Losses ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━╇━━━━━━━━┩
│ 01/01/2024 │ 14.32 │ 16 │ 0 │ 0 │
│ 08/01/2024 │ 23.915 │ 18 │ 0 │ 0 │
│ 15/01/2024 │ 15.928 │ 6 │ 0 │ 0 │
│ 22/01/2024 │ 0 │ 0 │ 0 │ 0 │
│ 29/01/2024 │ 0 │ 0 │ 0 │ 0 │
│ 05/02/2024 │ 76.666 │ 6 │ 0 │ 0 │
│ 12/02/2024 │ 11.758 │ 12 │ 0 │ 0 │
│ 19/02/2024 │ 6.07 │ 6 │ 0 │ 0 │
│ 26/02/2024 │ 10.973 │ 6 │ 0 │ 0 │
│ 04/03/2024 │ 245.287 │ 98 │ 0 │ 0 │
│ 11/03/2024 │ 64.769 │ 19 │ 0 │ 0 │
│ 18/03/2024 │ 82.933 │ 19 │ 0 │ 0 │
│ 25/03/2024 │ 89.718 │ 10 │ 0 │ 0 │
│ 01/04/2024 │ 7.623 │ 6 │ 0 │ 0 │
│ 08/04/2024 │ 21.331 │ 8 │ 0 │ 0 │
│ 15/04/2024 │ 8.295 │ 3 │ 0 │ 0 │
│ 22/04/2024 │ 0 │ 0 │ 0 │ 0 │
│ 29/04/2024 │ 0 │ 0 │ 0 │ 0 │
│ 06/05/2024 │ 0 │ 0 │ 0 │ 0 │
│ 13/05/2024 │ 0 │ 0 │ 0 │ 0 │
│ 20/05/2024 │ 62.489 │ 7 │ 0 │ 0 │
│ 27/05/2024 │ 41.937 │ 3 │ 0 │ 0 │
│ 03/06/2024 │ 4.991 │ 2 │ 0 │ 0 │
│ 10/06/2024 │ 2.395 │ 4 │ 0 │ 0 │
│ 17/06/2024 │ 6.619 │ 1 │ 0 │ 0 │
│ 24/06/2024 │ 0 │ 0 │ 0 │ 0 │
│ 01/07/2024 │ 0 │ 0 │ 0 │ 0 │
│ 08/07/2024 │ 0 │ 0 │ 0 │ 0 │
│ 15/07/2024 │ 135.546 │ 31 │ 0 │ 0 │
│ 22/07/2024 │ 77.355 │ 38 │ 0 │ 0 │
│ 29/07/2024 │ 51.813 │ 23 │ 0 │ 0 │
│ 05/08/2024 │ 7.914 │ 2 │ 0 │ 0 │
│ 12/08/2024 │ 0 │ 0 │ 0 │ 0 │
│ 19/08/2024 │ 0 │ 0 │ 0 │ 0 │
│ 26/08/2024 │ 68.158 │ 3 │ 0 │ 0 │
│ 02/09/2024 │ 0 │ 0 │ 0 │ 0 │
│ 09/09/2024 │ 0 │ 0 │ 0 │ 0 │
│ 16/09/2024 │ 33.665 │ 1 │ 0 │ 0 │
│ 23/09/2024 │ 22.299 │ 10 │ 0 │ 0 │
│ 30/09/2024 │ 7.154 │ 7 │ 0 │ 0 │
│ 07/10/2024 │ 0 │ 0 │ 0 │ 0 │
│ 14/10/2024 │ 13.087 │ 2 │ 0 │ 0 │
│ 21/10/2024 │ 85.043 │ 9 │ 0 │ 0 │
│ 28/10/2024 │ 10.931 │ 7 │ 0 │ 0 │
│ 04/11/2024 │ 13.173 │ 9 │ 0 │ 0 │
│ 11/11/2024 │ 159.164 │ 66 │ 0 │ 0 │
│ 18/11/2024 │ 73.484 │ 28 │ 0 │ 0 │
│ 25/11/2024 │ 125.227 │ 50 │ 0 │ 0 │
│ 02/12/2024 │ 47.14 │ 10 │ 0 │ 0 │
│ 09/12/2024 │ 88.831 │ 34 │ 0 │ 0 │
│ 16/12/2024 │ 40.391 │ 17 │ 0 │ 0 │
│ 23/12/2024 │ 1.685 │ 3 │ 0 │ 0 │
│ 30/12/2024 │ 0 │ 0 │ 0 │ 0 │
│ 06/01/2025 │ 50.967 │ 1 │ 0 │ 0 │
│ 13/01/2025 │ 0 │ 0 │ 0 │ 0 │
│ 20/01/2025 │ 204.602 │ 35 │ 0 │ 0 │
│ 27/01/2025 │ 58.166 │ 31 │ 0 │ 0 │
│ 03/02/2025 │ 34.299 │ 5 │ 0 │ 0 │
│ 10/02/2025 │ 0 │ 0 │ 0 │ 0 │
│ 17/02/2025 │ 0 │ 0 │ 0 │ 0 │
│ 24/02/2025 │ 8.779 │ 1 │ 0 │ 0 │
│ 03/03/2025 │ 54.377 │ 2 │ 0 │ 0 │
│ 10/03/2025 │ 45.144 │ 10 │ 0 │ 0 │
│ 17/03/2025 │ 38.597 │ 4 │ 0 │ 0 │
│ 24/03/2025 │ 11.301 │ 8 │ 0 │ 0 │
│ 31/03/2025 │ 0.936 │ 1 │ 0 │ 0 │
│ 07/04/2025 │ 12.099 │ 1 │ 0 │ 0 │
│ 14/04/2025 │ 28.46 │ 4 │ 0 │ 0 │
│ 21/04/2025 │ 10.96 │ 7 │ 0 │ 0 │
│ 28/04/2025 │ 8.521 │ 8 │ 0 │ 0 │
│ 05/05/2025 │ 3.741 │ 4 │ 0 │ 0 │
│ 12/05/2025 │ 270.52 │ 10 │ 0 │ 0 │
│ 19/05/2025 │ -65.655 │ 3 │ 0 │ 2 │
└────────────┴─────────────────┴──────┴───────┴────────┘
SUMMARY METRICS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ Metric ┃ Value ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩
│ Backtesting from │ 2025-01-01 00:00:00 │
│ Backtesting to │ 2025-07-14 00:00:00 │
│ Backtesting from │ 2024-01-01 00:00:00 │
│ Backtesting to │ 2025-05-14 00:00:00 │
│ Trading Mode │ Spot │
│ Max open trades │ 5 │
│ │ │
│ Total/Daily Avg Trades │ 256 / 1.32
│ Total/Daily Avg Trades │ 737 / 1.48
│ Starting balance │ 3000 USDT │
│ Final balance │ 3539.455 USDT │
│ Absolute profit │ 539.455 USDT
│ Total profit % │ 17.98% │
│ CAGR % │ 36.49% │
│ Sortino │ 4.39
│ Sharpe │ 9.28
│ Calmar │ 125.33
SQN 5.88
Profit factor 11.52
Expectancy (Ratio) │ 2.11 (0.12)
│ Avg. daily profit %0.09%
Avg. stake amount │ 197.758 USDT
│ Total trade volume │ 101995.528 USDT │
│ Final balance │ 5635.892 USDT │
│ Absolute profit │ 2635.892 USDT │
│ Total profit % │ 87.86% │
│ CAGR % │ 58.60% │
│ Sortino │ 2.93
│ Sharpe │ 8.04
│ Calmar │ 275.91
Profit factor38.89
Expectancy (Ratio)3.58 (0.10)
Avg. daily profit % │ 0.18%
│ Avg. stake amount 199.501 USDT
Total trade volume │ 147032.417 USDT │
│ │ │
│ Best Pair │ BTC/USDT 11.32% │
│ Worst Pair │ SOL/USDT 0.86% │
│ Best trade │ DOGE/USDT 8.10%
│ Worst trade │ SOL/USDT -13.37% │
│ Best day │ 66.865 USDT
│ Worst day │ -50.726 USDT │
│ Days win/draw/lose │ 67 / 127 / 1
│ Avg. Duration Winners │ 1 day, 14:21:00 │
│ Avg. Duration Loser │ 34 days, 17:55:00 │
│ Max Consecutive Wins / Loss │ 253 / 3
│ Best Pair │ BTC/USDT 38.60% │
│ Worst Pair │ ETH/USDT 6.08% │
│ Best trade │ DOGE/USDT 13.03%
│ Worst trade │ SOL/USDT -17.25% │
│ Best day │ 262.294 USDT │
│ Worst day │ -69.561 USDT │
│ Days win/draw/lose │ 203 / 296 / 1 │
│ Avg. Duration Winners │ 2 days, 0:42:00 │
│ Avg. Duration Loser │ 54 days, 16:52:00 │
│ Max Consecutive Wins / Loss │ 735 / 2
│ Rejected Entry signals │ 0 │
│ Entry/Exit Timeouts │ 0 / 0 │
│ │ │
│ Min balance │ 3000.41 USDT
│ Max balance │ 3590.74 USDT
│ Max % of account underwater │ 1.41% │
│ Absolute Drawdown (Account) │ 1.41% │
│ Absolute Drawdown │ 50.726 USDT │
│ Drawdown high │ 590.18 USDT
│ Drawdown low │ 539.455 USDT
│ Drawdown Start │ 2025-07-07 14:15:00 │
│ Drawdown End │ 2025-07-14 00:00:00 │
│ Market change │ -3.39%
│ Min balance │ 3000.485 USDT │
│ Max balance │ 5705.454 USDT │
│ Max % of account underwater │ 1.22% │
│ Absolute Drawdown (Account) │ 1.22% │
│ Absolute Drawdown │ 69.561 USDT │
│ Drawdown high │ 2705.454 USDT │
│ Drawdown low │ 2635.892 USDT │
│ Drawdown Start │ 2025-05-13 21:05:00 │
│ Drawdown End │ 2025-05-14 00:00:00 │
│ Market change │ 143.04%
└─────────────────────────────┴─────────────────────┘
Backtested 2025-01-01 00:00:00 -> 2025-07-14 00:00:00 | Max open trades : 5
Backtested 2024-01-01 00:00:00 -> 2025-05-14 00:00:00 | Max open trades : 5
STRATEGY SUMMARY
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
│ Zeus_8_3_2_B_4_2 │ 256 │ 1.02 539.45517.98 │ 1 day, 23:40:00 │ 253 0 3 98.8 │ 50.726 USDT 1.41% │
│ Zeus_8_3_2_B_4_2 │ 737 │ 1.342635.89287.862 days, 4:08:00 │ 735 0 2 99.7 │ 69.561 USDT 1.22% │
└──────────────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┴────────────────────┘