TEST mid_smooth_5_deriv1_1d
This commit is contained in:
@@ -211,21 +211,21 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
trades = list()
|
||||
max_profit_pairs = {}
|
||||
|
||||
sma20_deriv1_1d_stop_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=2, space='protection',
|
||||
optimize=True, load=True)
|
||||
sma5_deriv1_1d_stop_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=2, space='protection',
|
||||
# sma20_deriv1_1d_stop_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=2, space='protection',
|
||||
# optimize=True, load=True)
|
||||
sma5_deriv1_1d_stop_protection = DecimalParameter(-0.2, 0, default=0.05, decimals=2, space='protection',
|
||||
optimize=True, load=True)
|
||||
sma5_deriv2_1d_stop_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=1, space='protection', optimize=True,
|
||||
sma5_deriv2_1d_stop_protection = DecimalParameter(-0.2, 0, default=0.05, decimals=1, space='protection', optimize=True,
|
||||
load=True)
|
||||
|
||||
sma20_deriv1_1d_start_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=2, space='protection',
|
||||
optimize=True, load=True)
|
||||
sma5_deriv1_1d_start_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=2, space='protection',
|
||||
# sma20_deriv1_1d_start_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=2, space='protection',
|
||||
# optimize=True, load=True)
|
||||
sma5_deriv1_1d_restart_protection = DecimalParameter(0, 0.2, default=0.05, decimals=2, space='protection',
|
||||
optimize=True, load=True)
|
||||
sma5_deriv2_1d_start_protection = DecimalParameter(-0.2, 0.2, default=0.05, decimals=1, space='protection', optimize=True,
|
||||
sma5_deriv2_1d_restart_protection = DecimalParameter(0, 0.2, default=0.05, decimals=1, space='protection', optimize=True,
|
||||
load=True)
|
||||
|
||||
# sma5_deriv1_1d_protection = DecimalParameter(-0.1, 0.0, default=-0.05, decimals=2, space='protection', optimize=True, load=True)
|
||||
mise_factor_buy = DecimalParameter(0.01, 0.2, default=0.05, decimals=2, space='buy', optimize=True, load=True)
|
||||
|
||||
# Récupération des labels ordonnés
|
||||
# labels = ['B5', 'B4', 'B3', 'B2', 'B1', 'N0', 'H1', 'H2', 'H3', 'H4', 'H5']
|
||||
@@ -447,11 +447,11 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
days_since_first_buy = (current_time - trade.open_date_utc).days
|
||||
hours = (current_time - trade.date_last_filled_utc).total_seconds() / 3600.0
|
||||
|
||||
if self.pairs[pair]['stop'] and hours % 6 == 0:
|
||||
if hours % 4 == 0:
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🟠 CURRENT",
|
||||
action="🔴 CURRENT" if self.pairs[pair]['stop'] else "🟢 CURRENT",
|
||||
dispo=dispo,
|
||||
pair=pair,
|
||||
rate=last_candle['close'],
|
||||
@@ -611,8 +611,8 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
|
||||
color = GREEN if profit > 0 else RED
|
||||
color_sma20 = GREEN if last_candle['sma20_deriv1_1d'] > 0 else RED
|
||||
color_sma5 = GREEN if last_candle['sma5_deriv1_1d'] > 0 else RED
|
||||
color_sma5_2 = GREEN if last_candle['sma5_deriv2_1d'] > 0 else RED
|
||||
color_sma5 = GREEN if last_candle['mid_smooth_5_deriv1_1d'] > 0 else RED
|
||||
color_sma5_2 = GREEN if last_candle['mid_smooth_5_deriv2_1d'] > 0 else RED
|
||||
color_sma5_1h = GREEN if last_candle['sma5_deriv1_1h'] > 0 else RED
|
||||
color_sma5_2h = GREEN if last_candle['sma5_deriv2_1h'] > 0 else RED
|
||||
color_smooth_1h = GREEN if last_candle['mid_smooth_1h_deriv1'] > 0 else RED
|
||||
@@ -638,7 +638,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
# 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"{dist_max:>7}|{color_sma20}{round(last_candle['sma20_deriv1_1d'], 2):>5}{RESET}"
|
||||
f"|{color_sma5}{round(last_candle['sma5_deriv1_1d'], 2):>5}{RESET}|{color_sma5_2}{round(last_candle['sma5_deriv2_1d'], 2):>5}{RESET}"
|
||||
f"|{color_sma5}{round(last_candle['mid_smooth_5_deriv1_1d'], 2):>5}{RESET}|{color_sma5_2}{round(last_candle['mid_smooth_5_deriv2_1d'], 2):>5}{RESET}"
|
||||
f"|{color_sma5_1h}{round(last_candle['sma5_deriv1_1h'], 2):>5}{RESET}|{color_sma5_2h}{round(last_candle['sma5_deriv2_1h'], 2):>5}{RESET}"
|
||||
f"|{color_smooth_1h}{round(last_candle['mid_smooth_1h_deriv1'], 2):>5}{RESET}|{color_smooth2_1h}{round(last_candle['mid_smooth_1h_deriv2'], 2):>5}{RESET}"
|
||||
# f"|{last_candle['min60_1d']}|{last_candle['max60_1d']}"
|
||||
@@ -663,16 +663,18 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
)
|
||||
|
||||
def printLog(self, str):
|
||||
if self.config.get('runmode') == 'hyperopt' or self.dp.runmode.value in ('hyperopt'):
|
||||
return;
|
||||
if not self.dp.runmode.value in ('backtest', 'hyperopt', 'lookahead-analysis'):
|
||||
logger.info(str)
|
||||
else:
|
||||
if not self.dp.runmode.value in ('hyperopt'):
|
||||
print(str)
|
||||
|
||||
def add_tendency_column(self, dataframe: pd.DataFrame, suffixe='') -> pd.DataFrame:
|
||||
def add_tendency_column(self, dataframe: pd.DataFrame, name, suffixe='') -> pd.DataFrame:
|
||||
def tag_by_derivatives(row):
|
||||
d1 = row[f"mid_smooth{suffixe}_deriv1"]
|
||||
d2 = row[f"mid_smooth{suffixe}_deriv2"]
|
||||
d1 = row[f"{name}{suffixe}_deriv1"]
|
||||
d2 = row[f"{name}{suffixe}_deriv2"]
|
||||
d1_lim_inf = -0.01
|
||||
d1_lim_sup = 0.01
|
||||
if d1 >= d1_lim_inf and d1 <= d1_lim_sup: # and d2 >= d2_lim_inf and d2 <= d2_lim_sup:
|
||||
@@ -797,6 +799,10 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
|
||||
################### INFORMATIVE 1d
|
||||
informative = self.dp.get_pair_dataframe(pair=metadata['pair'], timeframe="1d")
|
||||
heikinashi = qtpylib.heikinashi(informative)
|
||||
informative['haopen'] = heikinashi['open']
|
||||
informative['haclose'] = heikinashi['close']
|
||||
informative['hapercent'] = (informative['haclose'] - informative['haopen']) / informative['haclose']
|
||||
# informative = self.calculateDerivation(informative, window=5, factor_1=10000, factor_2=1000)
|
||||
# informative['volatility'] = talib.STDDEV(informative['close'], timeperiod=14) / informative['close']
|
||||
# informative['atr'] = (talib.ATR(informative['high'], informative['low'], informative['close'], timeperiod=14)) / informative['close']
|
||||
@@ -820,6 +826,12 @@ 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 = self.add_tendency_column(informative, "", "sma5")
|
||||
informative = self.add_tendency_column(informative, "", "sma20")
|
||||
|
||||
# mid_smooth_5_deriv1_1d / mid_smooth_5_deriv2_1d
|
||||
informative = self.calculateDerivation(informative, window=5, suffixe="_5")
|
||||
|
||||
macd, macdsignal, macdhist = talib.MACD(
|
||||
informative['close'],
|
||||
fastperiod=12,
|
||||
@@ -1023,7 +1035,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
# 3. Dérivée seconde = différence de la dérivée première
|
||||
dataframe[f"mid_smooth{suffixe}_deriv2"] = round(
|
||||
factor_2 * dataframe[f"mid_smooth{suffixe}_deriv1"].rolling(window=3).mean().diff(), 4)
|
||||
dataframe = self.add_tendency_column(dataframe, suffixe)
|
||||
dataframe = self.add_tendency_column(dataframe, "mid_smooth", suffixe)
|
||||
return dataframe
|
||||
|
||||
def getOpenTrades(self):
|
||||
@@ -1414,7 +1426,7 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
max_amount = self.config.get('stake_amount') * 2.5
|
||||
# stake_amount = min(stake_amount, self.wallets.get_available_stake_amount())
|
||||
stake_amount = min(min(max_amount, self.wallets.get_available_stake_amount()),
|
||||
self.adjust_stake_amount(pair, last_candle) - 10 * pct_first / 0.05) # min(200, self.adjust_stake_amount(pair, last_candle) * self.fibo[count_of_buys])
|
||||
self.adjust_stake_amount(pair, last_candle) - 10 * pct_first / self.mise_factor_buy.value) # min(200, self.adjust_stake_amount(pair, last_candle) * self.fibo[count_of_buys])
|
||||
|
||||
trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48'
|
||||
self.pairs[trade.pair]['count_of_buys'] += 1
|
||||
@@ -2168,14 +2180,32 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
# 🔴 Dérivée 1 < 0 et dérivée 2 < 0: tendance baissière qui s’accélère.
|
||||
# 🟠 Dérivée 1 < 0 et dérivée 2 > 0: tendance baissière qui ralentit → possible bottom.
|
||||
|
||||
if not pair.startswith('BTC'):
|
||||
if self.pairs[pair]['stop'] and last_candle['sma5_deriv1_1d'] > self.sma5_deriv1_1d_stop_protection.value \
|
||||
and last_candle['sma5_deriv2_1d'] > self.sma5_deriv2_1d_stop_protection.value:
|
||||
self.pairs[pair]['stop'] = False
|
||||
# if not pair.startswith('BTC'):
|
||||
if self.pairs[pair]['stop'] \
|
||||
and last_candle['mid_smooth_5_deriv1_1d'] > self.sma5_deriv1_1d_restart_protection.value \
|
||||
and last_candle['mid_smooth_5_deriv2_1d'] > self.sma5_deriv2_1d_restart_protection.value:
|
||||
self.pairs[pair]['stop'] = False
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🟢RESTART",
|
||||
dispo=0,
|
||||
pair=pair,
|
||||
rate=last_candle['close'],
|
||||
trade_type='',
|
||||
profit=0, # round(current_profit * trade.stake_amount, 2),
|
||||
buys='',
|
||||
stake=0
|
||||
)
|
||||
else:
|
||||
if self.pairs[pair]['stop'] == False \
|
||||
and last_candle['mid_smooth_5_deriv1_1d'] < self.sma5_deriv1_1d_stop_protection.value \
|
||||
and last_candle['mid_smooth_5_deriv2_1d'] < self.sma5_deriv2_1d_stop_protection.value:
|
||||
self.pairs[pair]['stop'] = True
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🟢RESTART",
|
||||
action="🔴STOP",
|
||||
dispo=0,
|
||||
pair=pair,
|
||||
rate=last_candle['close'],
|
||||
@@ -2184,25 +2214,9 @@ class Zeus_8_3_2_B_4_2(IStrategy):
|
||||
buys='',
|
||||
stake=0
|
||||
)
|
||||
else:
|
||||
if self.pairs[pair]['stop'] == False and last_candle['sma5_deriv1_1d'] < - self.sma5_deriv1_1d_start_protection.value \
|
||||
and last_candle['sma5_deriv2_1d'] < - self.sma5_deriv2_1d_start_protection.value:
|
||||
self.pairs[pair]['stop'] = True
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🔴🔴🔴🔴🔴 🔴STOP",
|
||||
dispo=0,
|
||||
pair=pair,
|
||||
rate=last_candle['close'],
|
||||
trade_type='',
|
||||
profit=0, # round(current_profit * trade.stake_amount, 2),
|
||||
buys='',
|
||||
stake=0
|
||||
)
|
||||
return False
|
||||
if self.pairs[pair]['stop']:
|
||||
return False
|
||||
if self.pairs[pair]['stop']:
|
||||
return False
|
||||
|
||||
if last_candle['sma5_deriv1_1h'] < -0.1:
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user