Symmetrical Triangle
Install and import#
npm install fintech-algorithmsimport { detectSymmetricalTriangle } from "fintech-algorithms/geometric-chart-patterns/continuation-structures/symmetrical-triangle";Signature#
detectSymmetricalTriangle()Worked example#
executed This entry is a thin wrapper its test never calls directly, so it was invoked with the arguments its shared implementation received. Real output, not asserted against a published figure.
Input#
[90, 92, 94, 96, 98, 100]Showing 6 of 96 elements.
Call#
detectSymmetricalTriangle()Returns#
object with 7 fields: pattern, state, reason, event, events, pivots, parameters
{
"pattern": "symmetrical_triangle",
"state": "confirmed",
"reason": "breakout-confirmed",
"event": {
"pattern": "symmetrical_triangle",
"state": "confirmed",
"reason": "breakout-confirmed",
"pivot_indices": [16, 22, 28, 34, 40, 46],
"pivot_prices": [122, 106, 119, 109, 117, 111],
"pivot_types": ["high", "low", "high", "low", "high", "low"],
"candidate_available_index": 48,
"confirmation_index": 49,
"breakout_direction": "bullish",
"expected_direction": "bullish",
"subtype": null,
"upper_boundary": 114.95833333333333,
"lower_boundary": 111.79166666666667,
"metrics": {
"upper_slope": -0.20833333333333334,
"lower_slope": 0.20833333333333334,
"upper_relative_slope": -0.0018274853801169592,
"lower_relative_slope": 0.0018274853801169592,
"upper_intercept": 125.16666666666666,
"lower_intercept": 101.58333333333334,
"width_start": 16.916666666666657,
"width_end": 4.416666666666657,
"convergence": 0.7389162561576359,
"parallel_gap": 0.0036549707602339184,
"impulse": 0.24489795918367346,
"impulse_direction": "bullish",
"formation_bars": 30
}
},
"events": [
{
"pattern": "symmetrical_triangle",
"state": "confirmed",
"reason": "breakout-confirmed",
"pivot_indices": [16, 22, 28, 34, 40, 46],
"pivot_prices": [122, 106, 119, 109, 117, 111],
"pivot_types": ["high", "low", "high", "low", "high", "low"],
"candidate_available_index": 48,
"confirmation_index": 49,
"breakout_direction": "bullish",
"expected_direction": "bullish",
"subtype": null,
"upper_boundary": 114.95833333333333,
"lower_boundary": 111.79166666666667,
"metrics": {
"upper_slope": -0.20833333333333334,
"lower_slope": 0.20833333333333334,
"upper_relative_slope": -0.0018274853801169592,
"lower_relative_slope": 0.0018274853801169592,
"upper_intercept": 125.16666666666666,
"lower_intercept": 101.58333333333334,
"width_start": 16.916666666666657,
"width_end": 4.416666666666657,
"convergence": 0.7389162561576359,
"parallel_gap": 0.0036549707602339184,
"impulse": 0.24489795918367346,
"impulse_direction": "bullish",
"formation_bars": 30
}
}
],
"pivots": [
{
"kind": "high",
"index": 16,
"confirmation_index": 18,
"price": 122
},
{
"kind": "low",
"index": 22,
"confirmation_index": 24,
"price": 106
},
{
"kind": "high",
"index": 28,
"confirmation_index": 30,
"price": 119
}
],
"parameters": {
"pivot_left": 2,
"pivot_right": 2,
"pivots_per_side": 3,
"max_pattern_bars": 44,
"max_confirmation_bars": 4,
"impulse_lookback": 12,
"flat_tolerance": 0.00045,
"min_slope": 0.00022,
"parallel_tolerance": 0.00035,
"min_convergence": 0.18,
"min_impulse": 0.055,
"break_buffer": 0.001
}
}Other exports#
This module also exports
traceSymmetricalTriangle. Every module additionally exports run as an alias of its
primary function, and a meta object carrying its catalog id, domain, family,
shape and article URL.
Diagrams#
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- Foundations of Technical Analysis — Andrew W. Lo, Harry Mamaysky, and Jiang Wang
- SciPy `find_peaks` — SciPy project
- The Probability of Backtest Overfitting — David H. Bailey, Jonathan M. Borwein, Marcos López de Prado, and Qiji Jim Zhu
- Applicability decision