Ascending Triangle
Install and import#
npm install fintech-algorithmsimport { detectAscendingTriangle } from "fintech-algorithms/geometric-chart-patterns/continuation-structures/ascending-triangle";Signature#
detectAscendingTriangle()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, 91.75, 93.5, 95.25, 97, 98.75]Showing 6 of 96 elements.
Call#
detectAscendingTriangle()Returns#
object with 7 fields: pattern, state, reason, event, events, pivots, parameters
{
"pattern": "ascending_triangle",
"state": "confirmed",
"reason": "breakout-confirmed",
"event": {
"pattern": "ascending_triangle",
"state": "confirmed",
"reason": "breakout-confirmed",
"pivot_indices": [16, 22, 28, 34, 40, 46],
"pivot_prices": [118, 108, 118.1, 112, 118, 115],
"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": 118.03333333333335,
"lower_boundary": 116.04166666666667,
"metrics": {
"upper_slope": 0,
"lower_slope": 0.2916666666666667,
"upper_relative_slope": 0,
"lower_relative_slope": 0.0025395443331882165,
"upper_intercept": 118.03333333333335,
"lower_intercept": 101.75,
"width_start": 11.616666666666674,
"width_end": 2.8666666666666742,
"convergence": 0.7532281205164988,
"parallel_gap": 0.0025395443331882165,
"impulse": 0.21649484536082475,
"impulse_direction": "bullish",
"formation_bars": 30
}
},
"events": [
{
"pattern": "ascending_triangle",
"state": "confirmed",
"reason": "breakout-confirmed",
"pivot_indices": [16, 22, 28, 34, 40, 46],
"pivot_prices": [118, 108, 118.1, 112, 118, 115],
"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": 118.03333333333335,
"lower_boundary": 116.04166666666667,
"metrics": {
"upper_slope": 0,
"lower_slope": 0.2916666666666667,
"upper_relative_slope": 0,
"lower_relative_slope": 0.0025395443331882165,
"upper_intercept": 118.03333333333335,
"lower_intercept": 101.75,
"width_start": 11.616666666666674,
"width_end": 2.8666666666666742,
"convergence": 0.7532281205164988,
"parallel_gap": 0.0025395443331882165,
"impulse": 0.21649484536082475,
"impulse_direction": "bullish",
"formation_bars": 30
}
}
],
"pivots": [
{
"kind": "high",
"index": 16,
"confirmation_index": 18,
"price": 118
},
{
"kind": "low",
"index": 22,
"confirmation_index": 24,
"price": 108
},
{
"kind": "high",
"index": 28,
"confirmation_index": 30,
"price": 118.1
}
],
"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
traceAscendingTriangle. 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