Indexes of lowest and highest values over a specified period (MINMAXINDEX)
Summary
Returns the absolute input indices of the lowest and highest values within each rolling window of optInTimePeriod bars. Index variant of MINMAX.
Chart
Chart metadata i
Outputs
outMinIdx:line·bar_indexoutMaxIdx:line·bar_index
Formula
outMinIdx[i] = index of min(inReal[i-optInTimePeriod+1 .. i])
outMaxIdx[i] = index of max(inReal[i-optInTimePeriod+1 .. i])
Notes
- When several bars in a window share the extreme value, the index of the most recent of them is returned.
Inputs
inReal— Input series scanned for extremes
Outputs
outMinIdx— Absolute index (into inReal) of the window minimumoutMaxIdx— Absolute index (into inReal) of the window maximum
Parameters
| Parameter | Type | Default | Accepted values | Description |
|---|---|---|---|---|
optInTimePeriod | integer | 30 | 2–100000 | Window length in bars |
Properties
Numerical Stability: Start-Independent
| ☐ Overlap Input |
| ✅ Independent Y-Axis i |
| ☐ Candlestick |
| ☐ Display Shift |
| ☐ Can Output NaN or ±Inf |
| ☐ Identity at Period 1 |
| ☐ Uses Transcendental |
| ☐ Input Must Be Positive |
Example
C
#include <stdio.h>
#include <ta_libc.h>
int n = 252;
double series[252]; /* your data, oldest first */
int minIdx[252], maxIdx[252];
int outBegIdx, outNBElement;
TA_Initialize();
TA_MINMAXINDEX( 0, n - 1, series, 30, &outBegIdx, &outNBElement, minIdx, maxIdx );
printf( "%d values from bar %d; last minIdx = %d\n", outNBElement, outBegIdx, minIdx[outNBElement - 1] );Rust
use ta_lib::Core;
let series = vec![0.0; 252]; // your data, oldest first
let mut min_idx = vec![0i32; 252];
let mut max_idx = vec![0i32; 252];
let core = Core::new();
let range = core.minmaxindex(0, series.len() - 1, &series, 30, &mut min_idx, &mut max_idx)?;
println!("{} values from bar {}; last min_idx = {}", range.count, range.beg_idx, min_idx[range.count - 1]);Java
import io.github.talib.Core;
import io.github.talib.OutRange;
double[] series = new double[252]; // your data, oldest first
int[] minIdx = new int[252];
int[] maxIdx = new int[252];
Core core = Core.DEFAULT;
OutRange r = core.minmaxindex(0, series.length - 1, series, 30, minIdx, maxIdx);
System.out.println(r.count() + " values from bar " + r.begIdx() + "; last minIdx = " + minIdx[r.count() - 1]);C#
using System;
using TALib;
var series = new double[252]; // your data, oldest first
var minIdx = new int[252];
var maxIdx = new int[252];
var core = Core.Default;
OutRange r = core.Minmaxindex(0, series.Length - 1, series, 30, minIdx, maxIdx);
Console.WriteLine($"{r.Count} values from bar {r.BegIdx}; last minIdx = {minIdx[r.Count - 1]}");TypeScript
import { minmaxindex } from 'ta-lib';
const series = new Float64Array(252); // your data, oldest first
const { begIdx, outMinIdx, outMaxIdx } = minmaxindex(series, {
timePeriod: 30,
});
console.log(outMinIdx.length + ' values from bar ' + begIdx + '; last outMinIdx = ' + outMinIdx[outMinIdx.length - 1]);Implementation
Added in 0.4.0.
TA-Lib Definition: minmaxindex.c · minmaxindex.yaml
| Native | File |
|---|---|
| C | ta_MINMAXINDEX.c |
| Rust | minmaxindex.rs |
| Java | Core_MINMAXINDEX.java |
| C# | Core_MINMAXINDEX.cs |
| TypeScript | minmaxindex.ts |
Python: talib.MINMAXINDEX, see ta-lib-python.
TA-Lib is also available for R and more using a wrapper.
Aliases
Lowest/Highest Index