Cluster Analysis
Section F: Trade archetype clustering and exit rule suggestions.
clusters
Clustering analysis: identify trade archetypes.
cluster_features(trades)
Construct feature matrix for clustering.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
trades
|
TradeSet
|
Trade geometry data |
required |
Returns:
| Name | Type | Description |
|---|---|---|
features |
ndarray
|
Feature matrix (n_trades x n_features) |
feature_names |
list of str
|
Names of features |
Notes
Features include: - MFE (max favorable excursion) - MAE (max adverse excursion) - MFE/|MAE| ratio (avoid div by zero) - t_mfe (time to reach MFE) - t_mae (time to reach MAE) - ordering_encoded (0=tie, 1=mfe_first, 2=mae_first)
Source code in signal_analyzer/analysis/clusters.py
cluster_trades(trades, n_clusters=None, max_clusters=6, method='kmeans', random_state=42)
Cluster trades into archetypes.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
trades
|
TradeSet
|
Trade geometry data |
required |
n_clusters
|
int
|
Number of clusters. If None, automatically select using silhouette score. |
None
|
max_clusters
|
int
|
Maximum number of clusters to test for auto-selection |
6
|
method
|
(kmeans, hdbscan)
|
Clustering method |
'kmeans'
|
random_state
|
int
|
Random seed for reproducibility |
42
|
Returns:
| Type | Description |
|---|---|
dict
|
Dictionary containing: - 'labels': cluster labels (n_trades,) - 'n_clusters': number of clusters - 'features': feature matrix - 'feature_names': list of feature names - 'scaler': fitted StandardScaler - 'model': fitted clustering model |
Source code in signal_analyzer/analysis/clusters.py
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 | |
cluster_summary(trades, cluster_result)
Generate summary statistics for each cluster.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
trades
|
TradeSet
|
Trade geometry data |
required |
cluster_result
|
dict
|
Output from cluster_trades |
required |
Returns:
| Type | Description |
|---|---|
dict
|
Dictionary mapping cluster_id -> summary dict with: - 'count': number of trades - 'median_mfe': median MFE - 'median_mae': median MAE - 'win_rate': fraction with MFE > 0 - 'mfe_first_rate': fraction where MFE came first - 'mae_first_rate': fraction where MAE came first - 'median_t_mfe': median time to MFE - 'median_t_mae': median time to MAE |
Source code in signal_analyzer/analysis/clusters.py
suggest_exit_rules(cluster_summaries, mfe_threshold_fast=1.0, dd_threshold_tight=1.0)
Suggest exit rule archetypes based on cluster characteristics.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cluster_summaries
|
dict
|
Output from cluster_summary |
required |
mfe_threshold_fast
|
float
|
MFE threshold to consider "fast winner" |
1.0
|
dd_threshold_tight
|
float
|
DD threshold to consider "tight stop friendly" |
1.0
|
Returns:
| Type | Description |
|---|---|
dict
|
Dictionary mapping cluster_id -> archetype description |