MABullishAlignment - 回测结果详情
返回列表基本信息
策略名称:
MABullishAlignment
MABullishAlignment
时间范围:
20211104-20230101
20211104-20230101
行情:
熊市
熊市
时间框架:
4h
4h
关键指标
回测天数
423
总交易数
129
日均交易次数
0.30
总收益率
-22.15%
年化收益率
-19.43%
市场变化
-71.17%
超额收益
49.01%
胜率
31.0%
盈亏比
1.42
SQN
-1.83
最大回撤
22.15%
起始资金
10000
配置文件内容
策略文件内容
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# --- 必要的导入模块,请勿删除 ---
import numpy as np # 数值计算库
import pandas as pd # 数据处理库
from datetime import datetime, timedelta, timezone # 时间处理
from pandas import DataFrame # 数据框架
from typing import Optional, Union # 类型提示
# Freqtrade策略框架核心模块
from freqtrade.strategy import (
IStrategy, # 策略基类
Trade, # 交易对象
Order, # 订单对象
PairLocks, # 交易对锁定
informative, # 信息性数据装饰器
# 超参数优化相关参数类型
BooleanParameter, # 布尔参数
CategoricalParameter, # 分类参数
DecimalParameter, # 小数参数
IntParameter, # 整数参数
RealParameter, # 实数参数
# 时间框架辅助函数
timeframe_to_minutes, # 时间框架转分钟
timeframe_to_next_date, # 下一个时间点
timeframe_to_prev_date, # 上一个时间点
# 策略辅助函数
merge_informative_pair, # 合并信息性交易对数据
stoploss_from_absolute, # 绝对止损
stoploss_from_open, # 开仓价止损
)
# --------------------------------
# 添加自定义技术分析库
import talib.abstract as ta # TA-Lib技术分析库
from technical import qtpylib # QTPyLib技术分析库
class MABullishAlignment(IStrategy):
"""
MA多头排列策略 - 基于移动平均线多头排列的趋势跟踪策略
策略核心逻辑:
入场条件:MA7 > MA25 > MA99 且多头排列保持5根K线,且MA间距越来越大
退场条件:多头排列被打破
适用市场:上涨趋势市场
风险等级:中等
预期收益:中高
"""
# Buy hyperspace params:
buy_params = {
'timeframe': "4h",
'bullish_count': 5,
'ma7_ma25_diff_pct': 10,
'ma25_ma99_diff_pct': 6,
}
# Sell hyperspace params:
sell_params = {
'ma7_decreasing_count': 5,
}
# ==================== 策略基础配置 ====================
# 策略接口版本号(Freqtrade要求)
INTERFACE_VERSION = 3
# 是否支持做空交易(False=仅做多)
can_short: bool = False
# ==================== 风险控制参数 ====================
# 最小投资回报率设置(ROI - Return on Investment)
# 这里设置为不止盈,让策略信号完全控制退出
minimal_roi = {
"0": 10 # 从开仓开始,需要1000%收益才止盈(实际上不会触发)
}
# 止损设置(负值表示亏损百分比)
# 设置为-0.99即99%亏损才止损(实际上不会触发)
stoploss = -0.99
# 是否启用追踪止损(动态止损)
trailing_stop = False
# ==================== 时间和执行配置 ====================
# 策略运行的时间周期(1h = 1小时K线)
# ['1s', '1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1M']
timeframe = buy_params['timeframe']
# 是否仅在新K线生成时运行指标计算(提高性能)
process_only_new_candles = True
# ==================== 信号控制参数 ====================
# 是否使用退出信号(True=策略信号控制退出)
use_exit_signal = True
# 是否仅在盈利时才允许退出(False=亏损时也可退出)
exit_profit_only = False
# 如果有入场信号,是否忽略ROI退出(False=ROI优先)
ignore_roi_if_entry_signal = False
# 策略需要多少根历史K线才能产生有效信号
# 设置为200是为了确保MA99有足够的数据计算
startup_candle_count: int = 200
# ==================== 订单类型配置 ====================
# 不同操作的订单类型设置
order_types = {
'entry': 'limit', # 入场使用限价单(更好的价格控制)
'exit': 'limit', # 出场使用限价单(更好的价格控制)
'stoploss': 'market', # 止损使用市价单(快速执行)
'stoploss_on_exchange': False # 不在交易所设置止损单
}
# 订单有效期设置
order_time_in_force = {
'entry': 'gtc', # Good Till Cancelled - 订单有效直到取消
'exit': 'gtc' # Good Till Cancelled - 订单有效直到取消
}
# ==================== 图表显示配置 ====================
# 策略图表配置,用于可视化分析
plot_config = {
# 主图显示(价格图上的指标)
'main_plot': {
'ma7': {'color': 'blue'}, # 7日均线 - 蓝色
'ma25': {'color': 'orange'}, # 25日均线 - 橙色
'ma99': {'color': 'red'}, # 99日均线 - 红色
},
# 子图显示(独立的指标图)
'subplots': {
"MA Distance": { # MA间距图
'ma_distance_7_25': {'color': 'green'}, # MA7与MA25的距离
'ma_distance_25_99': {'color': 'purple'}, # MA25与MA99的距离
}
}
}
def informative_pairs(self):
"""
定义额外的信息性交易对/时间间隔组合,从交易所缓存数据
这些交易对不会被交易,除非它们也在交易对列表中指定
返回值:空列表表示不需要额外的信息性数据
"""
return []
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
向给定的DataFrame添加技术分析指标
这是策略的核心方法之一,负责计算所有需要的技术指标
参数:
dataframe: 包含OHLCV数据的pandas DataFrame
metadata: 包含交易对信息的字典
返回:
添加了技术指标的DataFrame
"""
# ==================== 移动平均线计算 ====================
# 计算简单移动平均线(SMA - Simple Moving Average)
dataframe['ma7'] = ta.SMA(dataframe, timeperiod=7) # 7日短期均线
dataframe['ma25'] = ta.SMA(dataframe, timeperiod=25) # 25日中期均线
dataframe['ma99'] = ta.SMA(dataframe, timeperiod=99) # 99日长期均线
# ==================== MA间距计算 ====================
# 计算均线之间的距离(用于判断趋势强度)
dataframe['ma_distance_7_25'] = dataframe['ma7'] - dataframe['ma25'] # 短期与中期均线距离
dataframe['ma_distance_25_99'] = dataframe['ma25'] - dataframe['ma99'] # 中期与长期均线距离
# ==================== 多头排列判断 ====================
# 判断是否为多头排列(MA7 > MA25 > MA99)
# 多头排列表示上升趋势,价格在均线之上且均线呈多头排列
dataframe['bullish_alignment'] = (
(dataframe['ma7'] > dataframe['ma25']) & # 短期均线在中期均线之上
(dataframe['ma25'] > dataframe['ma99']) # 中期均线在长期均线之上
).astype(int) # 转换为0/1数值
# ==================== 连续多头排列计数 ====================
# 计算连续多头排列的K线数量
# 这个指标用于确保趋势的稳定性
dataframe['bullish_count'] = 0
for i in range(1, len(dataframe)):
if dataframe.iloc[i]['bullish_alignment'] == 1: # 当前K线为多头排列
if dataframe.iloc[i-1]['bullish_alignment'] == 1: # 前一根K线也是多头排列
# 连续计数+1
dataframe.iloc[i, dataframe.columns.get_loc('bullish_count')] = dataframe.iloc[i-1]['bullish_count'] + 1
else:
# 重新开始计数
dataframe.iloc[i, dataframe.columns.get_loc('bullish_count')] = 1
else:
# 不是多头排列,计数归零
dataframe.iloc[i, dataframe.columns.get_loc('bullish_count')] = 0
# ==================== MA间距扩大判断 ====================
# 判断MA间距是否在扩大(趋势加速的信号)
# 间距扩大表示趋势在加强
dataframe['ma_distance_expanding'] = (
(dataframe['ma_distance_7_25'] > dataframe['ma_distance_7_25'].shift(1)) & # 短中期间距在扩大
(dataframe['ma_distance_25_99'] > dataframe['ma_distance_25_99'].shift(1)) # 中长期间距在扩大
).astype(int) # 转换为0/1数值
# ==================== MA相邻差值百分比判断 ====================
# 计算相邻MA之间的差值百分比
# 确保MA7与MA25的差值不超过5%
dataframe['ma7_ma25_diff_pct'] = abs((dataframe['ma7'] - dataframe['ma25']) / dataframe['ma25']) * 100
# 确保MA25与MA99的差值不超过5%
dataframe['ma25_ma99_diff_pct'] = abs((dataframe['ma25'] - dataframe['ma99']) / dataframe['ma99']) * 100
# 判断相邻MA差值是否都在5%以内
dataframe['ma_diff_within_5pct'] = (
(dataframe['ma7_ma25_diff_pct'] <= self.buy_params['ma7_ma25_diff_pct']) & # MA7与MA25差值不超过5%
(dataframe['ma25_ma99_diff_pct'] <= self.buy_params['ma25_ma99_diff_pct']) # MA25与MA99差值不超过5%
).astype(int) # 转换为0/1数值
# ==================== MA7连续减小计算 ====================
# 判断MA7是否在减小
dataframe['ma7_decreasing'] = (dataframe['ma7'] < dataframe['ma7'].shift(1)).astype(int)
# 计算MA7连续减小的次数
dataframe['ma7_decreasing_count'] = 0
for i in range(1, len(dataframe)):
if dataframe.iloc[i]['ma7_decreasing'] == 1: # 当前K线MA7在减小
if dataframe.iloc[i-1]['ma7_decreasing'] == 1: # 前一根K线MA7也在减小
# 连续计数+1
dataframe.iloc[i, dataframe.columns.get_loc('ma7_decreasing_count')] = dataframe.iloc[i-1]['ma7_decreasing_count'] + 1
else:
# 重新开始计数
dataframe.iloc[i, dataframe.columns.get_loc('ma7_decreasing_count')] = 1
else:
# MA7没有减小,计数归零
dataframe.iloc[i, dataframe.columns.get_loc('ma7_decreasing_count')] = 0
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
基于技术分析指标,为给定的dataframe填充入场信号
这是策略的核心方法之一,定义了何时买入(做多)
入场逻辑说明:
1. 多头排列必须保持至少5根K线(确保趋势稳定)
2. MA间距必须在扩大(确保趋势在加强)
3. MA7、MA25、MA99相邻两个相差不超过5%(确保均线聚合)
4. 必须有交易量(确保市场活跃)
参数:
dataframe: 包含技术指标的pandas DataFrame
metadata: 包含交易对信息的字典
返回:
添加了入场信号的DataFrame
"""
# ==================== 入场条件设置 ====================
dataframe.loc[
(
# 条件1:多头排列保持了5根K线
# 这确保了趋势的稳定性,避免假突破
(dataframe['bullish_count'] >= self.buy_params['bullish_count']) &
# 条件2:MA间距在扩大
# 这表示趋势正在加强,是较好的入场时机
(dataframe['ma_distance_expanding'] == 1) &
# 条件3:MA相邻差值在5%以内
# 这确保均线相对聚合,避免在均线过度分散时入场
(dataframe['ma_diff_within_5pct'] == 1) &
# 条件4:确保有交易量
# 有交易量才能确保订单能够成交
(dataframe['volume'] > 0)
),
'enter_long', # 设置做多入场信号
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
基于技术分析指标,为给定的dataframe填充退出信号
这是策略的核心方法之一,定义了何时卖出(平仓)
退出逻辑说明:
1. 当多头排列被打破时立即退出(MA7不再大于MA25,或MA25不再大于MA99)
2. 当MA7连续减小3次时退出(趋势转弱信号)
3. 必须有交易量确保能够成交
这种退出方式能够及时止损,避免趋势反转带来的大幅亏损
参数:
dataframe: 包含技术指标的pandas DataFrame
metadata: 包含交易对信息的字典
返回:
添加了退出信号的DataFrame
"""
# ==================== 退出条件设置 ====================
dataframe.loc[
(
(
# 条件1:多头排列被打破
# 当MA7 <= MA25 或 MA25 <= MA99时,多头排列结束
# 这是趋势可能反转的重要信号
(dataframe['bullish_alignment'] == 0) |
# 条件2:MA7连续减小3次
# MA7连续减小表示短期趋势转弱,及时退出避免损失
(dataframe['ma7_decreasing_count'] >= self.sell_params['ma7_decreasing_count'])
) &
# 条件3:确保有交易量
# 有交易量才能确保订单能够成交
(dataframe['volume'] > 0)
),
'exit_long', # 设置平多仓信号
] = 1
return dataframe
回测报告
Result for strategy MABullishAlignment
BACKTESTING REPORT
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ ADA/USDT │ 6 │ 3.1 │ 320.180 │ 3.2 │ 2 days, 2:40:00 │ 4 0 2 66.7 │
│ CRV/USDT │ 8 │ 0.25 │ 51.882 │ 0.52 │ 3 days, 3:30:00 │ 3 0 5 37.5 │
│ CAKE/USDT │ 11 │ 0.1 │ 19.030 │ 0.19 │ 2 days, 17:05:00 │ 4 0 7 36.4 │
│ ETH/USDT │ 8 │ 0.15 │ 16.394 │ 0.16 │ 2 days, 7:00:00 │ 2 0 6 25.0 │
│ DOGE/USDT │ 8 │ 0.13 │ 4.873 │ 0.05 │ 2 days, 6:00:00 │ 3 0 5 37.5 │
│ BTC/USDT │ 9 │ -0.5 │ -89.340 │ -0.89 │ 2 days, 5:20:00 │ 2 0 7 22.2 │
│ TRX/USDT │ 14 │ -0.35 │ -95.909 │ -0.96 │ 3 days, 0:00:00 │ 6 0 8 42.9 │
│ LINK/USDT │ 11 │ -1.05 │ -163.569 │ -1.64 │ 3 days, 10:11:00 │ 3 0 8 27.3 │
│ BNB/USDT │ 9 │ -1.11 │ -197.876 │ -1.98 │ 3 days, 3:07:00 │ 3 0 6 33.3 │
│ XRP/USDT │ 10 │ -1.33 │ -257.216 │ -2.57 │ 2 days, 9:12:00 │ 4 0 6 40.0 │
│ XLM/USDT │ 6 │ -2.53 │ -278.364 │ -2.78 │ 2 days, 9:20:00 │ 0 0 6 0 │
│ SOL/USDT │ 7 │ -2.82 │ -383.961 │ -3.84 │ 3 days, 0:34:00 │ 3 0 4 42.9 │
│ AAVE/USDT │ 14 │ -2.34 │ -540.210 │ -5.4 │ 2 days, 10:00:00 │ 2 0 12 14.3 │
│ UNI/USDT │ 8 │ -4.55 │ -621.239 │ -6.21 │ 2 days, 4:30:00 │ 1 0 7 12.5 │
│ TOTAL │ 129 │ -0.96 │ -2215.326 │ -22.15 │ 2 days, 15:43:00 │ 40 0 89 31.0 │
└───────────┴────────┴──────────────┴─────────────┴──────────────┴──────────────────┴────────────────────────┘
LEFT OPEN TRADES REPORT
┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ ADA/USDT │ 1 │ 1.03 │ 19.147 │ 0.19 │ 16:00:00 │ 1 0 0 100 │
│ DOGE/USDT │ 1 │ 0.49 │ 8.964 │ 0.09 │ 12:00:00 │ 1 0 0 100 │
│ TOTAL │ 2 │ 0.76 │ 28.112 │ 0.28 │ 14:00:00 │ 2 0 0 100 │
└───────────┴────────┴──────────────┴─────────────┴──────────────┴──────────────┴────────────────────────┘
ENTER TAG STATS
┏━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Enter Tag ┃ Entries ┃ Avg Profit % ┃ Tot Profit ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ OTHER │ 129 │ -0.96 │ -2215.326 │ -22.15 │ 2 days, 15:43:00 │ 40 0 89 31.0 │
│ TOTAL │ 129 │ -0.96 │ -2215.326 │ -22.15 │ 2 days, 15:43:00 │ 40 0 89 31.0 │
└───────────┴─────────┴──────────────┴─────────────┴──────────────┴──────────────────┴────────────────────────┘
EXIT REASON STATS
┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ force_exit │ 2 │ 0.76 │ 28.112 │ 0.28 │ 14:00:00 │ 2 0 0 100 │
│ exit_signal │ 127 │ -0.99 │ -2243.438 │ -22.43 │ 2 days, 16:30:00 │ 38 0 89 29.9 │
│ TOTAL │ 129 │ -0.96 │ -2215.326 │ -22.15 │ 2 days, 15:43:00 │ 40 0 89 31.0 │
└─────────────┴───────┴──────────────┴─────────────┴──────────────┴──────────────────┴────────────────────────┘
MIXED TAG STATS
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Enter Tag ┃ Exit Reason ┃ Trades ┃ Avg Profit % ┃ Tot Profit ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ │ force_exit │ 2 │ 0.76 │ 28.112 │ 0.28 │ 14:00:00 │ 2 0 0 100 │
│ │ exit_signal │ 127 │ -0.99 │ -2243.438 │ -22.43 │ 2 days, 16:30:00 │ 38 0 89 29.9 │
│ TOTAL │ │ 129 │ -0.96 │ -2215.326 │ -22.15 │ 2 days, 15:43:00 │ 40 0 89 31.0 │
└───────────┴─────────────┴────────┴──────────────┴─────────────┴──────────────┴──────────────────┴────────────────────────┘
SUMMARY METRICS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Metric ┃ Value ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ Backtesting from │ 2021-11-04 00:00:00 │
│ Backtesting to │ 2023-01-01 00:00:00 │
│ Trading Mode │ Spot │
│ Max open trades │ 5 │
│ │ │
│ Total/Daily Avg Trades │ 129 / 0.3 │
│ Starting balance │ 10000 USDT │
│ Final balance │ 7784.674 USDT │
│ Absolute profit │ -2215.326 USDT │
│ Total profit % │ -22.15% │
│ CAGR % │ -19.43% │
│ Sortino │ -1.75 │
│ Sharpe │ -0.94 │
│ Calmar │ -4.52 │
│ SQN │ -1.83 │
│ Profit factor │ 0.64 │
│ Expectancy (Ratio) │ -17.17 (-0.25) │
│ Avg. daily profit │ -5.237 USDT │
│ Avg. stake amount │ 1794.448 USDT │
│ Total trade volume │ 461674.76 USDT │
│ │ │
│ Best Pair │ ADA/USDT 3.20% │
│ Worst Pair │ UNI/USDT -6.21% │
│ Best trade │ AAVE/USDT 24.24% │
│ Worst trade │ SOL/USDT -18.90% │
│ Best day │ 700.348 USDT │
│ Worst day │ -363.805 USDT │
│ Days win/draw/lose │ 22 / 321 / 54 │
│ Min/Max/Avg. Duration Winners │ 0d 12:00 / 9d 08:00 / 4d 02:12 │
│ Min/Max/Avg. Duration Losers │ 0d 08:00 / 4d 20:00 / 2d 00:13 │
│ Max Consecutive Wins / Loss │ 9 / 10 │
│ Rejected Entry signals │ 137 │
│ Entry/Exit Timeouts │ 0 / 0 │
│ │ │
│ Min balance │ 7756.562 USDT │
│ Max balance │ 9878.756 USDT │
│ Max % of account underwater │ 22.15% │
│ Absolute drawdown │ 2215.326 USDT (22.15%) │
│ Drawdown duration │ 395 days 16:00:00 │
│ Profit at drawdown start │ -121.244 USDT │
│ Profit at drawdown end │ -2215.326 USDT │
│ Drawdown start │ 2021-11-05 20:00:00 │
│ Drawdown end │ 2022-12-06 12:00:00 │
│ Market change │ -71.17% │
└───────────────────────────────┴────────────────────────────────┘
Backtested 2021-11-04 00:00:00 -> 2023-01-01 00:00:00 | Max open trades : 5
STRATEGY SUMMARY
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓
┃ Strategy ┃ Trades ┃ Avg Profit % ┃ Tot Profit ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃ Drawdown ┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩
│ MABullishAlignment │ 129 │ -0.96 │ -2215.326 │ -22.15 │ 2 days, 15:43:00 │ 40 0 89 31.0 │ 2215.326 22.15% │
└────────────────────┴────────┴──────────────┴─────────────┴──────────────┴──────────────────┴────────────────────────┴───────────────────┘