Trades Module
TradeSet dataclass and path computation functions.
trades
Compute trade paths and geometry metrics (MFE, MAE, timing).
TradeSet
dataclass
Container for trade geometry data.
Attributes:
| Name | Type | Description |
|---|---|---|
side |
{long, short}
|
Trade direction |
n_trades |
int
|
Number of trades |
entry_idx |
ndarray
|
Entry bar indices (shape: n_trades) |
entry_price |
ndarray
|
Entry prices (shape: n_trades) |
mfe |
ndarray
|
Max Favorable Excursion in % (shape: n_trades) |
mae |
ndarray
|
Max Adverse Excursion in % (typically negative) (shape: n_trades) |
t_mfe |
ndarray
|
Time (bars) to reach MFE (shape: n_trades) |
t_mae |
ndarray
|
Time (bars) to reach MAE (shape: n_trades) |
vol_at_entry |
(ndarray, optional)
|
Volatility at entry (for normalization) (shape: n_trades) |
mfe_path |
(ndarray, optional)
|
Full MFE path over horizon (shape: n_trades, H) |
mae_path |
(ndarray, optional)
|
Full MAE path over horizon (shape: n_trades, H) |
Source code in signal_analyzer/core/trades.py
compute_trade_paths(ohlc, entries, H, side, open_col='Open', high_col='High', low_col='Low', vol_col=None, store_paths=False)
Extract forward windows for each trade and compute MFE/MAE metrics.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ohlc
|
DataFrame
|
OHLC data with columns: Open, High, Low (and optionally volatility) |
required |
entries
|
ndarray
|
Array of entry indices (from signal_to_events) |
required |
H
|
int
|
Forward horizon in bars |
required |
side
|
(long, short)
|
Trade direction |
'long'
|
open_col
|
str
|
Column names for OHLC |
'Open'
|
high_col
|
str
|
Column names for OHLC |
'Open'
|
low_col
|
str
|
Column names for OHLC |
'Open'
|
vol_col
|
str
|
Column name for volatility (e.g., ATR) |
None
|
store_paths
|
bool
|
If True, store full MFE/MAE paths (shape: n_trades, H) |
False
|
Returns:
| Type | Description |
|---|---|
TradeSet
|
Container with trade geometry data |
Notes
- MFE: Max Favorable Excursion (best achievable profit %)
- MAE: Max Adverse Excursion (worst drawdown %, typically negative)
- For longs: favorable = high, adverse = low
- For shorts: favorable = low (inverted for PnL), adverse = high
- Trades with insufficient forward bars or invalid data are excluded
Source code in signal_analyzer/core/trades.py
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | |