Empty5m.py Hyperopt

┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDC ┃ Tot Profit % ┃ Avg Duration ┃  Win  Draw  Loss  Win% ┃           Drawdown ┃
┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
│  Empty5m │     13 │         0.36 │          44.066 │         4.41 │      5:58:00 │   12     0     1  92.3 │ 36.632 USDC  3.39% │
└──────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────┴────────────────────────┴────────────────────┘
This commit is contained in:
Jérôme Delacotte
2026-03-07 21:21:52 +01:00
parent f1bad7949d
commit 12be7e0441
3 changed files with 1323 additions and 94 deletions

View File

@@ -14,33 +14,19 @@
"trailing_only_offset_is_reached": false "trailing_only_offset_is_reached": false
}, },
"max_open_trades": { "max_open_trades": {
"max_open_trades": 1 "max_open_trades": 20
},
"buy": {
"buy_longue_derive": "sma60_deriv1_1h",
"buy_deriv1_sma12d": 0.0002,
"buy_deriv1_sma5d": -0.0006,
"buy_deriv1_sma60": -0.0003,
"buy_longue": 180,
"start_bear_deriv1": 0.005,
"start_bear_deriv2": -0.003,
"start_bear_indicator": "sma60",
"start_bull_deriv1": -0.001,
"start_bull_deriv2": 0.0,
"start_bull_indicator": "sma12"
},
"protection": {
"drop_from_last_entry": -0.03,
"mises_bear": 5,
"mises_bull": 1
}, },
"sell": { "sell": {
"b30_indicateur": "sma24", "b30_indicateur": "sma24",
"baisse": 0.14, "baisse": 0.2,
"sell_force_sell": -0.135, "sell_force_sell": -0.121,
"sell_indicator": "sma12" "sell_indicator": "sma36"
},
"protection": {
"drop_from_last_entry": 0.0,
"mises_bull": 4
} }
}, },
"ft_stratparam_v": 1, "ft_stratparam_v": 1,
"export_time": "2026-03-07 14:31:15.874478+00:00" "export_time": "2026-03-07 20:20:17.895644+00:00"
} }

View File

@@ -187,24 +187,24 @@ class Empty5m(IStrategy):
} }
} }
start_bull_indicator = CategoricalParameter(sma_indicators_d, default='sma100', space='buy', optimize=True, load=True) # start_bull_indicator = CategoricalParameter(sma_indicators_d, default='sma100', space='buy', optimize=True, load=True)
start_bull_deriv1 = DecimalParameter(-0.0005, 0.0005, decimals=3, default=0, space='buy', optimize=True, load=True) # start_bull_deriv1 = DecimalParameter(-0.005, 0.005, decimals=4, default=0, space='buy', optimize=True, load=True)
start_bull_deriv2 = DecimalParameter(-0.0005, 0.0005, decimals=3, default=0, space='buy', optimize=True, load=True) # start_bull_deriv2 = DecimalParameter(-0.005, 0.005, decimals=4, default=0, space='buy', optimize=True, load=True)
start_bear_indicator = CategoricalParameter(sma_indicators_d, default='sma100', space='buy', optimize=True, load=True) # start_bear_indicator = CategoricalParameter(sma_indicators_d, default='sma100', space='buy', optimize=True, load=True)
start_bear_deriv1 = DecimalParameter(-0.005, 0.005, decimals=3, default=0, space='buy', optimize=True, load=True) # start_bear_deriv1 = DecimalParameter(-0.005, 0.005, decimals=4, default=0, space='buy', optimize=True, load=True)
start_bear_deriv2 = DecimalParameter(-0.005, 0.005, decimals=3, default=0, space='buy', optimize=True, load=True) # start_bear_deriv2 = DecimalParameter(-0.005, 0.005, decimals=4, default=0, space='buy', optimize=True, load=True)
buy_deriv1_sma60 = DecimalParameter(-0.0005, 0.0005, decimals=4, default=0, space='buy', optimize=True, load=True) # buy_deriv1_sma60 = DecimalParameter(-0.005, 0.005, decimals=4, default=0, space='buy', optimize=True, load=True)
buy_deriv1_sma5d = DecimalParameter(-0.0007, 0.0007, decimals=4, default=0, space='buy', optimize=True, load=True) # buy_deriv1_sma5d = DecimalParameter(-0.007, 0.007, decimals=4, default=0, space='buy', optimize=True, load=True)
buy_deriv1_sma12d = DecimalParameter(-0.0007, 0.0007, decimals=4, default=0, space='buy', optimize=True, load=True) # buy_deriv1_sma12d = DecimalParameter(-0.007, 0.007, decimals=4, default=0, space='buy', optimize=True, load=True)
# buy_deriv2_sma60 = DecimalParameter(-0.0005, 0.0005, decimals=4, default=0, space='buy', optimize=True, load=True) # buy_deriv2_sma60 = DecimalParameter(-0.0005, 0.0005, decimals=4, default=0, space='buy', optimize=True, load=True)
# buy_deriv2_sma5d = DecimalParameter(-0.0007, 0.0007, decimals=4, default=0, space='buy', optimize=True, load=True) # buy_deriv2_sma5d = DecimalParameter(-0.0007, 0.0007, decimals=4, default=0, space='buy', optimize=True, load=True)
# buy_deriv2_sma12d = DecimalParameter(-0.0007, 0.0007, decimals=4, default=0, space='buy', optimize=True, load=True) # buy_deriv2_sma12d = DecimalParameter(-0.0007, 0.0007, decimals=4, default=0, space='buy', optimize=True, load=True)
buy_longue = CategoricalParameter(long_timeperiods, default=120, space='buy', optimize=True, load=True) # buy_longue = CategoricalParameter(long_timeperiods, default=120, space='buy', optimize=True, load=True)
buy_longue_derive = CategoricalParameter(sma_deriv1_indicators, default="sma60_deriv1_1h", space='buy', optimize=False, load=True) # buy_longue_derive = CategoricalParameter(sma_deriv1_indicators, default="sma60_deriv1_1h", space='buy', optimize=False, load=True)
# sell_score_indicator = CategoricalParameter(score_indicators, default="sma24_score", space='sell') # sell_score_indicator = CategoricalParameter(score_indicators, default="sma24_score", space='sell')
@@ -216,16 +216,14 @@ class Empty5m(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)
mises_bear = IntParameter(1, 10, default=1, space='protection') # mises_bear = IntParameter(1, 10, default=1, space='protection')
mises_bull = IntParameter(1, 10, default=1, space='protection') mises_bull = IntParameter(1, 10, default=1, space='protection')
baisse = DecimalParameter(0.1, 0.5, decimals=2, default=0.3, space='protection', optimize=True, load=True)
b30_indicateur = CategoricalParameter(sma_indicators, default="sma36", space='protection', optimize=True, load=True)
sell_force_sell = DecimalParameter(-0.2, 0, decimals=3, default=-0.02, space='sell') 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) 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) 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) b30_indicateur = CategoricalParameter(sma_indicators, 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')
@@ -258,9 +256,9 @@ class Empty5m(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'] in ['fall', 'bear', 'Force', 'Range-']: # if last_candle['enter_tag'] in ['fall', 'bear', 'Force', 'Range-']:
amount = self.wallets.get_available_stake_amount() / self.mises_bear.value # amount = self.wallets.get_available_stake_amount() / self.mises_bear.value
else: # else:
amount = self.wallets.get_available_stake_amount() / self.mises_bull.value # / (2 * self.pairs[pair]['count_of_lost'] + 1) amount = self.wallets.get_available_stake_amount() / self.mises_bull.value # / (2 * self.pairs[pair]['count_of_lost'] + 1)
# factor = 1 # factor = 1
@@ -334,7 +332,7 @@ class Empty5m(IStrategy):
# stake_amount = trade.stake_amount # stake_amount = trade.stake_amount
self.pairs[trade.pair]['last_buy'] = current_rate self.pairs[trade.pair]['last_buy'] = current_rate
self.pairs[trade.pair]['total_amount'] += stake_amount self.pairs[trade.pair]['total_amount'] += stake_amount
print(f"adjust {pair} drop={drop_from_last_entry} {current_time} dispo={dispo} amount={stake_amount} rate={current_rate}") # print(f"adjust {pair} drop={drop_from_last_entry} {current_time} dispo={dispo} amount={stake_amount} rate={current_rate}")
# print(f"adjust {pair} {current_time} dispo={dispo} amount={stake_amount} rate={current_rate}") # print(f"adjust {pair} {current_time} dispo={dispo} amount={stake_amount} rate={current_rate}")
trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48' trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48'
@@ -566,12 +564,16 @@ class Empty5m(IStrategy):
self.pairs[pair]['force_sell'] = True self.pairs[pair]['force_sell'] = True
return 'sma' return 'sma'
if profit > max(5, expected_profit) and \ if profit > 0 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]) \
and last_candle['hapercent'] <0 : and last_candle['hapercent'] <0 :
self.pairs[pair]['force_sell'] = True self.pairs[pair]['force_sell'] = True
return 'B30' return 'B30'
# if profit > 0 and baisse > 0.5 and last_candle['hapercent'] <0 and last_candle[f"close"] <= last_candle['sma12']:
# self.pairs[pair]['force_sell'] = True
# return 'B50'
if current_profit > - self.sell_force_sell.value and last_candle['has_cross_sma3_1h'] == 1: if current_profit > - self.sell_force_sell.value and last_candle['has_cross_sma3_1h'] == 1:
self.pairs[pair]['force_sell'] = True self.pairs[pair]['force_sell'] = True
return 'Cross' return 'Cross'
@@ -676,9 +678,28 @@ class Empty5m(IStrategy):
dataframe[f'min{timeperiod}'] = talib.MIN(dataframe['close'], timeperiod=timeperiod) dataframe[f'min{timeperiod}'] = talib.MIN(dataframe['close'], timeperiod=timeperiod)
dataframe[f"percent{timeperiod}"] = dataframe['close'].pct_change(timeperiod) dataframe[f"percent{timeperiod}"] = dataframe['close'].pct_change(timeperiod)
dataframe[f"sma{timeperiod}"] = dataframe['mid'].ewm(span=timeperiod, adjust=False).mean() dataframe[f"sma{timeperiod}"] = dataframe['mid'].ewm(span=timeperiod, adjust=False).mean()
# dataframe[f"high{timeperiod}"] = dataframe['high'].ewm(span=timeperiod, adjust=False).mean()
# dataframe[f"low{timeperiod}"] = dataframe['low'].ewm(span=timeperiod, adjust=False).mean()
# dataframe = self.calculateRegression(dataframe, column=f"high{timeperiod}", window=10, degree=1, future_offset=12)
# dataframe = self.calculateRegression(dataframe, column=f"low{timeperiod}", window=10, degree=1, future_offset=12)
self.calculeDerivees(dataframe, f"sma{timeperiod}", timeframe=self.timeframe, ema_period=timeperiod) self.calculeDerivees(dataframe, f"sma{timeperiod}", timeframe=self.timeframe, ema_period=timeperiod)
dataframe = self.calculateRegression(dataframe, column='mid', window=30, degree=1, future_offset=12) dataframe = self.calculateRegression(dataframe, column='mid', window=30, degree=1, future_offset=12)
dataframe = self.calculateRegression(dataframe, column='sma24', window=30, degree=1, future_offset=12)
dataframe["percent"] = dataframe["mid"].pct_change(1)
dataframe["percent3"] = dataframe["mid"].pct_change(3)
dataframe["volume_mean"] = dataframe["volume"].rolling(20).mean()
dataframe["volume_ratio"] = dataframe["volume"] / dataframe["volume_mean"]
dataframe["market_state"] = 0
dataframe.loc[dataframe["percent"] < -0.005, "market_state"] = -1
dataframe.loc[(dataframe["percent3"] < -0.015) & (dataframe["volume_ratio"] > 2), "market_state"] = -2
dataframe.loc[(dataframe["percent"] > 0.003) & (dataframe["volume_ratio"] > 1.5), "market_state"] = 1
dataframe["velocity"] = dataframe["percent"] - dataframe["percent3"]
# ###################################################################################################### # ######################################################################################################
################### INFORMATIVE 1h ################### INFORMATIVE 1h
@@ -698,6 +719,7 @@ class Empty5m(IStrategy):
self.calculeDerivees(informative, f"sma{timeperiod}", timeframe=self.timeframe, ema_period=timeperiod) self.calculeDerivees(informative, f"sma{timeperiod}", timeframe=self.timeframe, ema_period=timeperiod)
informative = self.calculateRegression(informative, column='sma3', window=10, degree=1, future_offset=12) informative = self.calculateRegression(informative, column='sma3', window=10, degree=1, future_offset=12)
informative = self.calculateRegression(informative, column='low', window=10, degree=1, future_offset=12)
for timeperiod in long_timeperiods: for timeperiod in long_timeperiods:
informative[f"sma{timeperiod}"] = informative['mid'].ewm(span=timeperiod, adjust=False).mean() informative[f"sma{timeperiod}"] = informative['mid'].ewm(span=timeperiod, adjust=False).mean()
@@ -733,8 +755,8 @@ class Empty5m(IStrategy):
# dataframe['cross_sma60'] = qtpylib.crossed_below(dataframe[self.sell_sma_indicators.value], dataframe[self.sell_crossed_sma_indicators.value]) # dataframe['cross_sma60'] = qtpylib.crossed_below(dataframe[self.sell_sma_indicators.value], dataframe[self.sell_crossed_sma_indicators.value])
dataframe[f'has_cross_sma3_1h'] = qtpylib.crossed_above(dataframe[f"sma60"], dataframe['sma3_regression_1h']) dataframe[f'has_cross_sma3_1h'] = qtpylib.crossed_above(dataframe[f"sma60"], dataframe['sma3_regression_1h'])
dataframe[f'has_cross_min'] = qtpylib.crossed_above(dataframe[f"close"], dataframe['min60_1h']) dataframe[f'has_cross_min'] = qtpylib.crossed_above(dataframe[f"close"], dataframe['min60'])
dataframe[f'has_cross_min_6'] = (dataframe['has_cross_min'].rolling(6).max() == 1) dataframe[f'has_cross_min_6'] = (dataframe['has_cross_min'].rolling(15).max() == 1)
dataframe['atr'] = talib.ATR(dataframe) dataframe['atr'] = talib.ATR(dataframe)
dataframe['rsi'] = talib.RSI(dataframe['close'], timeperiod=14) dataframe['rsi'] = talib.RSI(dataframe['close'], timeperiod=14)
@@ -762,11 +784,11 @@ class Empty5m(IStrategy):
# ##################################################################################### # #####################################################################################
# CA MONTE !! # CA MONTE !!
# ##################################################################################### # #####################################################################################
conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv1_1h" ] > self.start_bull_deriv1.value) # conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv1_1h" ] > self.start_bull_deriv1.value)
conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv2_1h"] > self.start_bull_deriv2.value) # conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv2_1h"] > 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_1h'] > self.buy_deriv1_sma5d.value) # conditions.append(dataframe['sma5_deriv1_1h'] > self.buy_deriv1_sma5d.value)
conditions.append(dataframe['sma12_deriv1_1h'] > self.buy_deriv1_sma12d.value) # conditions.append(dataframe['sma12_deriv1_1h'] > self.buy_deriv1_sma12d.value)
# conditions.append(dataframe['sma36_deriv2'] > self.buy_deriv2_sma60.value) # conditions.append(dataframe['sma36_deriv2'] > self.buy_deriv2_sma60.value)
# conditions.append(dataframe['sma5_deriv2_1h'] > self.buy_deriv2_sma5d.value) # conditions.append(dataframe['sma5_deriv2_1h'] > self.buy_deriv2_sma5d.value)
@@ -787,11 +809,11 @@ class Empty5m(IStrategy):
# | (dataframe['sma60_inv_1h'] == -1) # | (dataframe['sma60_inv_1h'] == -1)
# ) # )
if conditions: # if conditions:
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, 'bull') # ] = (1, 'bull')
# ##################################################################################### # #####################################################################################
# conditions = list() # conditions = list()
@@ -835,39 +857,39 @@ class Empty5m(IStrategy):
# }, # },
# ##################################################################################### # #####################################################################################
conditions = list() conditions = list()
conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv1_1h" ] < self.start_bull_deriv1.value) # conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv1_1h" ] < self.start_bull_deriv1.value)
conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv2_1h"] < self.start_bull_deriv2.value) # conditions.append(dataframe[f"{self.start_bull_indicator.value}_deriv2_1h"] < self.start_bull_deriv2.value)
conditions.append(dataframe[f"{self.start_bear_indicator.value}_deriv1_1h" ] > self.start_bear_deriv1.value) # conditions.append(dataframe[f"{self.start_bear_indicator.value}_deriv1_1h" ] > self.start_bear_deriv1.value)
conditions.append(dataframe[f"{self.start_bear_indicator.value}_deriv2_1h"] > self.start_bear_deriv2.value) # conditions.append(dataframe[f"{self.start_bear_indicator.value}_deriv2_1h"] > self.start_bear_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_1h'] > self.buy_deriv1_sma5d.value) # conditions.append(dataframe['sma5_deriv1_1h'] > self.buy_deriv1_sma5d.value)
conditions.append(dataframe['sma12_deriv1_1h'] > self.buy_deriv1_sma12d.value) # conditions.append(dataframe['sma12_deriv1_1h'] > self.buy_deriv1_sma12d.value)
#
# # conditions.append(dataframe['sma12_deriv2'] > -0.002)
# # conditions.append(dataframe['sma5_deriv2_1h'] > 0)
# # conditions.append(dataframe['sma12_deriv2_1h'] > -0.03)
#
# conditions.append(dataframe['hapercent'] > 0)
# # conditions.append(dataframe['percent12'] < 0.01)
# # conditions.append(dataframe['percent5'] < 0.01)
# conditions.append(dataframe['max_rsi_24'] < 80)
#
# dynamic_rsi_threshold = 70 + 15 * np.tanh(dataframe["dist_sma200_1h"] * 5)
# conditions.append((dataframe['max_rsi_12_1h'] < dynamic_rsi_threshold))
# 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_1h'] > dataframe[f'sma{self.buy_longue.value}_1h'])
# | (dataframe['sma60_inv_1h'] == -1)
# )
# conditions.append(dataframe['sma12_deriv2'] > -0.002) # if conditions:
# conditions.append(dataframe['sma5_deriv2_1h'] > 0) # dataframe.loc[
# conditions.append(dataframe['sma12_deriv2_1h'] > -0.03) # reduce(lambda x, y: x & y, conditions),
# ['enter_long', 'enter_tag']
conditions.append(dataframe['hapercent'] > 0) # ] = (1, 'bear')
# conditions.append(dataframe['percent12'] < 0.01)
# conditions.append(dataframe['percent5'] < 0.01)
conditions.append(dataframe['max_rsi_24'] < 80)
dynamic_rsi_threshold = 70 + 15 * np.tanh(dataframe["dist_sma200_1h"] * 5)
conditions.append((dataframe['max_rsi_12_1h'] < dynamic_rsi_threshold))
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_1h'] > dataframe[f'sma{self.buy_longue.value}_1h'])
| (dataframe['sma60_inv_1h'] == -1)
)
if conditions:
dataframe.loc[
reduce(lambda x, y: x & y, conditions),
['enter_long', 'enter_tag']
] = (1, 'bear')
# conditions = list() # conditions = list()
# conditions.append(dataframe['close_1h'] < dataframe[f'sma{self.buy_longue.value}_1h']) # conditions.append(dataframe['close_1h'] < dataframe[f'sma{self.buy_longue.value}_1h'])
@@ -907,15 +929,18 @@ class Empty5m(IStrategy):
# ['enter_long', 'enter_tag'] # ['enter_long', 'enter_tag']
# ] = (1, 'Force') # ] = (1, 'Force')
# conditions = list() conditions = list()
# conditions.append(dataframe['mid_regression'].shift(2) > dataframe['mid_regression'].shift(1)) # conditions.append(dataframe['mid_regression'].shift(2) > dataframe['mid_regression'].shift(1))
# conditions.append(dataframe['mid_regression'].shift(1) < dataframe['mid_regression']) # conditions.append(dataframe['mid_regression'].shift(1) < dataframe['mid_regression'])
# conditions.append(dataframe['has_cross_min_6'] == 1) conditions.append(dataframe['close'] <= dataframe['min12_1h'])
# # conditions.append(dataframe['sma12_deriv1'] >= 0) conditions.append(dataframe['min60'] == dataframe['min60'].shift(5))
# dataframe.loc[ conditions.append(dataframe['has_cross_min_6'] == 1)
# reduce(lambda x, y: x & y, conditions), # conditions.append(dataframe['min5_1h'] / dataframe['min12_1h'] < 0.03)
# ['enter_long', 'enter_tag'] # conditions.append(dataframe['sma12_deriv1'] >= 0)
# ] = (1, 'Mid') dataframe.loc[
reduce(lambda x, y: x & y, conditions),
['enter_long', 'enter_tag']
] = (1, 'Mid')
return dataframe return dataframe

1218
EmptyAI.py Normal file

File diff suppressed because it is too large Load Diff