Compare commits
58 Commits
main
...
4c0692426e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c0692426e | ||
|
|
ee45dc890d | ||
|
|
7720646267 | ||
|
|
682c146a66 | ||
|
|
a061a9d941 | ||
|
|
aabfce79ec | ||
|
|
36f4e94020 | ||
|
|
67f617a5da | ||
|
|
96d6d4b679 | ||
|
|
bd0933cb6a | ||
|
|
48ceb7f460 | ||
|
|
b8da3af406 | ||
|
|
1090093735 | ||
|
|
70ceb76f1b | ||
|
|
7a55dd2565 | ||
|
|
6be42bc155 | ||
|
|
83f3923bbf | ||
|
|
5d8f5dcb96 | ||
|
|
88a43dbd23 | ||
|
|
3b14693536 | ||
|
|
39bd32370a | ||
|
|
845d2588d5 | ||
|
|
4d875a4c97 | ||
|
|
7f0e4905bf | ||
|
|
82391fcde1 | ||
|
|
5a9adb0b53 | ||
|
|
a932ebd369 | ||
|
|
468ada80ca | ||
|
|
d0ac71f60d | ||
|
|
96976e842d | ||
|
|
77e7f797fe | ||
|
|
b0a22e61c5 | ||
|
|
faec58ef19 | ||
|
|
685c04da50 | ||
|
|
09d9dd1583 | ||
|
|
23fa2f7765 | ||
|
|
27847fea95 | ||
|
|
9cce16610d | ||
|
|
24d10698d2 | ||
|
|
0efc4853a7 | ||
|
|
28c33cf3b9 | ||
|
|
121eda7837 | ||
|
|
088958952e | ||
|
|
2f66ab3be7 | ||
|
|
a0143c38e1 | ||
|
|
4ecc40b7aa | ||
|
|
d7280410ff | ||
|
|
384404e590 | ||
|
|
18c940b06c | ||
|
|
e43702f10c | ||
|
|
f10344fff2 | ||
|
|
340ada3221 | ||
|
|
2b0b8953c8 | ||
|
|
f5847ffc25 | ||
|
|
86bcb1240e | ||
|
|
d1cf9ab72f | ||
|
|
501f5507ca | ||
|
|
4d37361bc6 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
.idea/
|
||||
__pycache__/
|
||||
__pycache__/
|
||||
Save/
|
||||
**/__pycache__/
|
||||
|
||||
|
||||
265
Simple.py
Normal file
265
Simple.py
Normal file
@@ -0,0 +1,265 @@
|
||||
# Zeus Strategy: First Generation of GodStra Strategy with maximum
|
||||
# AVG/MID profit in USDT
|
||||
# Author: @Mablue (Masoud Azizi)
|
||||
# github: https://github.com/mablue/
|
||||
# IMPORTANT: INSTALL TA BEFOUR RUN(pip install ta)
|
||||
# freqtrade hyperopt --hyperopt-loss SharpeHyperOptLoss --spaces buy sell roi --strategy Zeus
|
||||
# --- Do not remove these libs ---
|
||||
from datetime import timedelta, datetime
|
||||
from freqtrade.persistence import Trade
|
||||
from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter, stoploss_from_open,
|
||||
IntParameter, IStrategy, merge_informative_pair, informative, stoploss_from_absolute)
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from pandas import DataFrame
|
||||
from typing import Optional, Union, Tuple
|
||||
from typing import List
|
||||
|
||||
import logging
|
||||
import configparser
|
||||
from technical import pivots_points
|
||||
# --------------------------------
|
||||
|
||||
# Add your lib to import here test git
|
||||
import ta
|
||||
import talib.abstract as talib
|
||||
import freqtrade.vendor.qtpylib.indicators as qtpylib
|
||||
import requests
|
||||
from datetime import timezone, timedelta
|
||||
from scipy.signal import savgol_filter
|
||||
from ta.trend import SMAIndicator, EMAIndicator, MACD, ADXIndicator
|
||||
from collections import Counter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
from tabulate import tabulate
|
||||
|
||||
# Couleurs ANSI de base
|
||||
RED = "\033[31m"
|
||||
GREEN = "\033[32m"
|
||||
YELLOW = "\033[33m"
|
||||
BLUE = "\033[34m"
|
||||
MAGENTA = "\033[35m"
|
||||
CYAN = "\033[36m"
|
||||
RESET = "\033[0m"
|
||||
|
||||
|
||||
def pprint_df(dframe):
|
||||
print(tabulate(dframe, headers='keys', tablefmt='psql', showindex=False))
|
||||
|
||||
|
||||
def normalize(df):
|
||||
df = (df - df.min()) / (df.max() - df.min())
|
||||
return df
|
||||
|
||||
"""
|
||||
SMA z-score derivative strategy with trailing exit (large).
|
||||
- timeframe: 1h
|
||||
- sma5, relative derivatives, z-score normalization (rolling z over z_window)
|
||||
- smoothing: ewm(span=5) on z-scores
|
||||
- entry: z_d1_smooth > entry_z1 AND z_d2_smooth > entry_z2
|
||||
- exit: inversion (z_d1_smooth < 0) AND retrace from highest since entry >= trailing_stop
|
||||
"""
|
||||
class Simple(IStrategy):
|
||||
levels = [1, 2, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
|
||||
startup_candle_count = 12 * 24 * 2
|
||||
|
||||
# ROI table:
|
||||
minimal_roi = {
|
||||
"0": 10
|
||||
}
|
||||
stakes = 40
|
||||
|
||||
# Stoploss:
|
||||
stoploss = -1 # 0.256
|
||||
# Custom stoploss
|
||||
use_custom_stoploss = True
|
||||
|
||||
# Buy hypers
|
||||
timeframe = '1h'
|
||||
|
||||
max_open_trades = 5
|
||||
max_amount = 40
|
||||
|
||||
# DCA config
|
||||
position_adjustment_enable = True
|
||||
|
||||
# Parameters (tweakable)
|
||||
z_window = 50 # window for rolling mean/std to compute zscore
|
||||
entry_z1 = 0.1 # threshold on z-score of first derivative
|
||||
entry_z2 = 0.1 # threshold on z-score of second derivative
|
||||
min_volume = 0.0 # minimal volume to accept an entry
|
||||
min_relative_d1 = 1e-6 # clip tiny d1 relative values to reduce noise
|
||||
|
||||
# Trailing parameters for "large" trailing requested
|
||||
trailing_stop_pct = 0.05 # 5% retracement from highest since entry
|
||||
|
||||
# Smoothing for z-scores
|
||||
ewm_span = 5
|
||||
|
||||
# Plot config: price + sma5 + markers + slope/accel subplots
|
||||
plot_config = {
|
||||
"main_plot": {
|
||||
"close": {"color": "blue"},
|
||||
"sma5": {"color": "orange"},
|
||||
},
|
||||
"subplots": {
|
||||
"slope_and_accel": {
|
||||
"z_d1": {"color": "green"},
|
||||
"z_d2": {"color": "red"},
|
||||
}
|
||||
},
|
||||
# Markers (Freqtrade charting supports markers via these keys)
|
||||
"markers": [
|
||||
# buy marker: '^' green when enter_long==1
|
||||
{"type": "buy", "column": "enter_long", "marker": "^", "color": "green", "markersize": 10},
|
||||
# sell marker: 'v' red when exit_long==1
|
||||
{"type": "sell", "column": "exit_long", "marker": "v", "color": "red", "markersize": 10},
|
||||
],
|
||||
}
|
||||
|
||||
def informative_pairs(self):
|
||||
return []
|
||||
|
||||
def _zscore(self, series: pd.Series, window: int) -> pd.Series:
|
||||
mean = series.rolling(window=window, min_periods=3).mean()
|
||||
std = series.rolling(window=window, min_periods=3).std(ddof=0)
|
||||
z = (series - mean) / std
|
||||
z = z.replace([np.inf, -np.inf], np.nan)
|
||||
return z
|
||||
|
||||
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
df = dataframe
|
||||
|
||||
# SMA(5)
|
||||
df['sma5'] = df['close'].rolling(5, min_periods=1).mean()
|
||||
|
||||
# Absolute derivatives
|
||||
df['sma5_d1'] = df['sma5'].diff().rolling(5).mean()
|
||||
df['sma5_d2'] = df['sma5_d1'].diff().rolling(5).mean()
|
||||
|
||||
# Relative derivatives (percentage-like)
|
||||
eps = 1e-9
|
||||
df['sma5_d1_rel'] = df['sma5_d1'] / (df['sma5'].shift(1).replace(0, np.nan) + eps)
|
||||
df['sma5_d2_rel'] = df['sma5_d2'] / (df['sma5'].shift(2).replace(0, np.nan) + eps)
|
||||
|
||||
# Clip micro-noise
|
||||
df.loc[df['sma5_d1_rel'].abs() < self.min_relative_d1, 'sma5_d1_rel'] = 0.0
|
||||
df.loc[df['sma5_d2_rel'].abs() < self.min_relative_d1, 'sma5_d2_rel'] = 0.0
|
||||
|
||||
# Z-scores on relative derivatives
|
||||
df['z_d1'] = self._zscore(df['sma5_d1_rel'], self.z_window)
|
||||
df['z_d2'] = self._zscore(df['sma5_d2_rel'], self.z_window)
|
||||
|
||||
# Smoothing z-scores with EWM to reduce jitter
|
||||
df['z_d1_smooth'] = df['z_d1'].ewm(span=self.ewm_span, adjust=False).mean()
|
||||
df['z_d2_smooth'] = df['z_d2'].ewm(span=self.ewm_span, adjust=False).mean()
|
||||
|
||||
# Prepare marker columns (for plots). They will be filled in populate_entry_trend/populate_exit_trend
|
||||
df['enter_long'] = 0
|
||||
df['exit_long'] = 0
|
||||
|
||||
return df
|
||||
|
||||
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
df = dataframe.copy()
|
||||
|
||||
# Use last closed candle for signals -> shift(1)
|
||||
cond_entry = (
|
||||
(df['z_d1'] > self.entry_z1) &
|
||||
(df['z_d2'] > self.entry_z2) &
|
||||
(df['volume'].shift(1) > self.min_volume)
|
||||
)
|
||||
|
||||
df.loc[cond_entry, 'enter_long'] = 1
|
||||
# Ensure others are explicitly zero (for clean plotting)
|
||||
df.loc[~cond_entry, 'enter_long'] = 0
|
||||
|
||||
return df
|
||||
|
||||
def custom_exit(self, pair: str, trade: Trade, current_time, current_rate, current_profit, **kwargs) -> \
|
||||
Optional[str]:
|
||||
"""
|
||||
Exit policy (mode C - trailing large):
|
||||
- Must detect inversion: z_d1_smooth < 0 on last closed candle
|
||||
- Compute highest close since trade entry (inclusive)
|
||||
- If price has retraced >= trailing_stop_pct from that highest point and we're in inversion -> exit
|
||||
"""
|
||||
|
||||
df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||
last = df.iloc[-1].squeeze()
|
||||
|
||||
z1 = last.get('z_d1_smooth', None)
|
||||
if z1 is None:
|
||||
return None
|
||||
|
||||
# Only consider exits when inversion detected (z1 < 0)
|
||||
inversion = (z1 < 0)
|
||||
|
||||
if not inversion:
|
||||
return None
|
||||
|
||||
# If we don't have profit info, be conservative
|
||||
if current_profit is None:
|
||||
return None
|
||||
|
||||
# Determine highest close since entry
|
||||
highest_since_entry = None
|
||||
try:
|
||||
# trade.open_date_utc is available: find rows after that timestamp
|
||||
# df.index is expected to be pd.DatetimeIndex in UTC or local; convert safely
|
||||
if hasattr(trade, 'open_date_utc') and trade.open_date_utc:
|
||||
# pandas comparison: ensure same tz awareness
|
||||
entry_time = pd.to_datetime(trade.open_date_utc)
|
||||
# select rows with index >= entry_time
|
||||
mask = df.index >= entry_time
|
||||
if mask.any():
|
||||
highest_since_entry = df.loc[mask, 'close'].max()
|
||||
# fallback: use trade.open_rate or the max over full df
|
||||
except Exception as e:
|
||||
logger.debug(f"Couldn't compute highest_since_entry from open_date_utc: {e}")
|
||||
|
||||
if highest_since_entry is None:
|
||||
# fallback: use the maximum close in the entire provided dataframe slice
|
||||
highest_since_entry = df['close'].max() if not df['close'].empty else current_rate
|
||||
|
||||
# Calculate retracement ratio from the highest
|
||||
if highest_since_entry and highest_since_entry > 0:
|
||||
retrace = 1.0 - (current_rate / highest_since_entry)
|
||||
else:
|
||||
retrace = 0.0
|
||||
|
||||
# Exit if:
|
||||
# - currently in profit AND
|
||||
# - retracement >= trailing_stop_pct (i.e. price has fallen enough from top since entry) AND
|
||||
# - inversion detected (z1 < 0)
|
||||
if (current_profit > 0) and (retrace >= self.trailing_stop_pct):
|
||||
# Mark the dataframe for plotting (if possible)
|
||||
# Note: freqtrade expects strategies to set exit flags in populate_exit_trend,
|
||||
# but we set exit via custom_exit return reason; plotting will read exit_long if populated.
|
||||
return "zscore"
|
||||
|
||||
# Otherwise, do not exit yet
|
||||
return None
|
||||
|
||||
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
"""
|
||||
For plotting only: mark exit points where our logic would trigger.
|
||||
This is approximate: we mark an exit when z_d1_smooth < 0 and the price has retraced >= trailing_stop_pct
|
||||
based on the available dataframe window (best-effort).
|
||||
"""
|
||||
df = dataframe
|
||||
# df['exit_long'] = 0
|
||||
#
|
||||
# # compute highest close since each possible entry (best-effort: use rolling max up to current index)
|
||||
# rolling_max = df['close'].cummax()
|
||||
#
|
||||
# # retracement relative to rolling max
|
||||
# retrace = 1.0 - (df['close'] / rolling_max.replace(0, np.nan))
|
||||
#
|
||||
# # mark exits where inversion and retrace >= threshold
|
||||
# cond_exit = (df['z_d1_smooth'] < 0) & (retrace >= self.trailing_stop_pct)
|
||||
# # shift by 0: we mark the candle where the exit condition appears
|
||||
# df.loc[cond_exit, 'exit_long'] = 1
|
||||
|
||||
return df
|
||||
633
Simple_01.py
Normal file
633
Simple_01.py
Normal file
@@ -0,0 +1,633 @@
|
||||
# sma_zscore_trailing_dca.py
|
||||
from freqtrade.strategy.interface import IStrategy
|
||||
from freqtrade.persistence import Trade
|
||||
from pandas import DataFrame
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from typing import Optional
|
||||
import logging
|
||||
from datetime import timedelta, datetime
|
||||
import talib.abstract as talib
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Simple_01(IStrategy):
|
||||
"""
|
||||
SMA z-score derivative strategy with trailing exit and intelligent DCA (large pullback).
|
||||
- timeframe: 1h
|
||||
- sma5, relative derivatives, z-score normalization (rolling z over z_window)
|
||||
- smoothing: ewm(span=5) on z-scores
|
||||
- entry: z_d1_smooth > entry_z1 AND z_d2_smooth > entry_z2
|
||||
- exit: inversion (z_d1_smooth < 0) AND retrace from highest since entry >= trailing_stop_pct
|
||||
- adjust_trade_position: add to position on controlled pullback (large = 4-6%)
|
||||
"""
|
||||
|
||||
timeframe = "1h"
|
||||
startup_candle_count = 24
|
||||
# Risk mgmt (we handle exit in custom_exit)
|
||||
minimal_roi = {"0": 0.99}
|
||||
stoploss = -0.99
|
||||
use_custom_exit = True
|
||||
position_adjustment_enable = True
|
||||
|
||||
columns_logged = False
|
||||
|
||||
# Parameters
|
||||
z_window = 10 # window for rolling mean/std to compute zscore
|
||||
entry_z1 = 0.1 # threshold on z-score of first derivative
|
||||
entry_z2 = 0 # threshold on z-score of second derivative
|
||||
min_volume = 0.0 # minimal volume to accept an entry
|
||||
min_relative_d1 = 1e-6 # clip tiny d1 relative values to reduce noise
|
||||
|
||||
# Trailing parameters for "large" trailing (exit)
|
||||
trailing_stop_pct = 0.01 # 5% retracement from highest since entry
|
||||
|
||||
# Smoothing for z-scores
|
||||
ewm_span = 5
|
||||
|
||||
# DCA intelligent (adjust_trade_position) parameters for "large" pullback
|
||||
dca_enabled = True
|
||||
# Pullback bounds (large): allow adding when retrace is between 4% and 6%
|
||||
dca_pullback_min = 0.01
|
||||
dca_pullback_max = 0.02
|
||||
# Maximum number of adds per trade (to avoid infinite pyramiding)
|
||||
dca_max_adds = 8
|
||||
# Percentage of base position to add on each reinforcement (50% of original size by default)
|
||||
dca_add_ratio = 0.5
|
||||
# Require momentum still positive to add
|
||||
dca_require_z1_positive = True
|
||||
dca_require_z2_positive = True
|
||||
# Do not add if current_profit < min_profit_to_add (avoid averaging down when deep in loss)
|
||||
min_profit_to_add = -0.02 # allow small loss but not big drawdown
|
||||
|
||||
pairs = {
|
||||
pair: {
|
||||
"first_buy": 0,
|
||||
"last_buy": 0.0,
|
||||
"first_amount": 0.0,
|
||||
"last_min": 999999999999999.5,
|
||||
"last_max": 0,
|
||||
"trade_info": {},
|
||||
"max_touch": 0.0,
|
||||
"last_sell": 0.0,
|
||||
'count_of_buys': 0,
|
||||
'current_profit': 0,
|
||||
'expected_profit': 0,
|
||||
"last_candle": {},
|
||||
"last_trade": None,
|
||||
"last_count_of_buys": 0,
|
||||
'base_stake_amount': 0,
|
||||
'stop_buy': False,
|
||||
'last_date': 0,
|
||||
'stop': False,
|
||||
'max_profit': 0,
|
||||
'last_palier_index': -1,
|
||||
'total_amount': 0,
|
||||
'has_gain': 0,
|
||||
'force_sell': False,
|
||||
'force_buy': False
|
||||
}
|
||||
for pair in ["BTC/USDC", "ETH/USDC", "DOGE/USDC", "XRP/USDC", "SOL/USDC",
|
||||
"BTC/USDT", "ETH/USDT", "DOGE/USDT", "XRP/USDT", "SOL/USDT"]
|
||||
}
|
||||
|
||||
# Plot config
|
||||
plot_config = {
|
||||
"main_plot": {
|
||||
"close": {"color": "blue"},
|
||||
"sma5": {"color": "orange"},
|
||||
},
|
||||
"subplots": {
|
||||
"slope_and_accel": {
|
||||
"z_d1_smooth": {"color": "green"},
|
||||
"z_d2_smooth": {"color": "red"},
|
||||
},
|
||||
"sma_deriv": {
|
||||
"sma5_deriv1_rel": {"color": "green"},
|
||||
"sma5_deriv2_rel": {"color": "red"},
|
||||
},
|
||||
"rsi": {
|
||||
"rsi": {"color": "blue"}
|
||||
}
|
||||
|
||||
},
|
||||
"markers": [
|
||||
{"type": "buy", "column": "enter_long", "marker": "^", "color": "green", "markersize": 10},
|
||||
{"type": "sell", "column": "exit_long", "marker": "v", "color": "red", "markersize": 10},
|
||||
],
|
||||
}
|
||||
|
||||
def informative_pairs(self):
|
||||
return []
|
||||
|
||||
def _zscore(self, series: pd.Series, window: int) -> pd.Series:
|
||||
mean = series.rolling(window=window, min_periods=3).mean()
|
||||
std = series.rolling(window=window, min_periods=3).std(ddof=0)
|
||||
z = (series - mean) / std
|
||||
z = z.replace([np.inf, -np.inf], np.nan)
|
||||
return z
|
||||
|
||||
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
df = dataframe
|
||||
|
||||
# SMA(5)
|
||||
df['sma5'] = df['close'].rolling(5, min_periods=1).mean()
|
||||
|
||||
# Absolute derivatives
|
||||
df['sma5_deriv1'] = df['sma5'].diff()
|
||||
df['sma5_deriv2'] = df['sma5_deriv1'].diff()
|
||||
|
||||
# Relative derivatives (percentage-like)
|
||||
eps = 1e-9
|
||||
df['sma5_deriv1_rel'] = df['sma5_deriv1'] / (df['sma5'].shift(1).replace(0, np.nan) + eps)
|
||||
df['sma5_deriv2_rel'] = df['sma5_deriv2'] / (df['sma5'].shift(2).replace(0, np.nan) + eps)
|
||||
|
||||
# Clip micro-noise
|
||||
df.loc[df['sma5_deriv1_rel'].abs() < self.min_relative_d1, 'sma5_deriv1_rel'] = 0.0
|
||||
df.loc[df['sma5_deriv2_rel'].abs() < self.min_relative_d1, 'sma5_deriv2_rel'] = 0.0
|
||||
|
||||
# Z-scores on relative derivatives
|
||||
df['z_d1'] = self._zscore(df['sma5_deriv1_rel'], self.z_window)
|
||||
df['z_d2'] = self._zscore(df['sma5_deriv2_rel'], self.z_window)
|
||||
|
||||
# Smoothing z-scores with EWM to reduce jitter
|
||||
df['z_d1_smooth'] = df['z_d1'].ewm(span=self.ewm_span, adjust=False).mean()
|
||||
df['z_d2_smooth'] = df['z_d2'].ewm(span=self.ewm_span, adjust=False).mean()
|
||||
|
||||
# Prepare marker columns (for plots)
|
||||
df['enter_long'] = 0
|
||||
df['exit_long'] = 0
|
||||
df['rsi'] = talib.RSI(df['close'], timeperiod=14)
|
||||
df['max_rsi_12'] = talib.MAX(df['rsi'], timeperiod=12)
|
||||
df['min_rsi_12'] = talib.MIN(df['rsi'], timeperiod=12)
|
||||
# self.calculeDerivees(df, 'rsi', horizon=12)
|
||||
|
||||
return df
|
||||
|
||||
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
df = dataframe
|
||||
|
||||
# Use last closed candle for signals -> shift(1)
|
||||
cond_entry = (
|
||||
(df['z_d1_smooth'] > self.entry_z1) &
|
||||
(df['z_d2_smooth'] > self.entry_z2) &
|
||||
(df['max_rsi_12'] < 70) &
|
||||
(df['volume'] > self.min_volume)
|
||||
)
|
||||
|
||||
df.loc[cond_entry, 'enter_long'] = 1
|
||||
df.loc[~cond_entry, 'enter_long'] = 0
|
||||
|
||||
return df
|
||||
|
||||
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
df = dataframe
|
||||
# df['exit_long'] = 0
|
||||
#
|
||||
# # compute rolling max (best-effort for plotting)
|
||||
# rolling_max = df['close'].cummax()
|
||||
# retrace = 1.0 - (df['close'] / rolling_max.replace(0, np.nan))
|
||||
#
|
||||
# cond_exit = (df['z_d1_smooth'] < 0) & (retrace >= self.trailing_stop_pct)
|
||||
# df.loc[cond_exit, 'exit_long'] = 1
|
||||
|
||||
return df
|
||||
|
||||
def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str, amount: float, rate: float,
|
||||
time_in_force: str,
|
||||
exit_reason: str, current_time, **kwargs, ) -> bool:
|
||||
# allow_to_sell = (minutes > 30)
|
||||
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||
last_candle = dataframe.iloc[-1].squeeze()
|
||||
|
||||
force = self.pairs[pair]['force_sell']
|
||||
allow_to_sell = True #(last_candle['percent'] < 0) #or force
|
||||
|
||||
minutes = int(round((current_time - trade.date_last_filled_utc).total_seconds() / 60, 0))
|
||||
|
||||
if allow_to_sell:
|
||||
self.trades = list()
|
||||
self.pairs[pair]['last_count_of_buys'] = trade.nr_of_successful_entries # self.pairs[pair]['count_of_buys']
|
||||
self.pairs[pair]['last_sell'] = rate
|
||||
self.pairs[pair]['last_trade'] = trade
|
||||
self.pairs[pair]['last_candle'] = last_candle
|
||||
self.trades = list()
|
||||
dispo = round(self.wallets.get_available_stake_amount())
|
||||
print(f"Sell {pair} {current_time} {exit_reason} dispo={dispo} amount={amount} rate={rate} open_rate={trade.open_rate}")
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🟥Sell " + str(minutes),
|
||||
pair=pair,
|
||||
trade_type=exit_reason,
|
||||
rate=last_candle['close'],
|
||||
dispo=dispo,
|
||||
profit=round(trade.calc_profit(rate, amount), 2)
|
||||
)
|
||||
self.pairs[pair]['max_profit'] = 0
|
||||
self.pairs[pair]['force_sell'] = False
|
||||
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
|
||||
self.pairs[pair]['max_touch'] = 0
|
||||
self.pairs[pair]['last_buy'] = 0
|
||||
self.pairs[pair]['last_date'] = current_time
|
||||
self.pairs[pair]['last_palier_index'] = -1
|
||||
self.pairs[pair]['last_trade'] = trade
|
||||
self.pairs[pair]['current_trade'] = None
|
||||
|
||||
return (allow_to_sell) | (exit_reason == 'force_exit')
|
||||
|
||||
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float, time_in_force: str,
|
||||
current_time: datetime, entry_tag: Optional[str], **kwargs) -> bool:
|
||||
|
||||
minutes = 0
|
||||
if self.pairs[pair]['last_date'] != 0:
|
||||
minutes = round(int((current_time - self.pairs[pair]['last_date']).total_seconds() / 60))
|
||||
|
||||
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||
last_candle = dataframe.iloc[-1].squeeze()
|
||||
last_candle_2 = dataframe.iloc[-2].squeeze()
|
||||
last_candle_3 = dataframe.iloc[-3].squeeze()
|
||||
# val = self.getProbaHausse144(last_candle)
|
||||
|
||||
# allow_to_buy = True #(not self.stop_all) #& (not self.all_down)
|
||||
allow_to_buy = not self.pairs[pair]['stop'] # and val > self.buy_val.value #not last_candle['tendency'] in ('B-', 'B--') # (rate <= float(limit)) | (entry_tag == 'force_entry')
|
||||
|
||||
# force = self.pairs[pair]['force_buy']
|
||||
# if self.pairs[pair]['force_buy']:
|
||||
# self.pairs[pair]['force_buy'] = False
|
||||
# allow_to_buy = True
|
||||
# else:
|
||||
# if not self.should_enter_trade(pair, last_candle, current_time):
|
||||
# allow_to_buy = False
|
||||
|
||||
if allow_to_buy:
|
||||
self.trades = list()
|
||||
self.pairs[pair]['first_buy'] = rate
|
||||
self.pairs[pair]['last_buy'] = rate
|
||||
self.pairs[pair]['max_touch'] = last_candle['close']
|
||||
self.pairs[pair]['last_candle'] = last_candle
|
||||
self.pairs[pair]['count_of_buys'] = 1
|
||||
self.pairs[pair]['current_profit'] = 0
|
||||
self.pairs[pair]['last_palier_index'] = -1
|
||||
self.pairs[pair]['last_max'] = max(last_candle['close'], self.pairs[pair]['last_max'])
|
||||
self.pairs[pair]['last_min'] = min(last_candle['close'], self.pairs[pair]['last_min'])
|
||||
|
||||
dispo = round(self.wallets.get_available_stake_amount())
|
||||
self.printLineLog()
|
||||
|
||||
stake_amount = self.adjust_stake_amount(pair, last_candle)
|
||||
|
||||
self.pairs[pair]['total_amount'] = stake_amount
|
||||
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action=("🟩Buy" if allow_to_buy else "Canceled") + " " + str(minutes),
|
||||
pair=pair,
|
||||
rate=rate,
|
||||
dispo=dispo,
|
||||
profit=0,
|
||||
trade_type=entry_tag,
|
||||
buys=1,
|
||||
stake=round(stake_amount, 2)
|
||||
)
|
||||
|
||||
return allow_to_buy
|
||||
|
||||
def custom_exit(self, pair: str, trade: Trade, current_time, current_rate, current_profit, **kwargs) -> Optional[str]:
|
||||
df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||
last_candle = df.iloc[-1].squeeze()
|
||||
|
||||
self.pairs[pair]['last_max'] = max(last_candle['close'], self.pairs[pair]['last_max'])
|
||||
self.pairs[pair]['last_min'] = min(last_candle['close'], self.pairs[pair]['last_min'])
|
||||
self.pairs[pair]['current_trade'] = trade
|
||||
count_of_buys = trade.nr_of_successful_entries
|
||||
|
||||
profit = round(current_profit * trade.stake_amount, 1)
|
||||
self.pairs[pair]['max_profit'] = max(self.pairs[pair]['max_profit'], profit)
|
||||
max_profit = self.pairs[pair]['max_profit']
|
||||
baisse = 0
|
||||
if profit > 0:
|
||||
baisse = 100 * abs(max_profit - profit) / max_profit
|
||||
mx = max_profit / 5
|
||||
self.pairs[pair]['count_of_buys'] = count_of_buys
|
||||
self.pairs[pair]['current_profit'] = profit
|
||||
|
||||
dispo = round(self.wallets.get_available_stake_amount())
|
||||
hours_since_first_buy = (current_time - trade.open_date_utc).seconds / 3600.0
|
||||
days_since_first_buy = (current_time - trade.open_date_utc).days
|
||||
hours = (current_time - trade.date_last_filled_utc).total_seconds() / 3600.0
|
||||
|
||||
if hours % 4 == 0:
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🔴 CURRENT" if self.pairs[pair]['stop'] else "🟢 CURRENT",
|
||||
dispo=dispo,
|
||||
pair=pair,
|
||||
rate=last_candle['close'],
|
||||
trade_type='',
|
||||
profit=profit,
|
||||
buys='',
|
||||
stake=0
|
||||
)
|
||||
|
||||
z1 = last_candle.get('z_d1_smooth', None)
|
||||
if z1 is None:
|
||||
return None
|
||||
|
||||
if z1 >= 0:
|
||||
return None
|
||||
|
||||
if current_profit is None:
|
||||
return None
|
||||
|
||||
# highest close since entry
|
||||
highest_since_entry = self.pairs[trade.pair]['max_touch']
|
||||
# try:
|
||||
# if hasattr(trade, 'open_date_utc') and trade.open_date_utc:
|
||||
# entry_time = pd.to_datetime(trade.open_date_utc)
|
||||
# mask = df.index >= entry_time
|
||||
# if mask.any():
|
||||
# highest_since_entry = df.loc[mask, 'close'].max()
|
||||
# except Exception as e:
|
||||
# logger.debug(f"Couldn't compute highest_since_entry: {e}")
|
||||
#
|
||||
# if highest_since_entry is None:
|
||||
# highest_since_entry = df['close'].max() if not df['close'].empty else current_rate
|
||||
|
||||
if highest_since_entry and highest_since_entry > 0:
|
||||
retrace = 1.0 - (current_rate / highest_since_entry)
|
||||
else:
|
||||
retrace = 0.0
|
||||
z1 = last_candle.get('z_d1_smooth', None)
|
||||
z2 = last_candle.get('z_d2_smooth', None)
|
||||
|
||||
if (current_profit > 0) and (current_profit >= self.trailing_stop_pct) and last_candle['sma5_deriv1'] < -0.002:
|
||||
return str(count_of_buys) + '_' + "zscore"
|
||||
|
||||
self.pairs[pair]['max_touch'] = max(last_candle['close'], self.pairs[pair]['max_touch'])
|
||||
|
||||
return None
|
||||
|
||||
def adjust_stake_amount(self, pair: str, last_candle: DataFrame):
|
||||
# Calculer le minimum des 14 derniers jours
|
||||
return self.config.get('stake_amount')
|
||||
|
||||
def adjust_trade_position(self, trade: Trade, current_time: datetime,
|
||||
current_rate: float, current_profit: float, min_stake: float,
|
||||
max_stake: float, **kwargs):
|
||||
"""
|
||||
DCA intelligent (mode C - 'large'):
|
||||
- Only add if:
|
||||
* DCA is enabled
|
||||
* number of adds done so far < dca_max_adds
|
||||
* retracement since highest_since_entry is between dca_pullback_min and dca_pullback_max
|
||||
* momentum still positive (z_d1_smooth, z_d2_smooth) if required
|
||||
* current_profit >= min_profit_to_add (avoid averaging down into large loss)
|
||||
- Returns a dict describing the desired order for Freqtrade to place (common format).
|
||||
Example returned dict: {'type': 'market', 'amount': 0.01}
|
||||
"""
|
||||
if not self.dca_enabled:
|
||||
return None
|
||||
pair = trade.pair
|
||||
|
||||
# Basic guards
|
||||
if current_profit is None:
|
||||
current_profit = 0.0
|
||||
|
||||
# Do not add if we're already deeply in loss
|
||||
if current_profit < self.min_profit_to_add:
|
||||
return None
|
||||
|
||||
df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
|
||||
last_candle = df.iloc[-1].squeeze()
|
||||
|
||||
# Compute highest close since entry
|
||||
highest_since_entry = self.pairs[trade.pair]['last_buy']
|
||||
|
||||
last = df.iloc[-1]
|
||||
z1 = last.get('z_d1_smooth', None)
|
||||
z2 = last.get('z_d2_smooth', None)
|
||||
|
||||
# Count how many adds have been done for this trade.
|
||||
# Trade.extra might contain meta; otherwise try trade.tags or use trade.open_rate/amount heuristics.
|
||||
adds_done = trade.nr_of_successful_entries
|
||||
# Calculate retracement since the highest
|
||||
retrace = 0.0
|
||||
if highest_since_entry and highest_since_entry > 0:
|
||||
retrace = (last['close'] - highest_since_entry) / highest_since_entry
|
||||
|
||||
# logger.info(f"{pair} {current_rate} {current_time} {highest_since_entry} add: retrace={retrace:.4f}, adds_done={adds_done} z1={z1} z2={z2}")
|
||||
|
||||
# Enforce momentum requirements if requested
|
||||
if self.dca_require_z1_positive and (z1 is None or z1 <= 0):
|
||||
return None
|
||||
if self.dca_require_z2_positive and (z2 is None or z2 <= 0):
|
||||
return None
|
||||
|
||||
#
|
||||
# try:
|
||||
# meta = getattr(trade, 'meta', None) or {}
|
||||
# adds_done = int(meta.get('adds_done', 0))
|
||||
# except Exception:
|
||||
# adds_done = 0
|
||||
|
||||
if adds_done >= self.dca_max_adds:
|
||||
return None
|
||||
|
||||
# try:
|
||||
# if hasattr(trade, 'open_date_utc') and trade.open_date_utc:
|
||||
# entry_time = pd.to_datetime(trade.open_date_utc)
|
||||
# mask = df.index >= entry_time
|
||||
# if mask.any():
|
||||
# highest_since_entry = df.loc[mask, 'close'].max()
|
||||
# except Exception as e:
|
||||
# logger.debug(f"adjust_trade_position: couldn't compute highest_since_entry: {e}")
|
||||
#
|
||||
# if highest_since_entry is None:
|
||||
# highest_since_entry = df['close'].max() if not df['close'].empty else current_rate
|
||||
|
||||
# Check if retrace is inside the allowed DCA window (large)
|
||||
if ((retrace >= self.dca_pullback_min) and (retrace <= self.dca_pullback_max)):
|
||||
# Determine amount to add: a fraction of the original trade amount
|
||||
# Try to get trade.amount (base asset amount). If not available, fall back to stake percentage
|
||||
add_amount = None
|
||||
try:
|
||||
base_amount = self.config.get('stake_amount')
|
||||
if base_amount:
|
||||
add_amount = base_amount * self.dca_add_ratio
|
||||
else:
|
||||
# Fallback: attempt to compute amount from trade.open_rate and desired quote stake
|
||||
# We'll propose to use a fraction of current rate worth (this is best-effort)
|
||||
add_amount = None
|
||||
except Exception:
|
||||
add_amount = None
|
||||
|
||||
# If we couldn't compute an absolute amount, propose a relative size via a suggested stake (user must map)
|
||||
if add_amount is None:
|
||||
# Return a suggested instruction; adapt according to your freqtrade version.
|
||||
suggested = {
|
||||
'type': 'market',
|
||||
'amount': None, # caller should compute actual amount from stake management
|
||||
'note': f'suggest_add_ratio={self.dca_add_ratio}'
|
||||
}
|
||||
# logger.info(f"{pair} {current_rate} DCA suggestion (no absolute amount): retrace={retrace:.4f}, adds_done={adds_done}")
|
||||
return None
|
||||
|
||||
dispo = round(self.wallets.get_available_stake_amount())
|
||||
trade_type = last_candle['enter_tag'] if last_candle['enter_long'] == 1 else 'pct48'
|
||||
self.pairs[trade.pair]['count_of_buys'] += 1
|
||||
self.pairs[pair]['total_amount'] += add_amount
|
||||
self.log_trade(
|
||||
last_candle=last_candle,
|
||||
date=current_time,
|
||||
action="🟧 Loss -",
|
||||
dispo=dispo,
|
||||
pair=trade.pair,
|
||||
rate=current_rate,
|
||||
trade_type=trade_type,
|
||||
profit=round(current_profit * trade.stake_amount, 1),
|
||||
buys=trade.nr_of_successful_entries + 1,
|
||||
stake=round(add_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
|
||||
|
||||
# All checks passed -> create market order instruction
|
||||
# logger.info(f"{pair} {current_rate} {current_time} {highest_since_entry} add: retrace={retrace:.4f}, adds_done={adds_done}, add_amount={add_amount:.8f}")
|
||||
return add_amount
|
||||
|
||||
# Not in allowed retrace window -> no action
|
||||
return None
|
||||
|
||||
def getPctFirstBuy(self, pair, last_candle):
|
||||
return round((last_candle['close'] - self.pairs[pair]['first_buy']) / self.pairs[pair]['first_buy'], 3)
|
||||
|
||||
def getPctLastBuy(self, pair, last_candle):
|
||||
return round((last_candle['close'] - self.pairs[pair]['last_buy']) / self.pairs[pair]['last_buy'], 4)
|
||||
|
||||
def getPct60D(self, pair, last_candle):
|
||||
return round((last_candle['max60'] - last_candle['min60']) / last_candle['max60'], 4)
|
||||
|
||||
def getPctClose60D(self, pair, last_candle):
|
||||
if last_candle['close'] > last_candle['max12']:
|
||||
return 1
|
||||
if last_candle['close'] < last_candle['min12']:
|
||||
return 0
|
||||
return round(
|
||||
(last_candle['close'] - last_candle['min12']) / (last_candle['max12'] - last_candle['min12']), 4)
|
||||
|
||||
|
||||
def printLineLog(self):
|
||||
self.printLog(
|
||||
f"+{'-' * 18}+{'-' * 12}+{'-' * 5}+{'-' * 20}+{'-' * 9}+{'-' * 8}+{'-' * 12}+{'-' * 8}+{'-' * 13}+{'-' * 14}+{'-' * 9}{'-' * 9}+{'-' * 5}+{'-' * 7}+"
|
||||
f"{'-' * 3}"
|
||||
# "+{'-' * 3}+{'-' * 3}
|
||||
f"+{'-' * 6}+{'-' * 7}+{'-' * 5}+{'-' * 5}+{'-' * 5}+{'-' * 5}+{'-' * 5}+{'-' * 5}+"
|
||||
)
|
||||
|
||||
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 log_trade(self, action, pair, date, trade_type=None, rate=None, dispo=None, profit=None, buys=None,
|
||||
stake=None,
|
||||
last_candle=None):
|
||||
# Couleurs ANSI de base
|
||||
RED = "\033[31m"
|
||||
GREEN = "\033[32m"
|
||||
YELLOW = "\033[33m"
|
||||
BLUE = "\033[34m"
|
||||
MAGENTA = "\033[35m"
|
||||
CYAN = "\033[36m"
|
||||
RESET = "\033[0m"
|
||||
|
||||
# Afficher les colonnes une seule fois
|
||||
if self.config.get('runmode') == 'hyperopt' or self.dp.runmode.value in ('hyperopt'):
|
||||
return
|
||||
if self.columns_logged % 10 == 0:
|
||||
self.printLog(
|
||||
f"| {'Date':<16} | {'Action':<10} |{'Pair':<5}| {'Trade Type':<18} |{'Rate':>8} | {'Dispo':>6} | {'Profit':>8} | {'Pct':>6} | {'max_touch':>11} | {'last_lost':>12} | {'last_max':>7}| {'last_max':>7}|{'Buys':>5}| {'Stake':>5} |"
|
||||
f"Tdc|{'val':>6}| RSI |s201d|s5_1d|s5_2d|s51h|s52h"
|
||||
)
|
||||
self.printLineLog()
|
||||
df = pd.DataFrame.from_dict(self.pairs, orient='index')
|
||||
colonnes_a_exclure = ['last_candle', 'last_trade', 'last_palier_index',
|
||||
'trade_info', 'last_date', 'expected_profit', '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 "-"
|
||||
limit = None
|
||||
# if buys is not None:
|
||||
# limit = round(last_rate * (1 - self.fibo[buys] / 100), 4)
|
||||
|
||||
rsi = ''
|
||||
rsi_pct = ''
|
||||
sma5_1d = ''
|
||||
sma5_1h = ''
|
||||
|
||||
sma5 = str(sma5_1d) + ' ' + str(sma5_1h)
|
||||
|
||||
last_lost = '' #self.getLastLost(last_candle, pair)
|
||||
|
||||
if buys is None:
|
||||
buys = ''
|
||||
|
||||
max_touch = '' # round(last_candle['max12'], 1) #round(self.pairs[pair]['max_touch'], 1)
|
||||
pct_max = '' #self.getPctFirstBuy(pair, last_candle)
|
||||
|
||||
total_counts = str(buys) + '/' + str(
|
||||
sum(pair_data['count_of_buys'] for pair_data in self.pairs.values()))
|
||||
|
||||
dist_max = '' #self.getDistMax(last_candle, pair)
|
||||
val = 0 #self.getProbaHausseSma5d(last_candle)
|
||||
|
||||
pct60 = 0 #round(100 * self.getPct60D(pair, last_candle), 2)
|
||||
|
||||
color = GREEN if profit > 0 else RED
|
||||
# color_sma20 = GREEN if last_candle['sma20_deriv1'] > 0 else RED
|
||||
# color_sma5 = GREEN if last_candle['mid_smooth_5_deriv1'] > 0 else RED
|
||||
# color_sma5_2 = GREEN if last_candle['mid_smooth_5_deriv2'] > 0 else RED
|
||||
# color_sma5_1h = GREEN if last_candle['sma5_deriveriv1'] > 0 else RED
|
||||
# color_sma5_2h = GREEN if last_candle['sma5_deriveriv2'] > 0 else RED
|
||||
|
||||
last_max = int(self.pairs[pair]['last_max']) if self.pairs[pair]['last_max'] > 1 else round(
|
||||
self.pairs[pair]['last_max'], 3)
|
||||
last_min = int(self.pairs[pair]['last_min']) if self.pairs[pair]['last_min'] > 1 else round(
|
||||
self.pairs[pair]['last_min'], 3)
|
||||
|
||||
profit = str(profit) + '/' + str(round(self.pairs[pair]['max_profit'], 2))
|
||||
|
||||
# 🟢 Dérivée 1 > 0 et dérivée 2 > 0: tendance haussière qui s’accélère.
|
||||
# 🟡 Dérivée 1 > 0 et dérivée 2 < 0: tendance haussière qui ralentit → essoufflement potentiel.
|
||||
# 🔴 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.
|
||||
|
||||
# tdc last_candle['tendency_12']
|
||||
self.printLog(
|
||||
f"| {date:<16} |{action:<10} | {pair[0:3]:<3} | {trade_type or '-':<18} |{rate or '-':>9}| {dispo or '-':>6} "
|
||||
f"|{color}{profit or '-':>10}{RESET}| {pct_max or '-':>6} | {round(self.pairs[pair]['max_touch'], 2) or '-':>11} | {last_lost or '-':>12} "
|
||||
f"| {last_max or '-':>7} | {last_min or '-':>7} |{total_counts or '-':>5}|{stake or '-':>7}"
|
||||
f"|{'-':>3}|"
|
||||
f"{round(val, 1) or '-' :>6}|"
|
||||
# f"{round(last_candle['rsi'], 0):>7}|{color_sma20}{round(last_candle['sma20_deriv1'], 2):>5}{RESET}"
|
||||
# f"|{color_sma5}{round(last_candle['mid_smooth_5_deriv1'], 2):>5}{RESET}|{color_sma5_2}{round(last_candle['mid_smooth_5_deriv2'], 2):>5}{RESET}"
|
||||
# f"|{color_sma5_1h}{round(last_candle['sma5_deriveriv1'], 2):>5}{RESET}|{color_sma5_2h}{round(last_candle['sma5_deriveriv2'], 2):>5}{RESET}"
|
||||
# f"|{last_candle['min60']}|{last_candle['max60']}"
|
||||
)
|
||||
1589
Zeus_8_1d.py
Normal file
1589
Zeus_8_1d.py
Normal file
File diff suppressed because it is too large
Load Diff
376
Zeus_8_1d_Bilan.txt
Normal file
376
Zeus_8_1d_Bilan.txt
Normal file
@@ -0,0 +1,376 @@
|
||||
BACKTESTING REPORT
|
||||
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ DOGE/USDT │ 20 │ 6.58 │ 234.716 │ 7.82 │ 12 days, 21:54:00 │ 20 0 0 100 │
|
||||
│ XRP/USDT │ 29 │ 4.96 │ 198.511 │ 6.62 │ 8 days, 17:43:00 │ 28 0 1 96.6 │
|
||||
│ SOL/USDT │ 23 │ 4.96 │ 159.580 │ 5.32 │ 11 days, 1:29:00 │ 22 0 1 95.7 │
|
||||
│ ETH/USDT │ 26 │ 4.12 │ 155.679 │ 5.19 │ 9 days, 20:48:00 │ 26 0 0 100 │
|
||||
│ BTC/USDT │ 23 │ 2.57 │ 76.047 │ 2.53 │ 10 days, 23:47:00 │ 22 0 1 95.7 │
|
||||
│ TOTAL │ 121 │ 4.59 │ 824.533 │ 27.48 │ 10 days, 12:59:00 │ 118 0 3 97.5 │
|
||||
└───────────┴────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘
|
||||
LEFT OPEN TRADES REPORT
|
||||
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ ETH/USDT │ 1 │ 3.07 │ 1.533 │ 0.05 │ 2 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ DOGE/USDT │ 1 │ 0.47 │ 0.741 │ 0.02 │ 2 days, 5:00:00 │ 1 0 0 100 │
|
||||
│ BTC/USDT │ 1 │ -0.13 │ -0.065 │ -0.0 │ 2 days, 7:00:00 │ 0 0 1 0 │
|
||||
│ SOL/USDT │ 1 │ -1.47 │ -0.917 │ -0.03 │ 19:00:00 │ 0 0 1 0 │
|
||||
│ XRP/USDT │ 1 │ -4.64 │ -11.192 │ -0.37 │ 54 days, 8:00:00 │ 0 0 1 0 │
|
||||
│ TOTAL │ 5 │ -0.54 │ -9.899 │ -0.33 │ 12 days, 9:00:00 │ 2 0 3 40.0 │
|
||||
└───────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘
|
||||
ENTER TAG STATS
|
||||
┏━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Enter Tag ┃ Entries ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ smth_12 │ 121 │ 4.59 │ 824.533 │ 27.48 │ 10 days, 12:59:00 │ 118 0 3 97.5 │
|
||||
│ TOTAL │ 121 │ 4.59 │ 824.533 │ 27.48 │ 10 days, 12:59:00 │ 118 0 3 97.5 │
|
||||
└───────────┴─────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘
|
||||
EXIT REASON STATS
|
||||
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ RSI_XRP_5_0_28.43 │ 1 │ 15.15 │ 71.078 │ 2.37 │ 15 days, 4:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_8_0_34.72 │ 1 │ 6.36 │ 53.262 │ 1.78 │ 125 days, 19:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_6_0_46.32 │ 1 │ 10.45 │ 52.528 │ 1.75 │ 47 days, 13:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_3_0_26.01 │ 1 │ 21.51 │ 34.730 │ 1.16 │ 6 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_3_0_39.61 │ 1 │ 14.32 │ 34.062 │ 1.14 │ 11 days, 21:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_14.24 │ 1 │ 15.48 │ 26.538 │ 0.88 │ 11 days, 17:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_9.03 │ 1 │ 17.25 │ 26.223 │ 0.87 │ 8 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_4_0_19.78 │ 1 │ 9.64 │ 21.919 │ 0.73 │ 9 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_3_0_31.46 │ 1 │ 10.39 │ 20.674 │ 0.69 │ 8 days, 13:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_4_0_24.35 │ 1 │ 6.46 │ 20.553 │ 0.69 │ 13 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_4_0_29.59 │ 1 │ 6.68 │ 18.794 │ 0.63 │ 16 days, 21:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_2_0_23.33 │ 1 │ 17.89 │ 18.435 │ 0.61 │ 3 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_4_0_34.21 │ 1 │ 7.03 │ 17.503 │ 0.58 │ 12 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_18.45 │ 1 │ 10.19 │ 16.852 │ 0.56 │ 7 days, 0:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_8_0_37.83 │ 1 │ 3.12 │ 16.616 │ 0.55 │ 79 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_4_0_12.14 │ 1 │ 6.86 │ 15.212 │ 0.51 │ 16 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_19.08 │ 1 │ 18.77 │ 14.063 │ 0.47 │ 4 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_20.83 │ 1 │ 26.55 │ 13.279 │ 0.44 │ 3 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_19.63 │ 1 │ 7.04 │ 13.133 │ 0.44 │ 14 days, 0:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_3_0_25.43 │ 1 │ 6.43 │ 12.901 │ 0.43 │ 12 days, 17:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_27.27 │ 1 │ 12.06 │ 12.054 │ 0.4 │ 2 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_67.31 │ 1 │ 11.51 │ 11.807 │ 0.39 │ 3 days, 13:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_43.54 │ 1 │ 5.33 │ 11.803 │ 0.39 │ 46 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_1_0_11.11 │ 1 │ 12.28 │ 11.253 │ 0.38 │ 3 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_4_0_54.81 │ 1 │ 4.36 │ 10.812 │ 0.36 │ 13 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_34.78 │ 1 │ 16.81 │ 10.484 │ 0.35 │ 2 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_3_0_26.24 │ 1 │ 6.2 │ 10.401 │ 0.35 │ 7 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ RSI_ETH_1_0_8.93 │ 1 │ 20.52 │ 10.253 │ 0.34 │ 4 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_32.89 │ 1 │ 6.37 │ 10.247 │ 0.34 │ 6 days, 18:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_28.89 │ 1 │ 9.34 │ 9.561 │ 0.32 │ 5 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ RSI_SOL_4_0_40.62 │ 1 │ 2.98 │ 9.471 │ 0.32 │ 10 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_69.84 │ 1 │ 2.64 │ 9.241 │ 0.31 │ 3 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_3_0_60.36 │ 1 │ 4.38 │ 8.823 │ 0.29 │ 7 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_47.83 │ 1 │ 8.04 │ 8.420 │ 0.28 │ 3 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ RSI_XRP_1_0_9.78 │ 1 │ 13.26 │ 8.291 │ 0.28 │ 1 day, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_33.33 │ 1 │ 15.27 │ 7.630 │ 0.25 │ 3 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_12.35 │ 1 │ 14.27 │ 7.136 │ 0.24 │ 3 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_1_0_39.42 │ 1 │ 10.17 │ 6.354 │ 0.21 │ 3 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_4_0_17.57 │ 1 │ 2.59 │ 6.081 │ 0.2 │ 15 days, 18:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_2_0_18.06 │ 1 │ 5.89 │ 5.956 │ 0.2 │ 9 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_17.14 │ 1 │ 9.45 │ 5.834 │ 0.19 │ 8 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_8_0_81.16 │ 1 │ 0.73 │ 5.508 │ 0.18 │ 107 days, 19:00:00 │ 1 0 0 100 │
|
||||
│ RSI_BTC_5_0_31.25 │ 1 │ 1.93 │ 5.464 │ 0.18 │ 17 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_6_0_30.26 │ 1 │ 1.51 │ 5.343 │ 0.18 │ 31 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_4_0_83.45 │ 1 │ 1.65 │ 4.730 │ 0.16 │ 11 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_26.98 │ 1 │ 9.3 │ 4.588 │ 0.15 │ 4 days, 12:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_1_0_25.0 │ 1 │ 7.26 │ 4.538 │ 0.15 │ 3 days, 7:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_20.0 │ 1 │ 8.86 │ 4.432 │ 0.15 │ 5 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_5_0_68.35 │ 1 │ 1.23 │ 4.368 │ 0.15 │ 55 days, 19:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_10.64 │ 1 │ 8.42 │ 4.189 │ 0.14 │ 6 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_60.19 │ 1 │ 2.61 │ 4.110 │ 0.14 │ 4 days, 3:00:00 │ 1 0 0 100 │
|
||||
│ RSI_ETH_3_0_38.98 │ 1 │ 2.1 │ 3.591 │ 0.12 │ 12 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_27.66 │ 1 │ 5.48 │ 3.425 │ 0.11 │ 2 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_43.86 │ 1 │ 2.49 │ 3.220 │ 0.11 │ 4 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_40.74 │ 1 │ 5.16 │ 3.215 │ 0.11 │ 2 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_1_0_50.77 │ 1 │ 5.12 │ 3.201 │ 0.11 │ 2 days, 12:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_7_0_96.68 │ 1 │ 0.29 │ 3.008 │ 0.1 │ 110 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_5_0_82.93 │ 1 │ 0.66 │ 2.808 │ 0.09 │ 38 days, 21:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_74.07 │ 1 │ 1.13 │ 2.788 │ 0.09 │ 6 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_77.5 │ 1 │ 1.35 │ 2.745 │ 0.09 │ 2 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_57.63 │ 1 │ 2.33 │ 2.489 │ 0.08 │ 5 days, 9:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_46.67 │ 1 │ 1.18 │ 2.404 │ 0.08 │ 4 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_54.0 │ 1 │ 4.34 │ 2.338 │ 0.08 │ 3 days, 3:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_4_0_76.04 │ 1 │ 0.96 │ 2.254 │ 0.08 │ 13 days, 17:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_56.0 │ 1 │ 3.55 │ 2.217 │ 0.07 │ 6 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_45.95 │ 1 │ 3.99 │ 1.993 │ 0.07 │ 1 day, 5:00:00 │ 1 0 0 100 │
|
||||
│ RSI_ETH_1_0_16.67 │ 1 │ 3.97 │ 1.977 │ 0.07 │ 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_26.09 │ 1 │ 2.8 │ 1.746 │ 0.06 │ 2 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_71.93 │ 1 │ 1.52 │ 1.583 │ 0.05 │ 2 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_11.11 │ 1 │ 3.14 │ 1.565 │ 0.05 │ 2 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_3_0_27.27 │ 1 │ 0.85 │ 1.557 │ 0.05 │ 12:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_4_0_79.73 │ 1 │ 0.65 │ 1.509 │ 0.05 │ 6 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_2_0_76.56 │ 1 │ 1.15 │ 1.466 │ 0.05 │ 3 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_75.0 │ 1 │ 1.75 │ 1.314 │ 0.04 │ 3 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_73.47 │ 1 │ 0.76 │ 1.289 │ 0.04 │ 20 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_27.78 │ 1 │ 1.27 │ 1.268 │ 0.04 │ 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_2_0_33.33 │ 1 │ 0.95 │ 1.203 │ 0.04 │ 1 day, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_2_0_83.58 │ 1 │ 1.12 │ 1.148 │ 0.04 │ 1 day, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_54.17 │ 1 │ 2.19 │ 1.097 │ 0.04 │ 1 day, 15:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_2_0_44.44 │ 1 │ 0.79 │ 1.033 │ 0.03 │ 9 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_77.78 │ 1 │ 2.0 │ 0.999 │ 0.03 │ 1 day, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_41.18 │ 1 │ 1.93 │ 0.964 │ 0.03 │ 5 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_85.94 │ 1 │ 0.48 │ 0.944 │ 0.03 │ 14 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_3_0_12.5 │ 1 │ 0.45 │ 0.712 │ 0.02 │ 1 day, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_81.58 │ 1 │ 1.12 │ 0.697 │ 0.02 │ 2 days, 7:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_30.0 │ 1 │ 1.1 │ 0.688 │ 0.02 │ 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_3_0_30.0 │ 1 │ 0.42 │ 0.669 │ 0.02 │ 1 day, 6:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_0.0 │ 1 │ 1.07 │ 0.666 │ 0.02 │ 4:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_2_0_72.73 │ 1 │ 0.62 │ 0.631 │ 0.02 │ 1 day, 20:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_2_0_25.0 │ 1 │ 0.6 │ 0.614 │ 0.02 │ 13:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_2_0_66.67 │ 1 │ 0.59 │ 0.607 │ 0.02 │ 4 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_57.14 │ 2 │ 0.38 │ 0.590 │ 0.02 │ 8:00:00 │ 2 0 0 100 │
|
||||
│ Drv3_SOL_2_0_64.71 │ 1 │ 0.57 │ 0.588 │ 0.02 │ 1 day, 12:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_94.95 │ 1 │ 0.36 │ 0.548 │ 0.02 │ 2 days, 5:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_28.57 │ 1 │ 0.87 │ 0.545 │ 0.02 │ 3:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_2_0_28.57 │ 1 │ 0.49 │ 0.506 │ 0.02 │ 1 day, 5:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_2_0_37.5 │ 1 │ 0.45 │ 0.489 │ 0.02 │ 3 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_73.68 │ 1 │ 0.94 │ 0.466 │ 0.02 │ 2 days, 18:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_2_0_76.47 │ 1 │ 0.38 │ 0.397 │ 0.01 │ 15 days, 3:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_72.73 │ 1 │ 0.7 │ 0.347 │ 0.01 │ 1 day, 23:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_57.14 │ 1 │ 0.64 │ 0.318 │ 0.01 │ 1 day, 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_85.0 │ 1 │ 0.48 │ 0.298 │ 0.01 │ 2 days, 7:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_1_0_76.92 │ 1 │ 0.58 │ 0.290 │ 0.01 │ 2 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_75.0 │ 1 │ 0.45 │ 0.223 │ 0.01 │ 1 day, 15:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_DOGE_1_0_87.5 │ 1 │ 0.32 │ 0.198 │ 0.01 │ 1 day, 11:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_80.0 │ 1 │ 0.32 │ 0.196 │ 0.01 │ 1 day, 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_2_0_94.59 │ 1 │ 0.19 │ 0.188 │ 0.01 │ 6 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_92.0 │ 1 │ 0.35 │ 0.173 │ 0.01 │ 3 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_XRP_1_0_92.86 │ 1 │ 0.29 │ 0.147 │ 0.0 │ 1 day, 18:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_2_0_97.62 │ 1 │ 0.14 │ 0.145 │ 0.0 │ 1 day, 14:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_ETH_2_0_91.67 │ 1 │ 0.14 │ 0.143 │ 0.0 │ 1 day, 0:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_85.71 │ 1 │ 0.27 │ 0.133 │ 0.0 │ 2 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_SOL_1_0_80.0 │ 1 │ 0.23 │ 0.114 │ 0.0 │ 2 days, 0:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_2_0_66.67 │ 1 │ 0.11 │ 0.107 │ 0.0 │ 1 day, 0:00:00 │ 1 0 0 100 │
|
||||
│ Drv3_BTC_1_0_90.0 │ 1 │ 0.21 │ 0.104 │ 0.0 │ 1 day, 9:00:00 │ 1 0 0 100 │
|
||||
│ force_exit │ 5 │ -0.54 │ -9.899 │ -0.33 │ 12 days, 9:00:00 │ 2 0 3 40.0 │
|
||||
│ TOTAL │ 121 │ 4.59 │ 824.533 │ 27.48 │ 10 days, 12:59:00 │ 118 0 3 97.5 │
|
||||
└─────────────────────┴───────┴──────────────┴─────────────────┴──────────────┴────────────────────┴────────────────────────┘
|
||||
MIXED TAG STATS
|
||||
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Enter Tag ┃ Exit Reason ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
|
||||
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ ('smth_12', 'RSI_XRP_5_0_28.43') │ │ 1 │ 15.15 │ 71.078 │ 2.37 │ 15 days, 4:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_8_0_34.72') │ │ 1 │ 6.36 │ 53.262 │ 1.78 │ 125 days, 19:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_6_0_46.32') │ │ 1 │ 10.45 │ 52.528 │ 1.75 │ 47 days, 13:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_3_0_26.01') │ │ 1 │ 21.51 │ 34.730 │ 1.16 │ 6 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_3_0_39.61') │ │ 1 │ 14.32 │ 34.062 │ 1.14 │ 11 days, 21:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_14.24') │ │ 1 │ 15.48 │ 26.538 │ 0.88 │ 11 days, 17:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_9.03') │ │ 1 │ 17.25 │ 26.223 │ 0.87 │ 8 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_4_0_19.78') │ │ 1 │ 9.64 │ 21.919 │ 0.73 │ 9 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_3_0_31.46') │ │ 1 │ 10.39 │ 20.674 │ 0.69 │ 8 days, 13:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_4_0_24.35') │ │ 1 │ 6.46 │ 20.553 │ 0.69 │ 13 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_4_0_29.59') │ │ 1 │ 6.68 │ 18.794 │ 0.63 │ 16 days, 21:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_2_0_23.33') │ │ 1 │ 17.89 │ 18.435 │ 0.61 │ 3 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_4_0_34.21') │ │ 1 │ 7.03 │ 17.503 │ 0.58 │ 12 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_18.45') │ │ 1 │ 10.19 │ 16.852 │ 0.56 │ 7 days, 0:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_8_0_37.83') │ │ 1 │ 3.12 │ 16.616 │ 0.55 │ 79 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_4_0_12.14') │ │ 1 │ 6.86 │ 15.212 │ 0.51 │ 16 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_19.08') │ │ 1 │ 18.77 │ 14.063 │ 0.47 │ 4 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_20.83') │ │ 1 │ 26.55 │ 13.279 │ 0.44 │ 3 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_19.63') │ │ 1 │ 7.04 │ 13.133 │ 0.44 │ 14 days, 0:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_3_0_25.43') │ │ 1 │ 6.43 │ 12.901 │ 0.43 │ 12 days, 17:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_27.27') │ │ 1 │ 12.06 │ 12.054 │ 0.4 │ 2 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_67.31') │ │ 1 │ 11.51 │ 11.807 │ 0.39 │ 3 days, 13:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_43.54') │ │ 1 │ 5.33 │ 11.803 │ 0.39 │ 46 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_1_0_11.11') │ │ 1 │ 12.28 │ 11.253 │ 0.38 │ 3 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_4_0_54.81') │ │ 1 │ 4.36 │ 10.812 │ 0.36 │ 13 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_34.78') │ │ 1 │ 16.81 │ 10.484 │ 0.35 │ 2 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_3_0_26.24') │ │ 1 │ 6.2 │ 10.401 │ 0.35 │ 7 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'RSI_ETH_1_0_8.93') │ │ 1 │ 20.52 │ 10.253 │ 0.34 │ 4 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_32.89') │ │ 1 │ 6.37 │ 10.247 │ 0.34 │ 6 days, 18:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_28.89') │ │ 1 │ 9.34 │ 9.561 │ 0.32 │ 5 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'RSI_SOL_4_0_40.62') │ │ 1 │ 2.98 │ 9.471 │ 0.32 │ 10 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_69.84') │ │ 1 │ 2.64 │ 9.241 │ 0.31 │ 3 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_3_0_60.36') │ │ 1 │ 4.38 │ 8.823 │ 0.29 │ 7 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_47.83') │ │ 1 │ 8.04 │ 8.420 │ 0.28 │ 3 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'RSI_XRP_1_0_9.78') │ │ 1 │ 13.26 │ 8.291 │ 0.28 │ 1 day, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_33.33') │ │ 1 │ 15.27 │ 7.630 │ 0.25 │ 3 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_12.35') │ │ 1 │ 14.27 │ 7.136 │ 0.24 │ 3 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_1_0_39.42') │ │ 1 │ 10.17 │ 6.354 │ 0.21 │ 3 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_4_0_17.57') │ │ 1 │ 2.59 │ 6.081 │ 0.2 │ 15 days, 18:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_2_0_18.06') │ │ 1 │ 5.89 │ 5.956 │ 0.2 │ 9 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_17.14') │ │ 1 │ 9.45 │ 5.834 │ 0.19 │ 8 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_8_0_81.16') │ │ 1 │ 0.73 │ 5.508 │ 0.18 │ 107 days, 19:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'RSI_BTC_5_0_31.25') │ │ 1 │ 1.93 │ 5.464 │ 0.18 │ 17 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_6_0_30.26') │ │ 1 │ 1.51 │ 5.343 │ 0.18 │ 31 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_4_0_83.45') │ │ 1 │ 1.65 │ 4.730 │ 0.16 │ 11 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_26.98') │ │ 1 │ 9.3 │ 4.588 │ 0.15 │ 4 days, 12:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_1_0_25.0') │ │ 1 │ 7.26 │ 4.538 │ 0.15 │ 3 days, 7:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_20.0') │ │ 1 │ 8.86 │ 4.432 │ 0.15 │ 5 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_5_0_68.35') │ │ 1 │ 1.23 │ 4.368 │ 0.15 │ 55 days, 19:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_10.64') │ │ 1 │ 8.42 │ 4.189 │ 0.14 │ 6 days, 23:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_60.19') │ │ 1 │ 2.61 │ 4.110 │ 0.14 │ 4 days, 3:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'RSI_ETH_3_0_38.98') │ │ 1 │ 2.1 │ 3.591 │ 0.12 │ 12 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_27.66') │ │ 1 │ 5.48 │ 3.425 │ 0.11 │ 2 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_43.86') │ │ 1 │ 2.49 │ 3.220 │ 0.11 │ 4 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_40.74') │ │ 1 │ 5.16 │ 3.215 │ 0.11 │ 2 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_1_0_50.77') │ │ 1 │ 5.12 │ 3.201 │ 0.11 │ 2 days, 12:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_7_0_96.68') │ │ 1 │ 0.29 │ 3.008 │ 0.1 │ 110 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_5_0_82.93') │ │ 1 │ 0.66 │ 2.808 │ 0.09 │ 38 days, 21:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_74.07') │ │ 1 │ 1.13 │ 2.788 │ 0.09 │ 6 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_77.5') │ │ 1 │ 1.35 │ 2.745 │ 0.09 │ 2 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_57.63') │ │ 1 │ 2.33 │ 2.489 │ 0.08 │ 5 days, 9:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_46.67') │ │ 1 │ 1.18 │ 2.404 │ 0.08 │ 4 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_54.0') │ │ 1 │ 4.34 │ 2.338 │ 0.08 │ 3 days, 3:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_4_0_76.04') │ │ 1 │ 0.96 │ 2.254 │ 0.08 │ 13 days, 17:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_56.0') │ │ 1 │ 3.55 │ 2.217 │ 0.07 │ 6 days, 15:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_45.95') │ │ 1 │ 3.99 │ 1.993 │ 0.07 │ 1 day, 5:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'RSI_ETH_1_0_16.67') │ │ 1 │ 3.97 │ 1.977 │ 0.07 │ 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_26.09') │ │ 1 │ 2.8 │ 1.746 │ 0.06 │ 2 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_71.93') │ │ 1 │ 1.52 │ 1.583 │ 0.05 │ 2 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_11.11') │ │ 1 │ 3.14 │ 1.565 │ 0.05 │ 2 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_3_0_27.27') │ │ 1 │ 0.85 │ 1.557 │ 0.05 │ 12:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_4_0_79.73') │ │ 1 │ 0.65 │ 1.509 │ 0.05 │ 6 days, 20:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_2_0_76.56') │ │ 1 │ 1.15 │ 1.466 │ 0.05 │ 3 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_75.0') │ │ 1 │ 1.75 │ 1.314 │ 0.04 │ 3 days, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_73.47') │ │ 1 │ 0.76 │ 1.289 │ 0.04 │ 20 days, 8:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_27.78') │ │ 1 │ 1.27 │ 1.268 │ 0.04 │ 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_2_0_33.33') │ │ 1 │ 0.95 │ 1.203 │ 0.04 │ 1 day, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_2_0_83.58') │ │ 1 │ 1.12 │ 1.148 │ 0.04 │ 1 day, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_54.17') │ │ 1 │ 2.19 │ 1.097 │ 0.04 │ 1 day, 15:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_2_0_44.44') │ │ 1 │ 0.79 │ 1.033 │ 0.03 │ 9 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_77.78') │ │ 1 │ 2.0 │ 0.999 │ 0.03 │ 1 day, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_41.18') │ │ 1 │ 1.93 │ 0.964 │ 0.03 │ 5 days, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_85.94') │ │ 1 │ 0.48 │ 0.944 │ 0.03 │ 14 days, 16:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_3_0_12.5') │ │ 1 │ 0.45 │ 0.712 │ 0.02 │ 1 day, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_81.58') │ │ 1 │ 1.12 │ 0.697 │ 0.02 │ 2 days, 7:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_30.0') │ │ 1 │ 1.1 │ 0.688 │ 0.02 │ 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_3_0_30.0') │ │ 1 │ 0.42 │ 0.669 │ 0.02 │ 1 day, 6:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_0.0') │ │ 1 │ 1.07 │ 0.666 │ 0.02 │ 4:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_2_0_72.73') │ │ 1 │ 0.62 │ 0.631 │ 0.02 │ 1 day, 20:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_2_0_25.0') │ │ 1 │ 0.6 │ 0.614 │ 0.02 │ 13:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_2_0_66.67') │ │ 1 │ 0.59 │ 0.607 │ 0.02 │ 4 days, 22:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_57.14') │ │ 2 │ 0.38 │ 0.590 │ 0.02 │ 8:00:00 │ 2 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_64.71') │ │ 1 │ 0.57 │ 0.588 │ 0.02 │ 1 day, 12:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_94.95') │ │ 1 │ 0.36 │ 0.548 │ 0.02 │ 2 days, 5:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_28.57') │ │ 1 │ 0.87 │ 0.545 │ 0.02 │ 3:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_2_0_28.57') │ │ 1 │ 0.49 │ 0.506 │ 0.02 │ 1 day, 5:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_2_0_37.5') │ │ 1 │ 0.45 │ 0.489 │ 0.02 │ 3 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_73.68') │ │ 1 │ 0.94 │ 0.466 │ 0.02 │ 2 days, 18:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_2_0_76.47') │ │ 1 │ 0.38 │ 0.397 │ 0.01 │ 15 days, 3:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_72.73') │ │ 1 │ 0.7 │ 0.347 │ 0.01 │ 1 day, 23:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_57.14') │ │ 1 │ 0.64 │ 0.318 │ 0.01 │ 1 day, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_85.0') │ │ 1 │ 0.48 │ 0.298 │ 0.01 │ 2 days, 7:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_1_0_76.92') │ │ 1 │ 0.58 │ 0.290 │ 0.01 │ 2 days, 1:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_75.0') │ │ 1 │ 0.45 │ 0.223 │ 0.01 │ 1 day, 15:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_DOGE_1_0_87.5') │ │ 1 │ 0.32 │ 0.198 │ 0.01 │ 1 day, 11:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_80.0') │ │ 1 │ 0.32 │ 0.196 │ 0.01 │ 1 day, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_2_0_94.59') │ │ 1 │ 0.19 │ 0.188 │ 0.01 │ 6 days, 10:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_92.0') │ │ 1 │ 0.35 │ 0.173 │ 0.01 │ 3 days, 2:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_XRP_1_0_92.86') │ │ 1 │ 0.29 │ 0.147 │ 0.0 │ 1 day, 18:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_2_0_97.62') │ │ 1 │ 0.14 │ 0.145 │ 0.0 │ 1 day, 14:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_ETH_2_0_91.67') │ │ 1 │ 0.14 │ 0.143 │ 0.0 │ 1 day, 0:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_85.71') │ │ 1 │ 0.27 │ 0.133 │ 0.0 │ 2 days, 11:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_SOL_1_0_80.0') │ │ 1 │ 0.23 │ 0.114 │ 0.0 │ 2 days, 0:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_2_0_66.67') │ │ 1 │ 0.11 │ 0.107 │ 0.0 │ 1 day, 0:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'Drv3_BTC_1_0_90.0') │ │ 1 │ 0.21 │ 0.104 │ 0.0 │ 1 day, 9:00:00 │ 1 0 0 100 │
|
||||
│ ('smth_12', 'force_exit') │ │ 5 │ -0.54 │ -9.899 │ -0.33 │ 12 days, 9:00:00 │ 2 0 3 40.0 │
|
||||
│ TOTAL │ │ 121 │ 4.59 │ 824.533 │ 27.48 │ 10 days, 12:59:00 │ 118 0 3 97.5 │
|
||||
└────────────────────────────────────┴─────────────┴────────┴──────────────┴─────────────────┴──────────────┴────────────────────┴────────────────────────┘
|
||||
WEEK BREAKDOWN
|
||||
┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━━┓
|
||||
┃ Week ┃ Tot Profit USDT ┃ Wins ┃ Draws ┃ Losses ┃
|
||||
┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━╇━━━━━━━━┩
|
||||
│ 06/01/2025 │ 37.217 │ 6 │ 0 │ 0 │
|
||||
│ 13/01/2025 │ 12.464 │ 2 │ 0 │ 0 │
|
||||
│ 20/01/2025 │ 76.722 │ 7 │ 0 │ 0 │
|
||||
│ 27/01/2025 │ 4.684 │ 4 │ 0 │ 0 │
|
||||
│ 03/02/2025 │ 3.577 │ 4 │ 0 │ 0 │
|
||||
│ 10/02/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 17/02/2025 │ 17.503 │ 1 │ 0 │ 0 │
|
||||
│ 24/02/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 03/03/2025 │ 71.078 │ 1 │ 0 │ 0 │
|
||||
│ 10/03/2025 │ 9.241 │ 1 │ 0 │ 0 │
|
||||
│ 17/03/2025 │ 4.588 │ 1 │ 0 │ 0 │
|
||||
│ 24/03/2025 │ 2.338 │ 1 │ 0 │ 0 │
|
||||
│ 31/03/2025 │ 0.147 │ 1 │ 0 │ 0 │
|
||||
│ 07/04/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 14/04/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 21/04/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 28/04/2025 │ 16.839 │ 2 │ 0 │ 0 │
|
||||
│ 05/05/2025 │ 0.964 │ 1 │ 0 │ 0 │
|
||||
│ 12/05/2025 │ 78.013 │ 5 │ 0 │ 0 │
|
||||
│ 19/05/2025 │ 6.222 │ 4 │ 0 │ 0 │
|
||||
│ 26/05/2025 │ 19.509 │ 3 │ 0 │ 0 │
|
||||
│ 02/06/2025 │ 0.944 │ 1 │ 0 │ 0 │
|
||||
│ 09/06/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 16/06/2025 │ 9.2 │ 3 │ 0 │ 0 │
|
||||
│ 23/06/2025 │ 2.131 │ 2 │ 0 │ 0 │
|
||||
│ 30/06/2025 │ 7.723 │ 3 │ 0 │ 0 │
|
||||
│ 07/07/2025 │ 5.149 │ 5 │ 0 │ 0 │
|
||||
│ 14/07/2025 │ 81.049 │ 8 │ 0 │ 0 │
|
||||
│ 21/07/2025 │ 66.176 │ 5 │ 0 │ 0 │
|
||||
│ 28/07/2025 │ 27.276 │ 10 │ 0 │ 0 │
|
||||
│ 04/08/2025 │ 0.788 │ 2 │ 0 │ 0 │
|
||||
│ 11/08/2025 │ 62.555 │ 5 │ 0 │ 0 │
|
||||
│ 18/08/2025 │ 15.647 │ 6 │ 0 │ 0 │
|
||||
│ 25/08/2025 │ 47.927 │ 3 │ 0 │ 0 │
|
||||
│ 01/09/2025 │ 3.201 │ 1 │ 0 │ 0 │
|
||||
│ 08/09/2025 │ 3.22 │ 1 │ 0 │ 0 │
|
||||
│ 15/09/2025 │ 70.772 │ 6 │ 0 │ 0 │
|
||||
│ 22/09/2025 │ 6.969 │ 5 │ 0 │ 0 │
|
||||
│ 29/09/2025 │ 0 │ 0 │ 0 │ 0 │
|
||||
│ 06/10/2025 │ 62.599 │ 6 │ 0 │ 0 │
|
||||
│ 13/10/2025 │ -9.899 │ 2 │ 0 │ 3 │
|
||||
└────────────┴─────────────────┴──────┴───────┴────────┘
|
||||
SUMMARY METRICS
|
||||
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Metric ┃ Value ┃
|
||||
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ Backtesting from │ 2025-01-01 00:00:00 │
|
||||
│ Backtesting to │ 2025-10-07 10:00:00 │
|
||||
│ Trading Mode │ Spot │
|
||||
│ Max open trades │ 5 │
|
||||
│ │ │
|
||||
│ Total/Daily Avg Trades │ 121 / 0.43 │
|
||||
│ Starting balance │ 3000 USDT │
|
||||
│ Final balance │ 3824.533 USDT │
|
||||
│ Absolute profit │ 824.533 USDT │
|
||||
│ Total profit % │ 27.48% │
|
||||
│ CAGR % │ 37.39% │
|
||||
│ Sortino │ 11.17 │
|
||||
│ Sharpe │ 5.08 │
|
||||
│ Calmar │ 596.19 │
|
||||
│ SQN │ 6.71 │
|
||||
│ Profit factor │ 68.73 │
|
||||
│ Expectancy (Ratio) │ 6.81 (1.68) │
|
||||
│ Avg. daily profit % │ 0.10% │
|
||||
│ Avg. stake amount │ 155.858 USDT │
|
||||
│ Total trade volume │ 38619.369 USDT │
|
||||
│ │ │
|
||||
│ Best Pair │ XRP/USDT 6.62% │
|
||||
│ Worst Pair │ BTC/USDT 2.53% │
|
||||
│ Best trade │ XRP/USDT 26.55% │
|
||||
│ Worst trade │ XRP/USDT -4.64% │
|
||||
│ Best day │ 76.022 USDT │
|
||||
│ Worst day │ -9.899 USDT │
|
||||
│ Days win/draw/lose │ 75 / 203 / 1 │
|
||||
│ Avg. Duration Winners │ 10 days, 7:44:00 │
|
||||
│ Avg. Duration Loser │ 19 days, 3:20:00 │
|
||||
│ Max Consecutive Wins / Loss │ 116 / 2 │
|
||||
│ Rejected Entry signals │ 0 │
|
||||
│ Entry/Exit Timeouts │ 0 / 0 │
|
||||
│ │ │
|
||||
│ Min balance │ 3008.291 USDT │
|
||||
│ Max balance │ 3835.901 USDT │
|
||||
│ Max % of account underwater │ 0.32% │
|
||||
│ Absolute Drawdown (Account) │ 0.32% │
|
||||
│ Absolute Drawdown │ 12.109 USDT │
|
||||
│ Drawdown high │ 835.901 USDT │
|
||||
│ Drawdown low │ 823.792 USDT │
|
||||
│ Drawdown Start │ 2025-10-07 10:00:00 │
|
||||
│ Drawdown End │ 2025-10-07 10:00:00 │
|
||||
│ Market change │ 2.17% │
|
||||
└─────────────────────────────┴─────────────────────┘
|
||||
|
||||
Backtested 2025-01-01 00:00:00 -> 2025-10-07 10:00:00 | Max open trades : 5
|
||||
STRATEGY SUMMARY
|
||||
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃
|
||||
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ Zeus_8_1d │ 121 │ 4.59 │ 824.533 │ 27.48 │ 10 days, 12:59:00 │ 118 0 3 97.5 │ 12.109 USDT 0.32% │
|
||||
└───────────┴────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┴────────────────────┘
|
||||
@@ -17,16 +17,17 @@
|
||||
"max_open_trades": 80
|
||||
},
|
||||
"buy": {
|
||||
"buy_horizon_predict_1h": 2
|
||||
},
|
||||
"sell": {
|
||||
"sell_allow_decrease": 0.2
|
||||
"buy_horizon_predict_1h": 2,
|
||||
"mise_factor_buy": 0.06
|
||||
},
|
||||
"sell": {},
|
||||
"protection": {
|
||||
"protection_fibo": 9,
|
||||
"protection_percent_buy_lost": 3
|
||||
"sma5_deriv1_1d_restart_protection": 2.2,
|
||||
"sma5_deriv1_1d_stop_protection": -3.9,
|
||||
"sma5_deriv2_1d_restart_protection": 0.0,
|
||||
"sma5_deriv2_1d_stop_protection": -4.8
|
||||
}
|
||||
},
|
||||
"ft_stratparam_v": 1,
|
||||
"export_time": "2025-05-24 18:29:22.477903+00:00"
|
||||
"export_time": "2025-09-28 13:58:28.838866+00:00"
|
||||
}
|
||||
1351
Zeus_8_3_2_B_4_2.py
1351
Zeus_8_3_2_B_4_2.py
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user