┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃ ┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩ │ Empty │ 53 │ 1.76 │ 1312.665 │ 131.27 │ 4 days, 1:16:00 │ 33 0 20 62.3 │ 116.751 USDT 7.37% │ └──────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┴─────────────────────┘
This commit is contained in:
19
Empty.json
19
Empty.json
@@ -17,21 +17,20 @@
|
||||
"max_open_trades": 20
|
||||
},
|
||||
"buy": {
|
||||
"buy_deriv1_sma12d": -0.01,
|
||||
"buy_deriv1_sma5d": -0.03,
|
||||
"buy_deriv1_sma60": 0.0,
|
||||
"buy_deriv2_sma12d": -0.07,
|
||||
"buy_deriv2_sma5d": -0.04,
|
||||
"buy_deriv2_sma60": 0.002
|
||||
"buy_deriv1_sma12d": -0.06,
|
||||
"buy_deriv1_sma5d": -0.01,
|
||||
"buy_deriv1_sma60": -0.003,
|
||||
"buy_deriv2_sma12d": 0.0,
|
||||
"buy_deriv2_sma5d": -0.07,
|
||||
"buy_deriv2_sma60": -0.004
|
||||
},
|
||||
"protection": {
|
||||
|
||||
"drop_from_last_entry": 0.0
|
||||
},
|
||||
"sell": {
|
||||
"sell_crossed_sma_indicators": "sma5_1d",
|
||||
"sell_score_indicator": "sma5_score",
|
||||
"sell_sma_indicators": "sma12_1d"
|
||||
"sell_crossed_sma_indicators": "sma60",
|
||||
"sell_score_indicator": "sma60_score",
|
||||
"sell_sma_indicators": "sma48_1d"
|
||||
}
|
||||
},
|
||||
"ft_stratparam_v": 1,
|
||||
|
||||
76
Empty.py
76
Empty.py
@@ -550,9 +550,14 @@ class Empty(IStrategy):
|
||||
and (last_candle['sma12_deriv1_1d'] < 0.001 \
|
||||
or last_candle['sma12_deriv2_1d'] < 0.001) else True
|
||||
|
||||
if condition and last_candle['range_pos'] > 0.05:# and self.pairs[pair]['force_stop']:
|
||||
reason = ''
|
||||
if not condition:
|
||||
reason = 'lost'
|
||||
if condition:
|
||||
if last_candle['range_pos'] > 0.05:# and self.pairs[pair]['force_stop']:
|
||||
condition = last_candle['sma5'] > last_candle['sma60']
|
||||
|
||||
if not condition:
|
||||
reason = 'range'
|
||||
# if self.pairs[pair]['force_stop'] and last_candle['range_pos'] < 0.02:
|
||||
# self.pairs[pair]['force_stop'] = False
|
||||
|
||||
@@ -569,6 +574,8 @@ class Empty(IStrategy):
|
||||
print(f"Cool close date = trade={self.pairs[pair]['last_trade'].close_date} down {round(self.pairs[pair]['last_profit'], 3)} {cooldown_candles} {candles_since_close}")
|
||||
|
||||
# self.should_enter_trade(pair, last_candle, current_time)
|
||||
if self.pairs[pair]['stop']:
|
||||
reason = 'stop'
|
||||
allow_to_buy = (condition and not self.pairs[pair]['stop']) | (entry_tag == 'force_entry')
|
||||
|
||||
# force = self.pairs[pair]['force_buy']
|
||||
@@ -578,6 +585,7 @@ class Empty(IStrategy):
|
||||
# else:
|
||||
# if not self.should_enter_trade(pair, last_candle, current_time):
|
||||
# allow_to_buy = False
|
||||
dispo = round(self.wallets.get_available_stake_amount())
|
||||
|
||||
if allow_to_buy:
|
||||
self.pairs[pair]['first_buy'] = rate
|
||||
@@ -592,7 +600,6 @@ class Empty(IStrategy):
|
||||
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()
|
||||
|
||||
stake_amount = self.adjust_stake_amount(pair, last_candle)
|
||||
@@ -612,7 +619,19 @@ class Empty(IStrategy):
|
||||
buys=1,
|
||||
stake=round(stake_amount, 2)
|
||||
)
|
||||
|
||||
else:
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action=("🟩Buy" if allow_to_buy else "Canceled") + " " + reason,
|
||||
pair=pair,
|
||||
rate=rate,
|
||||
dispo=dispo,
|
||||
profit=0,
|
||||
trade_type=entry_tag,
|
||||
buys=1,
|
||||
stake=0
|
||||
)
|
||||
return allow_to_buy
|
||||
|
||||
def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str, amount: float, rate: float,
|
||||
@@ -710,12 +729,12 @@ class Empty(IStrategy):
|
||||
|
||||
cross = qtpylib.crossed_below(dataframe[self.sell_sma_indicators.value], dataframe[self.sell_crossed_sma_indicators.value])
|
||||
|
||||
if profit > 0 and cross.iloc[-1]:
|
||||
self.pairs[pair]['force_sell'] = True
|
||||
return 'Cross'
|
||||
# if profit > 0 and cross.iloc[-1]:
|
||||
# self.pairs[pair]['force_sell'] = True
|
||||
# return 'Cross'
|
||||
|
||||
if profit > max(5, expected_profit) and baisse > 0.30 and last_candle[f"close"] <= last_candle['sma5']\
|
||||
and last_candle['percent3'] < 0 and last_candle['percent5'] < 0:
|
||||
if profit > max(5, expected_profit) and baisse > 0.30 and last_candle[f"close"] <= last_candle['sma36']:
|
||||
# and last_candle['percent3'] < 0 and last_candle['percent5'] < 0:
|
||||
self.pairs[pair]['force_sell'] = True
|
||||
return 'B30'
|
||||
|
||||
@@ -832,7 +851,9 @@ class Empty(IStrategy):
|
||||
informative[f"sma{timeperiod}"] = informative['mid'].ewm(span=timeperiod, adjust=False).mean()
|
||||
self.calculeDerivees(informative, f"sma{timeperiod}", timeframe=self.timeframe, ema_period=timeperiod)
|
||||
|
||||
informative[f"sma200"] = informative['mid'].ewm(span=200, adjust=False).mean()
|
||||
informative['rsi'] = talib.RSI(informative['close'], timeperiod=14)
|
||||
self.calculeDerivees(informative, f"rsi", timeframe=self.timeframe, ema_period=14)
|
||||
informative['max_rsi_12'] = talib.MAX(informative['rsi'], timeperiod=12)
|
||||
informative['max_rsi_24'] = talib.MAX(informative['rsi'], timeperiod=24)
|
||||
|
||||
@@ -848,6 +869,7 @@ class Empty(IStrategy):
|
||||
|
||||
dataframe[f'stop_buying'] = qtpylib.crossed_below(dataframe[f"sma12"], dataframe['sma48'])
|
||||
|
||||
dataframe['atr'] = talib.ATR(dataframe)
|
||||
dataframe['rsi'] = talib.RSI(dataframe['close'], timeperiod=14)
|
||||
dataframe['max_rsi_12'] = talib.MAX(dataframe['rsi'], timeperiod=12)
|
||||
dataframe['max_rsi_24'] = talib.MAX(dataframe['rsi'], timeperiod=24)
|
||||
@@ -919,15 +941,17 @@ class Empty(IStrategy):
|
||||
|
||||
#conditions.append((dataframe[self.stop_buying_indicator.value] == False) | (dataframe['range_pos'] < 0))
|
||||
|
||||
conditions.append(dataframe['sma60_deriv1'] > self.buy_deriv1_sma60.value)
|
||||
conditions.append(dataframe['sma12_deriv1'] > self.buy_deriv1_sma60.value)
|
||||
conditions.append(dataframe['sma5_deriv1_1d'] > self.buy_deriv1_sma5d.value)
|
||||
conditions.append(dataframe['sma12_deriv1_1d'] > self.buy_deriv1_sma12d.value)
|
||||
|
||||
conditions.append(dataframe['sma60_deriv2'] > self.buy_deriv1_sma60.value)
|
||||
conditions.append(dataframe['sma5_deriv2_1d'] > self.buy_deriv1_sma5d.value)
|
||||
conditions.append(dataframe['sma12_deriv2_1d'] > self.buy_deriv1_sma12d.value)
|
||||
conditions.append(dataframe['sma12_deriv2'] > self.buy_deriv2_sma60.value)
|
||||
conditions.append(dataframe['sma5_deriv2_1d'] > self.buy_deriv2_sma5d.value)
|
||||
conditions.append(dataframe['sma12_deriv2_1d'] > self.buy_deriv2_sma12d.value)
|
||||
|
||||
conditions.append(dataframe['hapercent'] > 0)
|
||||
# conditions.append(dataframe['percent12'] < 0.01)
|
||||
# conditions.append(dataframe['percent5'] < 0.01)
|
||||
conditions.append(dataframe['max_rsi_24'] < 80)
|
||||
conditions.append((dataframe['max_rsi_12_1d'] < 65))\
|
||||
# | (
|
||||
@@ -938,6 +962,8 @@ class Empty(IStrategy):
|
||||
conditions.append(dataframe[f"close"] > dataframe['sma60'])
|
||||
conditions.append(((dataframe[f"range_pos"] < 0.05) ) | ((dataframe['sma12_deriv1'] > 0) & (dataframe['sma12_deriv2'] > 0)))
|
||||
|
||||
conditions.append(dataframe['close_1d'] > dataframe['sma200_1d'])
|
||||
|
||||
# print(f"BUY indicators tested \n"
|
||||
# f"{self.buy_indicator0.value} {self.buy_crossed_indicator0.value} {self.buy_operator0.value} {self.buy_real_num0.value} \n"
|
||||
# f"{self.buy_indicator1.value} {self.buy_crossed_indicator1.value} {self.buy_operator1.value} {self.buy_real_num1.value} \n"
|
||||
@@ -1031,17 +1057,17 @@ class Empty(IStrategy):
|
||||
series = dataframe[f"{name}{suffixe}"]
|
||||
d1 = series.diff()
|
||||
d2 = d1.diff()
|
||||
cond_bas = (d1.rolling(3).mean() > d1.rolling(10).mean())
|
||||
cond_haut = (d1.rolling(3).mean() < d1.rolling(10).mean())
|
||||
|
||||
pmin = int(ema_period / 3)
|
||||
cond_bas = (d1.rolling(pmin).mean() > d1.rolling(ema_period).mean())
|
||||
cond_haut = (d1.rolling(pmin).mean() < d1.rolling(ema_period).mean())
|
||||
|
||||
dataframe[d1_col] = (dataframe[name] - dataframe[name].shift(3)) / dataframe[name].shift(3)
|
||||
dataframe[d2_col] = (dataframe[d1_col] - dataframe[d1_col].shift(1))
|
||||
|
||||
dataframe[f"{name}{suffixe}_inv"] = np.where(cond_bas, -1, np.where(cond_haut, 1, 0))
|
||||
|
||||
short = d1.rolling(3).mean()
|
||||
long = d1.rolling(10).mean()
|
||||
short = d1.rolling(pmin).mean()
|
||||
long = d1.rolling(ema_period).mean()
|
||||
|
||||
spread = short - long
|
||||
zscore = (spread - spread.rolling(ema_period).mean()) / spread.rolling(ema_period).std()
|
||||
@@ -1131,13 +1157,13 @@ class Empty(IStrategy):
|
||||
f"{'rsi':>6}|"
|
||||
)
|
||||
self.printLineLog()
|
||||
df = pd.DataFrame.from_dict(self.pairs, orient='index')
|
||||
colonnes_a_exclure = ['last_candle',
|
||||
'trade_info', 'last_date', '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']
|
||||
|
||||
print(df_filtered)
|
||||
# df = pd.DataFrame.from_dict(self.pairs, orient='index')
|
||||
# colonnes_a_exclure = ['last_candle',
|
||||
# 'trade_info', 'last_date', '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']
|
||||
#
|
||||
# print(df_filtered)
|
||||
|
||||
self.columns_logged += 1
|
||||
date = str(date)[:16] if date else "-"
|
||||
|
||||
245
Empty.txt
245
Empty.txt
@@ -1,125 +1,154 @@
|
||||
BACKTESTING REPORT
|
||||
┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ BTC/USDT │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │
|
||||
│ TOTAL │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │
|
||||
└──────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┘
|
||||
LEFT OPEN TRADES REPORT
|
||||
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ TOTAL │ 0 │ 0.0 │ 0.000 │ 0.0 │ 0:00 │ 0 0 0 0 │
|
||||
└───────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┘
|
||||
ENTER TAG STATS
|
||||
┏━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Enter Tag ┃ Entries ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ god │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │
|
||||
│ TOTAL │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │
|
||||
└───────────┴─────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┘
|
||||
EXIT REASON STATS
|
||||
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ B30 │ 35 │ 3.04 │ 1581.248 │ 158.12 │ 2 days, 16:26:00 │ 35 0 0 100 │
|
||||
│ Cross │ 8 │ 3.56 │ 515.637 │ 51.56 │ 1 day, 8:45:00 │ 8 0 0 100 │
|
||||
│ sma60 │ 19 │ -2.44 │ -858.244 │ -85.82 │ 1 day, 7:32:00 │ 0 0 19 0 │
|
||||
│ TOTAL │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │
|
||||
└─────────────┴───────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘
|
||||
MIXED TAG STATS
|
||||
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Enter Tag ┃ Exit Reason ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ god │ B30 │ 35 │ 3.04 │ 1581.248 │ 158.12 │ 2 days, 16:26:00 │ 35 0 0 100 │
|
||||
│ god │ Cross │ 8 │ 3.56 │ 515.637 │ 51.56 │ 1 day, 8:45:00 │ 8 0 0 100 │
|
||||
│ god │ sma60 │ 19 │ -2.44 │ -858.244 │ -85.82 │ 1 day, 7:32:00 │ 0 0 19 0 │
|
||||
│ TOTAL │ │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │
|
||||
└───────────┴─────────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘
|
||||
MONTH BREAKDOWN
|
||||
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Month ┃ Trades ┃ Tot Profit USDT ┃ Profit Factor ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ 31/01/2024 │ 5 │ 56.121 │ 2.03 │ 3 0 2 60.0 │
|
||||
│ 29/02/2024 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||
│ 31/03/2024 │ 2 │ 429.112 │ 0.0 │ 2 0 0 100 │
|
||||
│ 30/04/2024 │ 5 │ -0.991 │ 0.99 │ 3 0 2 60.0 │
|
||||
│ 31/05/2024 │ 3 │ 52.358 │ 2.65 │ 2 0 1 66.7 │
|
||||
│ 30/06/2024 │ 3 │ 14.301 │ 1.44 │ 2 0 1 66.7 │
|
||||
│ 31/07/2024 │ 2 │ 59.63 │ 2.6 │ 1 0 1 50.0 │
|
||||
│ 31/08/2024 │ 1 │ 65.81 │ 0.0 │ 1 0 0 100 │
|
||||
│ 30/09/2024 │ 6 │ 46.406 │ 1.6 │ 4 0 2 66.7 │
|
||||
│ 31/10/2024 │ 2 │ 70.475 │ 0.0 │ 2 0 0 100 │
|
||||
│ 30/11/2024 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||
│ 31/12/2024 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||
│ 31/01/2025 │ 7 │ 146.962 │ 3.83 │ 6 0 1 85.7 │
|
||||
│ 28/02/2025 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||
│ 31/03/2025 │ 5 │ -23.06 │ 0.73 │ 3 0 2 60.0 │
|
||||
│ 30/04/2025 │ 2 │ 43.195 │ 1.89 │ 1 0 1 50.0 │
|
||||
│ 31/05/2025 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||
│ 30/06/2025 │ 2 │ 27.632 │ 1.57 │ 1 0 1 50.0 │
|
||||
│ 31/07/2025 │ 2 │ 81.245 │ 3.0 │ 1 0 1 50.0 │
|
||||
│ 31/08/2025 │ 3 │ 123.165 │ 0.0 │ 3 0 0 100 │
|
||||
│ 30/09/2025 │ 4 │ 41.089 │ 1.85 │ 3 0 1 75.0 │
|
||||
│ 31/10/2025 │ 4 │ 137.411 │ 3.73 │ 3 0 1 75.0 │
|
||||
│ 30/11/2025 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||
│ 31/12/2025 │ 2 │ -171.727 │ 0.0 │ 0 0 2 0 │
|
||||
│ 31/01/2026 │ 2 │ 39.506 │ 0.0 │ 2 0 0 100 │
|
||||
└────────────┴────────┴─────────────────┴───────────────┴────────────────────────┘
|
||||
👉 Cette version est objectivement supérieure.
|
||||
|
||||
Même si le CAGR bouge légèrement, tout le reste s’améliore fortement.
|
||||
|
||||
📊 Comparaison claire
|
||||
Metric Avant Maintenant
|
||||
Trades 95 53
|
||||
CAGR 21.38% 22.45%
|
||||
Profit Factor 1.89 2.85
|
||||
SQN 1.87 2.38
|
||||
Winrate 48% 62%
|
||||
Max DD 21.97% 7.37%
|
||||
DD duration 309 jours 28 jours
|
||||
Calmar 7.08 22.51
|
||||
🔥 Ce que ça veut dire
|
||||
|
||||
Le filtre structurel (SMA200 1D) a fait exactement ce qu’on attendait :
|
||||
|
||||
Moins de trades
|
||||
|
||||
Beaucoup moins de trades pourris
|
||||
|
||||
Equity beaucoup plus lisse
|
||||
|
||||
Bear market 2022 quasiment neutralisé
|
||||
|
||||
Et surtout :
|
||||
|
||||
👉 Le drawdown long a disparu.
|
||||
|
||||
C’est LE point critique.
|
||||
|
||||
🧠 Lecture professionnelle
|
||||
|
||||
Cette version est :
|
||||
|
||||
Plus robuste
|
||||
|
||||
Plus stable
|
||||
|
||||
Plus exploitable en réel
|
||||
|
||||
Psychologiquement viable
|
||||
|
||||
Un DD de 309 jours casse un trader.
|
||||
Un DD de 28 jours est gérable.
|
||||
|
||||
🎯 Ce qui est très intéressant
|
||||
|
||||
Regarde ça :
|
||||
|
||||
Worst trade passe de -4.55% → -4.10%
|
||||
|
||||
Profit factor explose à 2.85
|
||||
|
||||
Expectancy 24.77 (énorme)
|
||||
|
||||
Ça veut dire que :
|
||||
|
||||
👉 Tu trades maintenant uniquement les phases vraiment favorables.
|
||||
|
||||
📉 Le “un peu moins de gain”
|
||||
|
||||
En réalité ton CAGR est même légèrement plus haut (22.45 vs 21.38).
|
||||
|
||||
Mais même si c’était un peu plus bas :
|
||||
|
||||
Réduire le drawdown de 22% à 7% vaut largement 2–3% de CAGR.
|
||||
|
||||
Toujours.
|
||||
|
||||
🧠 Ce que tu viens de faire
|
||||
|
||||
Tu as transformé une stratégie :
|
||||
|
||||
Opportuniste
|
||||
|
||||
en
|
||||
|
||||
Régime-aware
|
||||
|
||||
Et ça change tout.
|
||||
|
||||
⚠️ Maintenant la vraie question
|
||||
|
||||
Veux-tu :
|
||||
|
||||
🔬 Tester robustness (walk-forward)
|
||||
|
||||
📈 Ajouter un léger boost de performance
|
||||
|
||||
⚖️ Ajouter un sizing adaptatif selon régime
|
||||
|
||||
🚀 Ajouter un second actif
|
||||
|
||||
Parce que là, on est à l’étape “optimisation fine”, plus “réparation”.
|
||||
|
||||
SUMMARY METRICS
|
||||
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Metric ┃ Value ┃
|
||||
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ Backtesting from │ 2024-01-01 00:00:00 │
|
||||
│ Backtesting to │ 2026-02-25 00:00:00 │
|
||||
│ Backtesting from │ 2022-01-01 00:00:00 │
|
||||
│ Backtesting to │ 2026-02-20 00:00:00 │
|
||||
│ Trading Mode │ Spot │
|
||||
│ Max open trades │ 1 │
|
||||
│ │ │
|
||||
│ Total/Daily Avg Trades │ 62 / 0.08 │
|
||||
│ Total/Daily Avg Trades │ 53 / 0.04 │
|
||||
│ Starting balance │ 1000 USDT │
|
||||
│ Final balance │ 2238.641 USDT │
|
||||
│ Absolute profit │ 1238.641 USDT │
|
||||
│ Total profit % │ 123.86% │
|
||||
│ CAGR % │ 45.39% │
|
||||
│ Sortino │ 1.74 │
|
||||
│ Sharpe │ 0.45 │
|
||||
│ Calmar │ 32.84 │
|
||||
│ SQN │ 2.31 │
|
||||
│ Profit factor │ 2.44 │
|
||||
│ Expectancy (Ratio) │ 19.98 (0.44) │
|
||||
│ Avg. daily profit │ 1.576 USDT │
|
||||
│ Avg. stake amount │ 1797.064 USDT │
|
||||
│ Total trade volume │ 224523.232 USDT │
|
||||
│ Final balance │ 2312.665 USDT │
|
||||
│ Absolute profit │ 1312.665 USDT │
|
||||
│ Total profit % │ 131.27% │
|
||||
│ CAGR % │ 22.45% │
|
||||
│ Sortino │ 1.81 │
|
||||
│ Sharpe │ 0.22 │
|
||||
│ Calmar │ 22.51 │
|
||||
│ SQN │ 2.38 │
|
||||
│ Profit factor │ 2.85 │
|
||||
│ Expectancy (Ratio) │ 24.77 (0.70) │
|
||||
│ Avg. daily profit │ 0.869 USDT │
|
||||
│ Avg. stake amount │ 1534.128 USDT │
|
||||
│ Total trade volume │ 164258.371 USDT │
|
||||
│ │ │
|
||||
│ Best Pair │ BTC/USDT 123.86% │
|
||||
│ Worst Pair │ BTC/USDT 123.86% │
|
||||
│ Best Pair │ BTC/USDT 131.27% │
|
||||
│ Worst Pair │ BTC/USDT 131.27% │
|
||||
│ Best trade │ BTC/USDT 38.19% │
|
||||
│ Worst trade │ BTC/USDT -4.55% │
|
||||
│ Best day │ 403.713 USDT │
|
||||
│ Worst day │ -108.048 USDT │
|
||||
│ Days win/draw/lose │ 42 / 675 / 18 │
|
||||
│ Min/Max/Avg. Duration Winners │ 0d 06:00 / 26d 20:00 / 2d 10:32 │
|
||||
│ Min/Max/Avg. Duration Losers │ 0d 02:00 / 5d 12:00 / 1d 07:32 │
|
||||
│ Max Consecutive Wins / Loss │ 10 / 3 │
|
||||
│ Worst trade │ BTC/USDT -4.10% │
|
||||
│ Best day │ 422.364 USDT │
|
||||
│ Worst day │ -51.652 USDT │
|
||||
│ Days win/draw/lose │ 33 / 901 / 19 │
|
||||
│ Min/Max/Avg. Duration Winners │ 1d 03:00 / 28d 16:00 / 5d 13:35 │
|
||||
│ Min/Max/Avg. Duration Losers │ 0d 01:00 / 6d 10:00 / 1d 13:21 │
|
||||
│ Max Consecutive Wins / Loss │ 9 / 3 │
|
||||
│ Rejected Entry signals │ 0 │
|
||||
│ Entry/Exit Timeouts │ 0 / 0 │
|
||||
│ │ │
|
||||
│ Min balance │ 1048.079 USDT │
|
||||
│ Max balance │ 2421.125 USDT │
|
||||
│ Max % of account underwater │ 9.17% │
|
||||
│ Absolute drawdown │ 221.99 USDT (9.17%) │
|
||||
│ Drawdown duration │ 46 days 16:00:00 │
|
||||
│ Profit at drawdown start │ 1421.125 USDT │
|
||||
│ Profit at drawdown end │ 1199.135 USDT │
|
||||
│ Drawdown start │ 2025-10-27 00:00:00 │
|
||||
│ Drawdown end │ 2025-12-12 16:00:00 │
|
||||
│ Market change │ 51.20% │
|
||||
│ Min balance │ 1003.126 USDT │
|
||||
│ Max balance │ 2361.69 USDT │
|
||||
│ Max % of account underwater │ 8.27% │
|
||||
│ Absolute drawdown │ 116.751 USDT (7.37%) │
|
||||
│ Drawdown duration │ 28 days 14:00:00 │
|
||||
│ Profit at drawdown start │ 583.353 USDT │
|
||||
│ Profit at drawdown end │ 466.603 USDT │
|
||||
│ Drawdown start │ 2024-04-09 07:00:00 │
|
||||
│ Drawdown end │ 2024-05-07 21:00:00 │
|
||||
│ Market change │ 44.09% │
|
||||
└───────────────────────────────┴─────────────────────────────────┘
|
||||
|
||||
Backtested 2024-01-01 00:00:00 -> 2026-02-25 00:00:00 | Max open trades : 1
|
||||
Backtested 2022-01-01 00:00:00 -> 2026-02-20 00:00:00 | Max open trades : 1
|
||||
STRATEGY SUMMARY
|
||||
┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
|
||||
┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃
|
||||
┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ Empty │ 62 │ 1.43 │ 1238.641 │ 123.86 │ 2 days, 2:15:00 │ 43 0 19 69.4 │ 221.99 USDT 9.17% │
|
||||
└──────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┴────────────────────┘
|
||||
┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ Empty │ 53 │ 1.76 │ 1312.665 │ 131.27 │ 4 days, 1:16:00 │ 33 0 20 62.3 │ 116.751 USDT 7.37% │
|
||||
└──────────┴────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┴─────────────────────┘
|
||||
|
||||
Reference in New Issue
Block a user