April 11, 2025

Whispers of the Future? Decoding EURUSD with Order Book Pressure

The recent market turmoil clearly ignited volatility and chaos in financial markets. Intraday price swings intensified for all asset classes, and strategy performance was heavily impacted by sentiment driven by social media, official announcements, and news. Notably, FX markets exhibited a clear trend: the USD weakened considerably against major currencies. The DXY experienced a sharp decline following the U.S. President’s tariff announcements.

Yet, amidst the uncertainty, Nemeton, our proprietary data, clearly signaled strong activity in the EURUSD order book.

Order Book Pressure as a Market Direction Indicator

Determining market direction is often difficult, and intraday traders who depend on price action and moving averages will likely be overwhelmed in the pursuit of trading signals and susceptible to chasing fading trends.

However, liquidity clearly indicates how traders have been positioning themselves for the upcoming few minutes, hours or, sometimes, even days. The order book is a naturally forward-looking information source that provides edge-generating signals to those who understand it and know how to use it.

In this article, the signal under analysis is Order Book Pressure. It indicates the imbalance at any point in time between bid and ask sides in quote currency terms and in percentage.

Contrarily to Dynamic Order Flow Imbalance (analysed here), Order Book Pressure is static. It is defined from each snapshot of the order book and provides insight related to the current positioning of traders, not their recent moves. Moreover, it is always constrained in the 0-1 range.

The order book data utilized in this article is from Oanda, provided at 20-minute intervals. In this example, Order Book Pressure has been sourced daily from Nemeton1 for the 2025 period, using the following script.

from aurastream_client.api import get_data
import pandas as pd
key = "API_KEY"
asset = "EURUSD_OANDA_CFD"
x = get_data(api_key = key, data = {
  "ticker_list":[asset],
    "start":"2025-01-01 00:00:00",
    "end":'2025-04-12 00:00:00',
    "interval":"1D",
    "source":"nemeton",
    "metric":"orderbook-pressure"})

 

As usual, we need to convert the data into a DataFrame in order to proceed:

def convert_to_multiindex_dict(data, 
                               exclude_float_variables = [], 
                               drop_lev0 = [],
                               drop_lev1 = [],
                               ):
        
    # Flatten the dictionary into a list of tuples (asset, time, variable, value)
    flattened_data = {}
        
    for asset, times in data.items():
        if asset not in drop_lev0:
            df = pd.DataFrame(times).T
if drop_lev1:
df = df.drop(drop_lev1,axis=1,errors="ignore") #Convert to float, unless in exclude toconv = df.columns.difference(exclude_float_variables) df[toconv] = df[toconv].astype(float) df.index = pd.to_datetime(df.index) flattened_data[asset] = df df = pd.concat(flattened_data,axis=1) df.index = pd.to_datetime(df.index) df.index += add_timedelta return df
data = convert_to_multiindex_dict(data, drop_lev1 = ["ObservationTime"], ) df = pd.DataFrame(data)
y = x.table.droplevel(1,axis=1)[asset] tgt = y.values cpd = rpt.Pelt(model="rbf").fit(tgt) result = cpd.predict(pen=10) rpt.display(tgt, result) plt.show()

In case our readers were interested in getting raw data from Oanda, they can still do that using our AuraStream API with the below code:

from aurastream_client.api import get_data

key = "YOUR_AURASTREAM_KEY"

x = get_data(api_key = key, data = {"ticker_list":["EUR_USD"], "start":"2025-01-01", "end":"2025-04-12", "interval":"1d", "source":"oanda", "dtype":"orderbook"})

Naturally, a trading strategy still requires more development. A simple yet effective idea can be to consider an outlier detection model and compare values against each other, in order to identify local peaks.

For instance, by considering the last (rolling) week of data, our outlier detection algorithm identifies abnormal peaks or troughs in Order Book Pressure. The primary question under investigation is the validity of these outliers as predictive signals.

Our algorithm offers a more localized metric to contextualize the “surprise” observed at certain price levels relative to typical values, while also retaining a memory of previously encountered data. It’s important to note that this approach is not intended as a statistical technique for characterizing the underlying value distribution.

Leveraging our data, the strategy can identify periods of relatively high concentration on either the bid or ask side of the market, as illustrated in the chart below.

Outliers are very often anticipating market moves, as we can clearly see. But while an algorithm may successfully identify peaks and troughs, it remains crucial to evaluate its performance against a relevant benchmark. In this analysis, our benchmark is the EUR/USD CFD from the beginning of the current year. We will implement a directional strategy predicated on the following logic: a significant peak in buyer interest suggests substantial informed buying pressure, prompting us to follow the prevailing trend. Conversely, a notable concentration of traders willing to sell will trigger a reversal of our position. The performance of this strategy is presented below, including a 0.01% fee on all trades.

Conclusions

These results showcase the compelling value of Order Book Pressure as a data source capable of generating insightful predictive signals for traders. Utilizing cutting-edge outlier detection models, we achieved rapid identification of significant Order Book Pressure outliers as soon as they emerged. This enables traders to proactively align with sentiment-fueled market shifts.

In conclusion, combining order flow dynamics with statistical models strengthens (once again) predictive accuracy, providing a compelling advantage in the intraday trading landscape.

1 Please note that our official launch of FX data for users is scheduled for a future date as of April 11, 2025. Stay informed about our latest updates by following us on LinkedIn, X, and all our other social media channels!

In this article:
EURUSD Outlier Detection Algorithm using Nemeton
Share on social media:
Facebook
Twitter
LinkedIn
Telegram