Calcul 20250101-20250714 726.194 105.996$

This commit is contained in:
Jérôme Delacotte
2025-09-15 22:09:18 +02:00
parent 4d875a4c97
commit 845d2588d5
2 changed files with 1559 additions and 1864 deletions

View File

@@ -183,7 +183,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
'stop': False,
'max_profit': 0,
'last_palier_index': -1,
'total_amount': 0
'total_amount': 0,
'has_gain': 0
}
for pair in ["BTC/USDC", "ETH/USDC", "DOGE/USDC", "XRP/USDC", "SOL/USDC",
"BTC/USDT", "ETH/USDT", "DOGE/USDT", "XRP/USDT", "SOL/USDT"]
@@ -375,6 +376,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dispo=dispo,
profit=round(trade.calc_profit(rate, amount), 2)
)
self.pairs[pair]['has_gain'] = 0
self.pairs[pair]['current_profit'] = 0
self.pairs[pair]['total_amount'] = 0
self.pairs[pair]['count_of_buys'] = 0
@@ -733,7 +735,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# print("##################")
# self.calculateStats(informative, 'sma5_deriv1', 'futur_percent_3')
self.calculePlateaux(informative, 24, 0.01)
# self.calculePlateaux(informative, 6, 0.005)
dataframe = merge_informative_pair(dataframe, informative, self.timeframe, "1h", ffill=True)
@@ -762,9 +764,6 @@ class Zeus_8_3_2_B_4_2(IStrategy):
self.calculeDerivees(informative, 'sma5', factor_1=10, factor_2=1)
self.calculeDerivees(informative, 'sma20', factor_1=10, factor_2=1)
informative['inversion_haute'] = (informative['sma20'].shift(2) < informative['sma20'].shift(1)) & (informative['sma20'].shift(1) > informative['sma20'])
informative['inversion_basse'] = (informative['sma20'].shift(2) > informative['sma20'].shift(1)) & (informative['sma20'].shift(1) < informative['sma20'])
# informative['futur_percent_3'] = 100 * ((informative['sma5'].shift(-3) - informative['sma5']) / informative['sma5'])
# if self.dp.runmode.value in ('backtest'):
@@ -787,7 +786,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# self.calculateProbabilite2Index(informative, futur_cols, indic_1, indic_2)
self.calculePlateaux(informative, 14, 0.01)
# self.calculePlateaux(informative, 14, 0.01)
dataframe = merge_informative_pair(dataframe, informative, self.timeframe, "1d", ffill=True)
dataframe['last_price'] = dataframe['close']
@@ -909,6 +908,14 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# indic_1 = 'mid_smooth_1h_deriv1'
# indic_2 = 'mid_smooth_1h_deriv2'
# self.calculateProbabilite2Index(dataframe, futur_cols, indic_1, indic_2)
dataframe['can_sell'] = np.where((dataframe['mid_smooth_3'].shift(1) > dataframe['mid_smooth_3']), dataframe['close'], np.nan)
dataframe['can_buy'] = np.where((dataframe['mid_smooth_3'].shift(1) < dataframe['mid_smooth_3']), dataframe['close'], np.nan)
dataframe['perte_02'] = np.where((dataframe['percent3'] * 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)
return dataframe
@@ -1005,9 +1012,11 @@ class Zeus_8_3_2_B_4_2(IStrategy):
dataframe.loc[
(
valid_inversion & inversion_last5
# (valid_inversion & inversion_last5 )
(dataframe['mid_smooth_3'].shift(1) < dataframe['mid_smooth_3'])
& (dataframe['hapercent'] > 0)
& (dataframe['max_rsi_12'] < 70)
& (dataframe['open'] <= dataframe['bb_middleband'])
# valid_inversion
# ((dataframe['bb_cross_down'] < - 0.1)
@@ -1025,17 +1034,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# & (dataframe['mid_smooth_1h_deriv1'] >= dataframe['mid_smooth_1h_deriv1'].shift(1))
), ['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['mid_smooth_1h_deriv1'].shift(1) >= dataframe['mid_smooth_1h_deriv1'])), dataframe['close'], np.nan)
dataframe['can_buy'] = np.where(((dataframe['mid_smooth_12_deriv2'].shift(1) < 0)\
& (dataframe['mid_smooth_12_deriv2'].shift(1) <= dataframe['mid_smooth_12_deriv2'])), dataframe['close'], np.nan)
dataframe['test'] = np.where(dataframe['enter_long'] == 1, dataframe['close'] * 1.01, np.nan)
dataframe['perte_02'] = np.where((dataframe['percent3'] * 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()
@@ -1388,31 +1387,31 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# self.pairs[trade.pair]['last_candle'] = last_candle
# return -trade.stake_amount
# if (count_of_buys < limit_buy and pct_max > pct and current_profit > 0.004) \
# and (last_candle['rsi_deriv1_1h'] >= -5) \
# and (last_candle['tendency'] in ('P', 'H++', 'DH', 'H+')) \
# and (last_candle['mid_smooth_deriv1'] > 0.015):
# try:
# trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48'
# self.log_trade(
# last_candle=last_candle,
# date=current_time,
# action="Gain +",
# dispo=dispo,
# pair=trade.pair,
# rate=current_rate,
# trade_type=trade_type,
# profit=round(current_profit, 4), # round(current_profit * trade.stake_amount, 2),
# buys=trade.nr_of_successful_entries + 1,
# stake=round(stake_amount, 2)
# )
# self.pairs[trade.pair]['last_buy'] = current_rate
# self.pairs[trade.pair]['max_touch'] = last_candle['close']
# self.pairs[trade.pair]['last_candle'] = last_candle
# return stake_amount
# except Exception as exception:
# print(exception)
# return None
if (False and count_of_buys < limit_buy and pct_max > 0.004 and hours > 2 and condition
and last_candle['rsi'] < 65 and last_candle['rsi_deriv1'] > 0):
try:
self.pairs[pair]['has_gain'] += 1
stake_amount = self.pairs[pair]['first_amount']
trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48'
self.log_trade(
last_candle=last_candle,
date=current_time,
action="Gain +",
dispo=dispo,
pair=trade.pair,
rate=current_rate,
trade_type=str(round(pct_max,4)),
profit=round(current_profit, 4), # round(current_profit * trade.stake_amount, 2),
buys=trade.nr_of_successful_entries + 1,
stake=round(stake_amount, 2)
)
self.pairs[trade.pair]['last_buy'] = current_rate
# self.pairs[trade.pair]['max_touch'] = last_candle['close']
self.pairs[trade.pair]['last_candle'] = last_candle
return stake_amount
except Exception as exception:
print(exception)
return None
return None
@@ -1476,7 +1475,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
base_stake_amount = self.config.get('stake_amount') # Montant de base configuré
# pct60 = round(100 * self.getPctClose60D(pair, last_candle), 2)
if not pair in ('BTC/USDT', 'BTC/USDC'):
if True: #not pair in ('BTC/USDT', 'BTC/USDC'):
# factors = [1, 1.2, 1.3, 1.4]
if self.pairs[pair]['count_of_buys'] == 0:
pctClose60 = self.getPctClose60D(pair, last_candle)
@@ -1550,7 +1549,14 @@ class Zeus_8_3_2_B_4_2(IStrategy):
return out_max - position * (out_max - out_min)
def expectedProfit(self, pair: str, last_candle: DataFrame):
pct_to_max = 0.004 + 0.001 * self.pairs[pair]['count_of_buys']
lim = 0.008
pct = 0.002
if pair == "BTC/USDT" or pair == "BTC/USDC":
lim = 0.004
pct = 0.001
pct_to_max = lim + pct * self.pairs[pair]['count_of_buys']
# if self.pairs[pair]['count_of_buys'] > 6:
# pct_to_max = 0.006 * self.pairs[pair]['count_of_buys']
# pctClose60 = self.getPctClose60D(pair, last_candle)
# max_60 = last_candle['max60_1d']
@@ -2075,21 +2081,6 @@ class Zeus_8_3_2_B_4_2(IStrategy):
limit = 3
# if self.pairs[pair]['count_of_buys'] > 3:
# if last_candle['inversion_basse_1d']:
# if self.pairs[pair]['stop'] == True :
# self.pairs[pair]['stop'] = False
# print(f"start buying {last_candle['sma20_deriv1_1d']} {last_candle['sma20_deriv2_1d']}")
# else:
# if last_candle['inversion_haute_1d']:
# if self.pairs[pair]['stop'] == False:
# self.pairs[pair]['stop'] = True
# print(f"stop buying {last_candle['rsi6_1d']} {last_candle['percent_1d']} {last_candle['sma20_deriv1_1d']} {last_candle['sma20_deriv2_1d']}")
# return False
#
# if self.pairs[pair]['stop']:
# return False
if pair.startswith('BTC'):
return True # BTC toujours autorisé
@@ -2115,7 +2106,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
pct_max = self.getPctFirstBuy(pair, last_candle) #self.getPctLastBuy(pair, last_candle)
val = self.getProbaHausseSma5d(last_candle)
if (val < 15):
if val < 15:
return False
# if count_decrease == len(non_btc_pairs):
@@ -2124,16 +2115,17 @@ class Zeus_8_3_2_B_4_2(IStrategy):
# print(f"should_enter_trade canceled all pairs decreased {'':{char}>{self.should_enter_trade_count}}")
# return False
# if self.pairs[pair]['count_of_buys'] >= 3:
# if last_candle['sma20_deriv1_1d'] < 0 and last_candle['sma5_deriv1_1d'] < 0 and last_candle['sma24_deriv1_1h'] < 0:
# return False
if self.pairs[pair]['count_of_buys'] >= 3:
if (last_candle['sma20_deriv1_1d'] < -0.05 and last_candle['sma5_deriv1_1d'] < -0.05)\
or (last_candle['sma5_deriv1_1d'] < -0.1 and last_candle['sma24_deriv1_1h'] < -0.1):
return False
self.should_enter_trade_count = 0
# if max_pair != pair and self.pairs[pair]['total_amount'] > 300:
# return False
if (max_pair != ''): # & (self.pairs[pair]['count_of_buys'] >= limit - 1) :
if (max_pair != '') & (self.pairs[pair]['count_of_buys'] >= limit) :
trade = self.pairs[max_pair]['current_trade']
current_time = current_time.astimezone(timezone.utc)
open_date = trade.open_date.astimezone(timezone.utc)
@@ -2141,7 +2133,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
days_since_open = (current_time_utc - open_date).days
pct_max_max = self.getPctFirstBuy(max_pair, last_candle)
# print(f"days_since_open {days_since_open} max_pair={max_pair} pair={pair}")
return max_pair == pair or pct_max < - 0.25 or (pct_max_max < - 0.15 and max_pair != pair and days_since_open > 60)
return max_pair == pair or pct_max < - 0.25 or (pct_max_max < - 0.15 and max_pair != pair and days_since_open > 30)
else:
return True

File diff suppressed because it is too large Load Diff