Calcul 20250101-20250714 954.664 233.944

This commit is contained in:
Jérôme Delacotte
2025-07-19 12:36:02 +02:00
parent 2f66ab3be7
commit 088958952e

View File

@@ -190,8 +190,11 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# Somme Mises 50 100 150 250 350 500 700 950 1300 1750 2350 3150 4200 # Somme Mises 50 100 150 250 350 500 700 950 1300 1750 2350 3150 4200
# baisse 1 2 3 5 7 10 14 19 26 35 47 63 84 # baisse 1 2 3 5 7 10 14 19 26 35 47 63 84
factors = [1, 1.1, 1.25, 1.5, 2.0, 3] # factors = [1, 1.1, 1.25, 1.5, 2.0, 3]
thresholds = [2, 5, 10, 20, 30, 50] # thresholds = [2, 5, 10, 20, 30, 50]
factors = [1, 1.25, 1.5, 2.0]
thresholds = [2, 5, 10, 20]
trades = list() trades = list()
max_profit_pairs = {} max_profit_pairs = {}
@@ -523,6 +526,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# val1h = self.getProbaHausse1h(last_candle) # val1h = self.getProbaHausse1h(last_candle)
val = self.getProbaHausse(last_candle) val = self.getProbaHausse(last_candle)
pct60 = round(100 * self.getPct60D(pair, last_candle), 2)
self.printLog( self.printLog(
f"| {date:<16} | {action:<10} | {pair[0:3]:<3} | {trade_type or '-':<18} |{rate or '-':>9}| {dispo or '-':>6} " 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"| {profit or '-':>8} | {pct_max or '-':>6} | {round(self.pairs[pair]['max_touch'], 2) or '-':>11} | {last_lost or '-':>12} "
@@ -531,7 +536,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# 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_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(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}|" f"{round(val, 1) or '-' :>6}|"
f"{round(last_candle['mid_smooth_12'], 4) or '-' :>7}|{round(last_candle['mid_smooth_12_deriv1'], 4) or '-' :>7}|{dist_max:>7}" f"{round(last_candle['mid_smooth_12'], 4) or '-' :>7}|{round(last_candle['mid_smooth_12_deriv1'], 4) or '-' :>7}|{dist_max:>7}|{pct60:>7}"
) )
def printLineLog(self): def printLineLog(self):
@@ -726,8 +731,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# =============================== # ===============================
# lissage des valeurs horaires # lissage des valeurs horaires
dataframe['mid_smooth_1h'] = dataframe['mid'].rolling(window=6).mean() dataframe['mid_smooth_1h'] = dataframe['mid'].rolling(window=6).mean()
dataframe["mid_smooth_1h_deriv1"] = 100 * dataframe["mid_smooth_1h"].diff() / dataframe['mid_smooth_1h'] dataframe["mid_smooth_1h_deriv1"] = 100 * dataframe["mid_smooth_1h"].diff().rolling(window=6).mean() / dataframe['mid_smooth_1h']
dataframe["mid_smooth_1h_deriv2"] = 10 * dataframe["mid_smooth_1h_deriv1"].diff() dataframe["mid_smooth_1h_deriv2"] = 10 * dataframe["mid_smooth_1h_deriv1"].diff().rolling(window=6).mean()
# Compter les baisses / hausses consécutives # Compter les baisses / hausses consécutives
self.calculateDownAndUp(dataframe, limit=0.0001) self.calculateDownAndUp(dataframe, limit=0.0001)
@@ -855,12 +860,18 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe.loc[ dataframe.loc[
( (
# (dataframe['mid_smooth_1h_deriv1'].shift(2) >= dataframe['mid_smooth_1h_deriv1'].shift(1)) # (dataframe['deriv2_1h'].shift(2) >= dataframe['deriv2_1h'].shift(1))
# & (dataframe['mid_smooth_1h_deriv1'].shift(1) <= dataframe['mid_smooth_1h_deriv1']) # & (dataframe['deriv2_1h'].shift(1) <= dataframe['deriv2_1h'])
# (dataframe['deriv1_1h'] >= -0.01)
(dataframe['mid_smooth_1h_deriv1'].shift(2) >= dataframe['mid_smooth_1h_deriv1'].shift(1)) # & (dataframe['deriv2_1h'] >= -0.00)
& (dataframe['mid_smooth_1h_deriv1'].shift(1) <= dataframe['mid_smooth_1h_deriv1']) (dataframe['mid_smooth_3_deriv1'].shift(2) >= dataframe['mid_smooth_3_deriv1'].shift(1))
& (dataframe['close'] < dataframe['bb_middleband']) & (dataframe['mid_smooth_3_deriv1'].shift(1) <= dataframe['mid_smooth_3_deriv1'])
#
#
# (dataframe['mid_smooth_1h_deriv1'] >= 0)
# & (dataframe['mid_smooth_1h_deriv1'] >= 0)
# & (dataframe['mid_smooth_1h_deriv1'].shift(1) <= 0)
# & (dataframe['mid_smooth_1h_deriv1'] >= dataframe['mid_smooth_1h_deriv1'].shift(1))
), ['enter_long', 'enter_tag']] = (1, 'smth') ), ['enter_long', 'enter_tag']] = (1, 'smth')
dataframe['can_sell'] = np.where(((dataframe['mid_smooth_1h_deriv1'].shift(2) <= dataframe['mid_smooth_1h_deriv1'].shift(1))\ dataframe['can_sell'] = np.where(((dataframe['mid_smooth_1h_deriv1'].shift(2) <= dataframe['mid_smooth_1h_deriv1'].shift(1))\
@@ -872,6 +883,9 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe['test'] = np.where(dataframe['enter_long'] == 1, dataframe['close'] * 1.01, np.nan) 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) dataframe['perte_02'] = np.where((dataframe['hapercent3'] * 100 < -0.2), dataframe['close'], np.nan)
dataframe['mid_smooth_1h_deriv2_inv'] = np.where((dataframe['mid_smooth_1h_deriv2'].shift(2) >= dataframe['mid_smooth_1h_deriv2'].shift(1))
& (dataframe['mid_smooth_1h_deriv2'].shift(1) <= dataframe['mid_smooth_1h_deriv2']), dataframe['close'], np.nan)
# self.paliers = self.get_dca_stakes() # self.paliers = self.get_dca_stakes()
# if self.dp.runmode.value in ('backtest'): # if self.dp.runmode.value in ('backtest'):
@@ -1017,12 +1031,14 @@ class Zeus_8_3_2_B_4_2(IStrategy):
if pair in ('BTC/USDT', 'BTC/USDC') or count_of_buys <= 2: if pair in ('BTC/USDT', 'BTC/USDC') or count_of_buys <= 2:
lim = - pct - (count_of_buys * 0.001) lim = - pct - (count_of_buys * 0.001)
#lim = self.getLimitBuy(pair, last_candle, pct)
# lim = - (0.012 * (1 + round(count_of_buys / 5)) + 0.001 * (count_of_buys - 1)) # 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: else:
pct = 0.05 pct = 0.05
lim = - pct - (count_of_buys * 0.001) lim = - pct - (count_of_buys * 0.001)
#lim = self.getLimitBuy(pair, last_candle, pct)
if (len(dataframe) < 1): if (len(dataframe) < 1):
print("skip dataframe") print("skip dataframe")
@@ -1255,6 +1271,23 @@ class Zeus_8_3_2_B_4_2(IStrategy):
def getPctLastBuy(self, pair, last_candle): def getPctLastBuy(self, pair, last_candle):
return round((last_candle['close'] - self.pairs[pair]['last_buy']) / self.pairs[pair]['last_buy'], 4) return round((last_candle['close'] - self.pairs[pair]['last_buy']) / self.pairs[pair]['last_buy'], 4)
def getPct60D(self, pair, last_candle):
return round((last_candle['max60_1d'] - last_candle['min60_1d']) / last_candle['max60_1d'], 4)
def getLimitBuy(self, pair, last_candle, first_pct):
count_of_buys = self.pairs[pair]['count_of_buys']
pct60 = self.getPct60D(pair, last_candle) # exemple 0.3 pour 30%
if (pct60 < 0.05):
lim = - first_pct - (count_of_buys * 0.001 * 0.05 / 0.05)
else:
# 0.1
# 0.4
lim = - first_pct - (count_of_buys * 0.001 * pct60 / 0.05)
return lim
def getProbaHausse(self, last_candle): def getProbaHausse(self, last_candle):
value_1 = self.getValuesFromTable(self.ema_volume, last_candle['ema_volume']) 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']) value_2 = self.getValuesFromTable(self.mid_smooth_1h_deriv1, last_candle['mid_smooth_1h_deriv1'])
@@ -1298,8 +1331,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
count_of_buys = self.pairs[pair]['count_of_buys'] count_of_buys = self.pairs[pair]['count_of_buys']
pct_first = self.getPctFirstBuy(pair, last_candle) pct_first = self.getPctFirstBuy(pair, last_candle)
expected_profit = max(0.004, abs( expected_profit = max(0.004, abs(pct_first / 3)) # 0.004 + 0.002 * self.pairs[pair]['count_of_buys'] #min(0.01, first_max)
pct_first / 3)) # 0.004 + 0.002 * self.pairs[pair]['count_of_buys'] #min(0.01, first_max)
# print( # 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}") # 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}")
@@ -1833,7 +1865,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
max_pair = p max_pair = p
total_non_btc += self.pairs[p]['count_of_buys'] total_non_btc += self.pairs[p]['count_of_buys']
pct_max = self.getPctLastBuy(pair, last_candle) pct_max = self.getPctFirstBuy(pair, last_candle) #self.getPctLastBuy(pair, last_candle)
# val = self.getProbaHausse(last_candle) # val = self.getProbaHausse(last_candle)
# if (val < 40): # if (val < 40):