I am attempting to model long-term electricity prices using today's futures prices. Unlike most futures, electricity is delivered over a period of time (usually a month), rather than at a point in time (a date). The traditional futures equation of F = S * exp(t*(r + u - y)) breaks down here. Rather, the industry refers to the disparity between the theoretical price of electricity using our traditional equation and the actual futures price of electricity as the risk premium, which is concave with respect to time: the premium increases for long-dated contracts, peaks, and finally declines until it reaches zero at contract maturity.

Consequently, my attempts to model this situation using ARIMA with d=0 or d=1 has failed, as neither picks up that inflection. But I suspect that would be the case with d=2 as well, unless that inflection has already occurred during the training sample. My question is the following: how can I model the evolution of that risk premium for contracts whose risk premia have not yet peaked?

Thank you for your assistance.

Monotonic increase of December 2026 Futures as of late January 2021 (legend shows values at various confidence levels):

Monotonic decrease in February 2021 contract settlements as of late January (legend showing similar confidence levels) enter image description here

Edit 1: I cannot attach sample data, but the included images illustrate the issue I'm facing: at some point the increasing function should inflect; I assume the way to do that is to somehow "tell" the program that the data I'm fitting to the model are only in the increasing portion -- i.e., fit half a parabola to the data and then mirror that increase to the downside.

Edit 2: I should add that I have passed daily geometric returns, i.e., y(t) / y(t-1) into the ARIMA model, and than applied their cumulative products to the last observed prices. This gives the model a first-order (not arithmetic) integration by default.

  • $\begingroup$ Do you have some sample data that you can share? $\endgroup$ Feb 24, 2021 at 20:28
  • $\begingroup$ Afraid I can't find a way to attach it via StackExchange (still a bit of a newbie here); I have, however, graphs of the resulting output, if that helps. $\endgroup$
    – CasusBelli
    Feb 25, 2021 at 14:46
  • 1
    $\begingroup$ I'd like to pass one of these series through SVD to check if it's able to extract the cycle and trend but I would need the data. If you have a github account, you can create a private gist with CSV content there and share the link. $\endgroup$ Feb 25, 2021 at 15:16
  • 1
    $\begingroup$ I added a comment with some results under the gist. Not much to look at. $\endgroup$ Feb 25, 2021 at 16:45
  • 1
    $\begingroup$ Perhaps you can forecast calendar spreads instead? And come up with a function that derives long-dated futures prices from spot prices, near-term futures and calendar-spreads? $\endgroup$ Feb 25, 2021 at 17:34


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.