Compare commits
16 Commits
123804b5f3
...
Multiple_p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a925a28389 | ||
|
|
3302266b4a | ||
|
|
7954c518bd | ||
|
|
a599160501 | ||
|
|
8b030f46f0 | ||
|
|
2a7dd0beb4 | ||
|
|
5b1e8bede4 | ||
|
|
1bc5a38796 | ||
|
|
812aa01135 | ||
|
|
4b51cce9c7 | ||
|
|
12be7e0441 | ||
|
|
f1bad7949d | ||
|
|
2885cf05b1 | ||
|
|
5ce48130f4 | ||
|
|
1656ab695a | ||
|
|
a04b07f7ea |
31
Empty.json
31
Empty.json
@@ -14,12 +14,7 @@
|
|||||||
"trailing_only_offset_is_reached": false
|
"trailing_only_offset_is_reached": false
|
||||||
},
|
},
|
||||||
"max_open_trades": {
|
"max_open_trades": {
|
||||||
"max_open_trades": 20
|
"max_open_trades": 1
|
||||||
},
|
|
||||||
"protection": {
|
|
||||||
"b30_indicateur": "sma36",
|
|
||||||
"baisse": 0.33,
|
|
||||||
"drop_from_last_entry": -0.03
|
|
||||||
},
|
},
|
||||||
"buy": {
|
"buy": {
|
||||||
"buy_deriv1_sma12d": -0.04,
|
"buy_deriv1_sma12d": -0.04,
|
||||||
@@ -30,17 +25,25 @@
|
|||||||
"buy_deriv2_sma60": -0.001,
|
"buy_deriv2_sma60": -0.001,
|
||||||
"buy_longue": 160,
|
"buy_longue": 160,
|
||||||
"buy_longue_derive": "sma80_deriv1_1d",
|
"buy_longue_derive": "sma80_deriv1_1d",
|
||||||
"start_bear_deriv1": -0.004,
|
"start_bear_deriv1": 0.003,
|
||||||
"start_bear_deriv2": 0.002,
|
"start_bear_deriv2": 0.003,
|
||||||
"start_bear_indicator": "sma80",
|
"start_bear_indicator": "sma24",
|
||||||
"start_bull_deriv1": 0.001,
|
"start_bull_deriv1": -0.005,
|
||||||
"start_bull_deriv2": -0.002,
|
"start_bull_deriv2": 0.0,
|
||||||
"start_bull_indicator": "sma120"
|
"start_bull_indicator": "sma3"
|
||||||
|
},
|
||||||
|
"protection": {
|
||||||
|
"drop_from_last_entry": -0.03,
|
||||||
|
"mises": 1
|
||||||
},
|
},
|
||||||
"sell": {
|
"sell": {
|
||||||
"sell_score_indicator": "sma24_score"
|
"b30_indicateur": "sma36",
|
||||||
|
"baisse": 0.25,
|
||||||
|
"sell_force_sell": -0.169,
|
||||||
|
"sell_indicator": "sma3",
|
||||||
|
"sell_score_indicator": "sma3_score"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ft_stratparam_v": 1,
|
"ft_stratparam_v": 1,
|
||||||
"export_time": "2026-02-28 17:28:20.867470+00:00"
|
"export_time": "2026-03-07 11:58:51.712499+00:00"
|
||||||
}
|
}
|
||||||
102
Empty.py
102
Empty.py
@@ -216,8 +216,12 @@ class Empty(IStrategy):
|
|||||||
# baisses = list()
|
# baisses = list()
|
||||||
# for i in range(0, 0.5, 0.05):
|
# for i in range(0, 0.5, 0.05):
|
||||||
# baisses.append(i)
|
# baisses.append(i)
|
||||||
baisse = DecimalParameter(0, 0.5, decimals=2, default=0.3, space='protection', optimize=True, load=True)
|
mises = IntParameter(1, 10, default=1, space='protection')
|
||||||
b30_indicateur = CategoricalParameter(sma_indicators_h, default="sma36", space='protection', optimize=True, load=True)
|
sell_force_sell = DecimalParameter(-0.2, 0, decimals=3, default=-0.02, space='sell')
|
||||||
|
sell_indicator = CategoricalParameter(sma_indicators, default="sma36", space='sell', optimize=True, load=True)
|
||||||
|
|
||||||
|
baisse = DecimalParameter(0.1, 0.5, decimals=2, default=0.3, space='sell', optimize=True, load=True)
|
||||||
|
b30_indicateur = CategoricalParameter(sma_indicators_h, default="sma36", space='sell', optimize=True, load=True)
|
||||||
|
|
||||||
# lost_indicator = CategoricalParameter(sma_deriv1_indicators, default="sma5_deriv1", space='protection')
|
# lost_indicator = CategoricalParameter(sma_deriv1_indicators, default="sma5_deriv1", space='protection')
|
||||||
|
|
||||||
@@ -250,10 +254,10 @@ class Empty(IStrategy):
|
|||||||
# sl_max = self.wallets.get_available_stake_amount() / 2
|
# sl_max = self.wallets.get_available_stake_amount() / 2
|
||||||
#
|
#
|
||||||
# amount = sl_min + (1 - range_pos) * (sl_max - sl_min)
|
# amount = sl_min + (1 - range_pos) * (sl_max - sl_min)
|
||||||
if last_candle['enter_tag'] == 'fall':
|
if last_candle['enter_tag'] in ['fall', 'bear', 'Force', 'Range-']:
|
||||||
amount = self.wallets.get_available_stake_amount() / 5
|
amount = self.wallets.get_available_stake_amount() / 5
|
||||||
else:
|
else:
|
||||||
amount = self.wallets.get_available_stake_amount() # / (2 * self.pairs[pair]['count_of_lost'] + 1)
|
amount = self.wallets.get_available_stake_amount() / self.mises.value # / (2 * self.pairs[pair]['count_of_lost'] + 1)
|
||||||
|
|
||||||
# factor = 1
|
# factor = 1
|
||||||
#
|
#
|
||||||
@@ -364,13 +368,16 @@ class Empty(IStrategy):
|
|||||||
last_candle_2 = dataframe.iloc[-2].squeeze()
|
last_candle_2 = dataframe.iloc[-2].squeeze()
|
||||||
last_candle_3 = dataframe.iloc[-3].squeeze()
|
last_candle_3 = dataframe.iloc[-3].squeeze()
|
||||||
|
|
||||||
# if (last_candle['has_cross_min_6'] and last_candle['sma60_deriv1'] > 0) or (last_candle['sma12_inv_1d']):
|
if entry_tag == 'Range-':
|
||||||
# self.pairs[pair]['count_of_lost'] = 0
|
self.pairs[pair]['count_of_lost'] = 0
|
||||||
|
if entry_tag == 'Force':
|
||||||
|
if self.pairs[pair]['count_of_lost'] >= 1:
|
||||||
|
self.pairs[pair]['count_of_lost'] = 0
|
||||||
|
condition = False
|
||||||
|
else:
|
||||||
condition = False if self.pairs[pair]['count_of_lost'] >= 1 \
|
condition = False if self.pairs[pair]['count_of_lost'] >= 1 \
|
||||||
and (last_candle['sma12_deriv1_1d'] < 0.001 \
|
and (last_candle['sma12_deriv1_1d'] < 0.001 or last_candle['sma12_deriv2_1d'] < 0.001) \
|
||||||
or last_candle['sma12_deriv2_1d'] < 0.001) else True
|
and entry_tag != 'dist' else True
|
||||||
|
|
||||||
reason = ''
|
reason = ''
|
||||||
if not condition:
|
if not condition:
|
||||||
reason = 'lost'
|
reason = 'lost'
|
||||||
@@ -545,15 +552,15 @@ class Empty(IStrategy):
|
|||||||
# buys=count_of_buys,
|
# buys=count_of_buys,
|
||||||
# stake=0
|
# stake=0
|
||||||
# )
|
# )
|
||||||
# if self.pairs[pair]['current_trade'].enter_tag == 'fall':
|
if self.pairs[pair]['current_trade'].enter_tag in ['bear', 'Force', 'Range-']:
|
||||||
# if current_profit < - 0.02 and last_candle[f"close"] <= last_candle['sma60'] and self.wallets.get_available_stake_amount() < 50:
|
if current_profit < - 0.02 and last_candle[f"close"] <= last_candle['sma60'] and self.wallets.get_available_stake_amount() < 50:
|
||||||
# self.pairs[pair]['force_sell'] = True
|
|
||||||
# return 'sma60'
|
|
||||||
# else:
|
|
||||||
|
|
||||||
if current_profit < - 0.02 and last_candle[f"close"] <= last_candle['sma60']:
|
|
||||||
self.pairs[pair]['force_sell'] = True
|
self.pairs[pair]['force_sell'] = True
|
||||||
return 'sma60'
|
return 'smaBF'
|
||||||
|
else:
|
||||||
|
if current_profit < self.sell_force_sell.value \
|
||||||
|
and last_candle[f"close"] <= last_candle[self.sell_indicator.value]:
|
||||||
|
self.pairs[pair]['force_sell'] = True
|
||||||
|
return 'sma'
|
||||||
|
|
||||||
if profit > max(5, expected_profit) and \
|
if profit > max(5, expected_profit) and \
|
||||||
(baisse > self.baisse.value and last_candle[f"close"] <= last_candle[self.b30_indicateur.value]) \
|
(baisse > self.baisse.value and last_candle[f"close"] <= last_candle[self.b30_indicateur.value]) \
|
||||||
@@ -561,6 +568,10 @@ class Empty(IStrategy):
|
|||||||
self.pairs[pair]['force_sell'] = True
|
self.pairs[pair]['force_sell'] = True
|
||||||
return 'B30'
|
return 'B30'
|
||||||
|
|
||||||
|
# if profit > max(5, expected_profit) and last_candle['sma5_deriv1_1d'] < 0 and baisse > 0.15:
|
||||||
|
# self.pairs[pair]['force_sell'] = True
|
||||||
|
# return 'Drv5d'
|
||||||
|
|
||||||
# if last_candle['range_pos'] > 0.05 and current_profit < - last_candle['range_pos'] /4 : #last_candle['cross_sma60']:
|
# if last_candle['range_pos'] > 0.05 and current_profit < - last_candle['range_pos'] /4 : #last_candle['cross_sma60']:
|
||||||
# self.pairs[pair]['force_sell'] = True
|
# self.pairs[pair]['force_sell'] = True
|
||||||
# return 'Range'
|
# return 'Range'
|
||||||
@@ -738,8 +749,8 @@ class Empty(IStrategy):
|
|||||||
# #####################################################################################
|
# #####################################################################################
|
||||||
# CA MONTE !!
|
# CA MONTE !!
|
||||||
# #####################################################################################
|
# #####################################################################################
|
||||||
# conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv1_1d" ] > self.start_bull_deriv1.value)
|
conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv1_1d" ] > self.start_bull_deriv1.value)
|
||||||
# conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv2_1d"] > self.start_bull_deriv2.value)
|
conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv2_1d"] > self.start_bull_deriv2.value)
|
||||||
conditions.append(dataframe['sma12_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['sma5_deriv1_1d'] > self.buy_deriv1_sma5d.value)
|
||||||
conditions.append(dataframe['sma12_deriv1_1d'] > self.buy_deriv1_sma12d.value)
|
conditions.append(dataframe['sma12_deriv1_1d'] > self.buy_deriv1_sma12d.value)
|
||||||
@@ -769,6 +780,29 @@ class Empty(IStrategy):
|
|||||||
['enter_long', 'enter_tag']
|
['enter_long', 'enter_tag']
|
||||||
] = (1, 'bull')
|
] = (1, 'bull')
|
||||||
|
|
||||||
|
# #####################################################################################
|
||||||
|
# conditions = list()
|
||||||
|
# conditions.append(dataframe['dist_sma200_1d'] < -0.05)
|
||||||
|
# conditions.append(dataframe['sma12_inv'] == 1)
|
||||||
|
# # conditions.append(dataframe['sma100_deriv1_1d'] > 0)
|
||||||
|
# if conditions:
|
||||||
|
# dataframe.loc[
|
||||||
|
# reduce(lambda x, y: x & y, conditions),
|
||||||
|
# ['enter_long', 'enter_tag']
|
||||||
|
# ] = (1, 'dist')
|
||||||
|
|
||||||
|
# #####################################################################################
|
||||||
|
conditions = list()
|
||||||
|
conditions.append(dataframe['close'] < dataframe['sma100_1d'])
|
||||||
|
conditions.append(dataframe['mid_smooth12'] > dataframe['mid_smooth12'].shift(1))
|
||||||
|
conditions.append(dataframe['sma100_deriv1_1d'] > 0)
|
||||||
|
conditions.append(dataframe[f"range_pos"] < 0.01)
|
||||||
|
# if conditions:
|
||||||
|
# dataframe.loc[
|
||||||
|
# reduce(lambda x, y: x & y, conditions),
|
||||||
|
# ['enter_long', 'enter_tag']
|
||||||
|
# ] = (1, 'dist')
|
||||||
|
|
||||||
# #####################################################################################
|
# #####################################################################################
|
||||||
# CA BAISSE !!
|
# CA BAISSE !!
|
||||||
# "buy": {
|
# "buy": {
|
||||||
@@ -831,7 +865,15 @@ class Empty(IStrategy):
|
|||||||
# ['enter_long', 'enter_tag']
|
# ['enter_long', 'enter_tag']
|
||||||
# ] = (1, 'cross_min')
|
# ] = (1, 'cross_min')
|
||||||
|
|
||||||
# conditions = list()
|
conditions = list()
|
||||||
|
conditions.append(dataframe['sma12_deriv1'] > 0.00)
|
||||||
|
conditions.append(dataframe['sma60_deriv1'] > 0.0)
|
||||||
|
conditions.append(dataframe['sma5_deriv1_1d'] > 0.0)
|
||||||
|
conditions.append(dataframe['sma12_deriv1_1d'] > 0.0)
|
||||||
|
conditions.append(dataframe['sma24_deriv1_1d'] > 0.0)
|
||||||
|
conditions.append(dataframe['sma100_deriv1_1d'] > 0.0)
|
||||||
|
conditions.append(dataframe[f"range_pos"] < 0.025)
|
||||||
|
# conditions.append(dataframe['sma12_deriv1_1d'] > 0.0)
|
||||||
# # conditions.append(dataframe['close_1d'] < dataframe[f'sma{self.buy_longue.value}_1d'])
|
# # conditions.append(dataframe['close_1d'] < dataframe[f'sma{self.buy_longue.value}_1d'])
|
||||||
# # conditions.append(dataframe['has_cross_min'].rolling(6).max() == 1)
|
# # conditions.append(dataframe['has_cross_min'].rolling(6).max() == 1)
|
||||||
# # conditions.append(dataframe['mid_smooth5'] > dataframe['mid_smooth5'].shift(1))
|
# # conditions.append(dataframe['mid_smooth5'] > dataframe['mid_smooth5'].shift(1))
|
||||||
@@ -840,7 +882,23 @@ class Empty(IStrategy):
|
|||||||
# dataframe.loc[
|
# dataframe.loc[
|
||||||
# reduce(lambda x, y: x & y, conditions),
|
# reduce(lambda x, y: x & y, conditions),
|
||||||
# ['enter_long', 'enter_tag']
|
# ['enter_long', 'enter_tag']
|
||||||
# ] = (1, 'fall')
|
# ] = (1, 'Rise')
|
||||||
|
|
||||||
|
# conditions = list()
|
||||||
|
# conditions.append(dataframe['has_cross_min_6'] == True)
|
||||||
|
# conditions.append(dataframe['min36'] == dataframe['min36'].shift(3))
|
||||||
|
# dataframe.loc[
|
||||||
|
# reduce(lambda x, y: x & y, conditions),
|
||||||
|
# ['enter_long', 'enter_tag']
|
||||||
|
# ] = (1, 'Force')
|
||||||
|
|
||||||
|
# conditions = list()
|
||||||
|
# conditions.append(dataframe['range_pos'] < -0.03)
|
||||||
|
# conditions.append(dataframe['min36'] == dataframe['min36'].shift(3))
|
||||||
|
# dataframe.loc[
|
||||||
|
# reduce(lambda x, y: x & y, conditions),
|
||||||
|
# ['enter_long', 'enter_tag']
|
||||||
|
# ] = (1, 'Range-')
|
||||||
|
|
||||||
return dataframe
|
return dataframe
|
||||||
|
|
||||||
|
|||||||
32
Empty5m.json
Normal file
32
Empty5m.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"strategy_name": "Empty5m",
|
||||||
|
"params": {
|
||||||
|
"roi": {
|
||||||
|
"0": 5
|
||||||
|
},
|
||||||
|
"stoploss": {
|
||||||
|
"stoploss": -1.0
|
||||||
|
},
|
||||||
|
"trailing": {
|
||||||
|
"trailing_stop": false,
|
||||||
|
"trailing_stop_positive": null,
|
||||||
|
"trailing_stop_positive_offset": 0.0,
|
||||||
|
"trailing_only_offset_is_reached": false
|
||||||
|
},
|
||||||
|
"max_open_trades": {
|
||||||
|
"max_open_trades": 20
|
||||||
|
},
|
||||||
|
"sell": {
|
||||||
|
"b30_indicateur": "sma36",
|
||||||
|
"baisse": 0.3,
|
||||||
|
"sell_force_sell": -0.03,
|
||||||
|
"sell_indicator": "sma36"
|
||||||
|
},
|
||||||
|
"protection": {
|
||||||
|
"drop_from_last_entry": -0.01,
|
||||||
|
"mises_bull": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ft_stratparam_v": 1,
|
||||||
|
"export_time": "2026-03-07 20:20:17.895644+00:00"
|
||||||
|
}
|
||||||
1452
Empty5m.py
Normal file
1452
Empty5m.py
Normal file
File diff suppressed because it is too large
Load Diff
1218
EmptyAI.py
Normal file
1218
EmptyAI.py
Normal file
File diff suppressed because it is too large
Load Diff
32
EmptyShort.json
Normal file
32
EmptyShort.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"strategy_name": "EmptyShort",
|
||||||
|
"params": {
|
||||||
|
"roi": {
|
||||||
|
"0": 5
|
||||||
|
},
|
||||||
|
"trailing": {
|
||||||
|
"trailing_stop": false,
|
||||||
|
"trailing_stop_positive": null,
|
||||||
|
"trailing_stop_positive_offset": 0.0,
|
||||||
|
"trailing_only_offset_is_reached": false
|
||||||
|
},
|
||||||
|
"max_open_trades": {
|
||||||
|
"max_open_trades": 20
|
||||||
|
},
|
||||||
|
"sell": {
|
||||||
|
"b30_indicateur": "sma24",
|
||||||
|
"baisse": 0.2,
|
||||||
|
"sell_force_sell": -0.02,
|
||||||
|
"sell_indicator": "sma36"
|
||||||
|
},
|
||||||
|
"protection": {
|
||||||
|
"drop_from_last_entry": 0.0,
|
||||||
|
"mises_bull": 4
|
||||||
|
},
|
||||||
|
"stoploss": {
|
||||||
|
"stoploss": -0.02
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ft_stratparam_v": 1,
|
||||||
|
"export_time": "2026-03-29 18:29:54.986316+00:00"
|
||||||
|
}
|
||||||
1419
EmptyShort.py
Normal file
1419
EmptyShort.py
Normal file
File diff suppressed because it is too large
Load Diff
188
EmptyShort.txt
Normal file
188
EmptyShort.txt
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
BACKTESTING REPORT
|
||||||
|
┏━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||||
|
┡━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ BTC/USDT:USDT │ 54 │ 0.75 │ 422.136 │ 42.21 │ 1 day, 5:07:00 │ 25 0 29 46.3 │
|
||||||
|
│ TOTAL │ 54 │ 0.75 │ 422.136 │ 42.21 │ 1 day, 5:07:00 │ 25 0 29 46.3 │
|
||||||
|
└───────────────┴────────┴──────────────┴─────────────────┴──────────────┴────────────────┴────────────────────────┘
|
||||||
|
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% ┃
|
||||||
|
┡━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ short │ 28 │ 0.72 │ 211.154 │ 21.12 │ 19:27:00 │ 13 0 15 46.4 │
|
||||||
|
│ short_spike │ 25 │ 0.65 │ 174.806 │ 17.48 │ 1 day, 10:54:00 │ 11 0 14 44.0 │
|
||||||
|
│ long │ 1 │ 3.75 │ 36.176 │ 3.62 │ 6 days, 10:57:00 │ 1 0 0 100 │
|
||||||
|
│ TOTAL │ 54 │ 0.75 │ 422.136 │ 42.21 │ 1 day, 5:07:00 │ 25 0 29 46.3 │
|
||||||
|
└─────────────┴─────────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘
|
||||||
|
EXIT REASON STATS
|
||||||
|
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||||
|
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ B30Sht │ 24 │ 4.06 │ 1155.077 │ 115.51 │ 1 day, 10:30:00 │ 24 0 0 100 │
|
||||||
|
│ B30 │ 1 │ 3.75 │ 36.176 │ 3.62 │ 6 days, 10:57:00 │ 1 0 0 100 │
|
||||||
|
│ stop_loss │ 29 │ -2.1 │ -769.117 │ -76.91 │ 20:19:00 │ 0 0 29 0 │
|
||||||
|
│ TOTAL │ 54 │ 0.75 │ 422.136 │ 42.21 │ 1 day, 5:07:00 │ 25 0 29 46.3 │
|
||||||
|
└─────────────┴───────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘
|
||||||
|
MIXED TAG STATS
|
||||||
|
┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃ Enter Tag ┃ Exit Reason ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||||
|
┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ short │ B30Sht │ 13 │ 3.98 │ 601.641 │ 60.16 │ 1 day, 9:46:00 │ 13 0 0 100 │
|
||||||
|
│ short_spike │ B30Sht │ 11 │ 4.16 │ 553.436 │ 55.34 │ 1 day, 11:22:00 │ 11 0 0 100 │
|
||||||
|
│ long │ B30 │ 1 │ 3.75 │ 36.176 │ 3.62 │ 6 days, 10:57:00 │ 1 0 0 100 │
|
||||||
|
│ short_spike │ stop_loss │ 14 │ -2.1 │ -378.630 │ -37.86 │ 1 day, 10:32:00 │ 0 0 14 0 │
|
||||||
|
│ short │ stop_loss │ 15 │ -2.1 │ -390.487 │ -39.05 │ 7:03:00 │ 0 0 15 0 │
|
||||||
|
│ TOTAL │ │ 54 │ 0.75 │ 422.136 │ 42.21 │ 1 day, 5:07:00 │ 25 0 29 46.3 │
|
||||||
|
└─────────────┴─────────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘
|
||||||
|
DAY BREAKDOWN
|
||||||
|
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃ Day ┃ Trades ┃ Tot Profit USDT ┃ Profit Factor ┃ Win Draw Loss Win% ┃
|
||||||
|
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ 07/01/2026 │ 1 │ 36.176 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 08/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 09/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 10/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 11/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 12/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 13/01/2026 │ 1 │ -20.15 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 14/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 15/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 16/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 17/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 18/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 19/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 20/01/2026 │ 1 │ 49.664 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 21/01/2026 │ 1 │ 20.963 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 22/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 23/01/2026 │ 1 │ -22.227 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 24/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 25/01/2026 │ 1 │ 32.61 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 26/01/2026 │ 1 │ -21.707 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 27/01/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 28/01/2026 │ 1 │ -21.939 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 29/01/2026 │ 1 │ 50.715 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 30/01/2026 │ 1 │ -22.455 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 31/01/2026 │ 1 │ 59.691 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 01/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 02/02/2026 │ 3 │ -7.976 │ 0.83 │ 1 0 2 33.3 │
|
||||||
|
│ 03/02/2026 │ 1 │ 22.032 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 04/02/2026 │ 1 │ 33.959 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 05/02/2026 │ 1 │ 39.293 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 06/02/2026 │ 4 │ 74.327 │ 1.89 │ 1 0 3 25.0 │
|
||||||
|
│ 07/02/2026 │ 2 │ 12.485 │ 1.46 │ 1 0 1 50.0 │
|
||||||
|
│ 08/02/2026 │ 2 │ -54.289 │ 0.0 │ 0 0 2 0 │
|
||||||
|
│ 09/02/2026 │ 2 │ -1.939 │ 0.93 │ 1 0 1 50.0 │
|
||||||
|
│ 10/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 11/02/2026 │ 4 │ 20.391 │ 1.38 │ 2 0 2 50.0 │
|
||||||
|
│ 12/02/2026 │ 1 │ 35.171 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 13/02/2026 │ 1 │ -26.178 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 14/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 15/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 16/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 17/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 18/02/2026 │ 1 │ 36.046 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 19/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 20/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 21/02/2026 │ 1 │ -26.642 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 22/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 23/02/2026 │ 1 │ 57.25 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 24/02/2026 │ 2 │ 7.103 │ 1.25 │ 1 0 1 50.0 │
|
||||||
|
│ 25/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 26/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 27/02/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 28/02/2026 │ 1 │ 87.891 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 01/03/2026 │ 1 │ -29.21 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 02/03/2026 │ 1 │ -29.332 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 03/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 04/03/2026 │ 2 │ -57.218 │ 0.0 │ 0 0 2 0 │
|
||||||
|
│ 05/03/2026 │ 1 │ -27.178 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 06/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 07/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 08/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 09/03/2026 │ 1 │ 104.735 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 10/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 11/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 12/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 13/03/2026 │ 1 │ -30.23 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 14/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 15/03/2026 │ 1 │ -28.727 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 16/03/2026 │ 1 │ -27.688 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 17/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 18/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 19/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 20/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 21/03/2026 │ 1 │ 59.772 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 22/03/2026 │ 0 │ 0 │ 0.0 │ 0 0 0 0 │
|
||||||
|
│ 23/03/2026 │ 1 │ -29.287 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 24/03/2026 │ 1 │ 29.577 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 25/03/2026 │ 1 │ -27.872 │ 0.0 │ 0 0 1 0 │
|
||||||
|
│ 26/03/2026 │ 1 │ 36.754 │ 0.0 │ 1 0 0 100 │
|
||||||
|
│ 27/03/2026 │ 1 │ 27.777 │ 0.0 │ 1 0 0 100 │
|
||||||
|
└────────────┴────────┴─────────────────┴───────────────┴────────────────────────┘
|
||||||
|
SUMMARY METRICS
|
||||||
|
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃ Metric ┃ Value ┃
|
||||||
|
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ Backtesting from │ 2026-01-01 00:00:00 │
|
||||||
|
│ Backtesting to │ 2026-03-27 15:43:00 │
|
||||||
|
│ Trading Mode │ Isolated Futures │
|
||||||
|
│ Max open trades │ 1 │
|
||||||
|
│ │ │
|
||||||
|
│ Total/Daily Avg Trades │ 54 / 0.64 │
|
||||||
|
│ Starting balance │ 1000 USDT │
|
||||||
|
│ Final balance │ 1422.136 USDT │
|
||||||
|
│ Absolute profit │ 422.136 USDT │
|
||||||
|
│ Total profit % │ 42.21% │
|
||||||
|
│ CAGR % │ 353.68% │
|
||||||
|
│ Sortino │ 36.18 │
|
||||||
|
│ Sharpe │ 2.25 │
|
||||||
|
│ Calmar │ 96.27 │
|
||||||
|
│ SQN │ 1.35 │
|
||||||
|
│ Profit factor │ 1.55 │
|
||||||
|
│ Expectancy (Ratio) │ 7.82 (0.29) │
|
||||||
|
│ Avg. daily profit │ 4.966 USDT │
|
||||||
|
│ Avg. stake amount │ 1224.501 USDT │
|
||||||
|
│ Total trade volume │ 131900.967 USDT │
|
||||||
|
│ │ │
|
||||||
|
│ Long / Short trades │ 1 / 53 │
|
||||||
|
│ Long / Short profit % │ 3.62% / 38.60% │
|
||||||
|
│ Long / Short profit USDT │ 36.176 / 385.960 │
|
||||||
|
│ │ │
|
||||||
|
│ Best Pair │ BTC/USDT:USDT 42.21% │
|
||||||
|
│ Worst Pair │ BTC/USDT:USDT 42.21% │
|
||||||
|
│ Best trade │ BTC/USDT:USDT 13.07% │
|
||||||
|
│ Worst trade │ BTC/USDT:USDT -2.14% │
|
||||||
|
│ Best day │ 104.735 USDT │
|
||||||
|
│ Worst day │ -57.218 USDT │
|
||||||
|
│ Days win/draw/lose │ 22 / 39 / 19 │
|
||||||
|
│ Min/Max/Avg. Duration Winners │ 0d 00:58 / 6d 10:57 / 1d 15:19 │
|
||||||
|
│ Min/Max/Avg. Duration Losers │ 0d 00:18 / 5d 19:41 / 0d 20:19 │
|
||||||
|
│ Max Consecutive Wins / Loss │ 4 / 5 │
|
||||||
|
│ Rejected Entry signals │ 0 │
|
||||||
|
│ Entry/Exit Timeouts │ 0 / 0 │
|
||||||
|
│ │ │
|
||||||
|
│ Min balance │ 1016.026 USDT │
|
||||||
|
│ Max balance │ 1450.263 USDT │
|
||||||
|
│ Max % of account underwater │ 9.86% │
|
||||||
|
│ Absolute drawdown │ 142.938 USDT (9.86%) │
|
||||||
|
│ Drawdown duration │ 4 days 23:26:00 │
|
||||||
|
│ Profit at drawdown start │ 450.263 USDT │
|
||||||
|
│ Profit at drawdown end │ 307.325 USDT │
|
||||||
|
│ Drawdown start │ 2026-02-28 11:00:00 │
|
||||||
|
│ Drawdown end │ 2026-03-05 10:26:00 │
|
||||||
|
│ Market change │ -24.27% │
|
||||||
|
└───────────────────────────────┴────────────────────────────────┘
|
||||||
|
|
||||||
|
Backtested 2026-01-01 00:00:00 -> 2026-03-27 15:43:00 | Max open trades : 1
|
||||||
|
STRATEGY SUMMARY
|
||||||
|
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
|
||||||
|
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃
|
||||||
|
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩
|
||||||
|
│ EmptyShort │ 54 │ 0.75 │ 422.136 │ 42.21 │ 1 day, 5:07:00 │ 25 0 29 46.3 │ 142.938 USDT 9.86% │
|
||||||
|
└────────────┴────────┴──────────────┴─────────────────┴──────────────┴────────────────┴────────────────────────┴─────────────────────┘
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
"0": 10
|
"0": 10
|
||||||
},
|
},
|
||||||
"stoploss": {
|
"stoploss": {
|
||||||
"stoploss": -1.0
|
"stoploss": -0.02
|
||||||
},
|
},
|
||||||
"trailing": {
|
"trailing": {
|
||||||
"trailing_stop": false,
|
"trailing_stop": false,
|
||||||
|
|||||||
1933
FrictradeLearning.py
1933
FrictradeLearning.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user