Skip to content

MedianPrice

Median Price — the bar's (high + low) / 2, the midpoint of its range.

Quick reference

FieldValue
FamilyPrice Statistics
Input typeCandle (uses high, low)
Output typef64
Output rangeunbounded (price scale)
Default parametersnone (no parameters)
Warmup period1
InterpretationThe midpoint of the bar's range, ignoring open and close.

Formula

MedianPrice = (high + low) / 2

The median price is the centre of the bar's range — it discards where the bar opened and closed entirely. It is the price series Bill Williams' AwesomeOscillator is built on, and a useful close substitute when the close is noisy relative to the range.

Parameters

MedianPrice takes no parametersMedianPrice::new() in Rust, wickra.MedianPrice() in Python, new ta.MedianPrice() in Node.

Inputs / Outputs

From crates/wickra-core/src/indicators/median_price.rs:

rust
use wickra::{Indicator, MedianPrice, Candle};
// MedianPrice: Input = Candle, Output = f64
const _: fn(&mut MedianPrice, Candle) -> Option<f64> = <MedianPrice as Indicator>::update;

MedianPrice is a candle-input indicator that reads high and low. In Python the streaming update accepts a 6-tuple or a dict; the batch helper takes high, low numpy arrays. Node and WASM expose update(high, low) and the matching batch.

Warmup

MedianPrice::new().warmup_period() == 1. It is a stateless per-bar transform — it emits a value from the very first candle.

Edge cases

  • No warmup. Every candle produces a value immediately.
  • Reset. mp.reset() only clears the is_ready flag; there is no rolling state to discard.

Examples

Rust

rust
use wickra::{Candle, Indicator, MedianPrice};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut mp = MedianPrice::new();
    let v = mp.update(Candle::new(10.0, 12.0, 8.0, 11.0, 1.0, 0)?);
    println!("{:?}", v);
    Ok(())
}

Output:

Some(10.0)

(12 + 8) / 2 = 10. This matches the reference_value test in crates/wickra-core/src/indicators/median_price.rs.

Python

python
import numpy as np
import wickra as ta

mp = ta.MedianPrice()
print(mp.batch(np.array([12.0]), np.array([8.0])))

Output:

[10.]

Node

javascript
const ta = require('wickra');
const mp = new ta.MedianPrice();
console.log(mp.batch([12], [8]));

Output:

[ 10 ]

Interpretation

The median price is the most range-centric of the three transforms — it is blind to the close. Use it when the question is "where did this bar trade?" rather than "where did it settle?", or as the input to a Bill Williams setup.

Common pitfalls

  • Expecting the close to matter. It does not — by definition the median price ignores both the open and the close.

References

The Median Price; the (H + L) / 2 definition is standard (TA-Lib's MEDPRICE).

See also