Hourly Price Forward Curve (HPFC) is used – among others – to determine the actual energy portfolio value. It is also necessary – as I wrote in the previous article – to perform a valuation of the client’s profile. How is HPFC calculated then? This article is about one of the algorithms, the algebraic method.
What is HPFC exactly? It is the series of the energy prices, ordered in the given date range. For example, for the year 2020, it would be 8784 values. HPFC is determined most frequently based on the hourly spot market prices. In such a case it is a price forecast that is expected to observe on the spot market, having taken into consideration both past spot prices and the actual forward product prices. Such a forecast (or projection) should equally respect:
1) the observed cycles, that is yearly, weekly and daily ones,
2) the calendar, that is, on average, lower prices for bank holidays and for the adjacent days,
3) the current price levels of the forward products (no-arbitrage condition),
4) the changes in structure resulting from the instantly increasing share of the generation of the renewable sources.
The two first points and the last one have an influence on the shape of the price curve, while the third one impacts the expected price level of the projection. In this article, I will concentrate on the first three points.
How to determine the hourly price forward structure in order to reflect the cycles and the calendar? We need the historical hourly spot prices for that. The longer the forecast period, the longer the observed hourly spot prices is needed. Generally, the following rule of thumb is applied: the period of the observed data should be at least two times longer than the forecast period. Let us assume that we intend to make a price projection for years 2020-2021. The observed hourly data could be then taken e.g. from years 2015-2019.
Averaging by Years
The graph below simplistically presents the observed prices in the form of the three-dimensional matrix for years 2015-2019, for 52 weeks of the year and for 9 day types (Mo – Monday, Tu-Th – “Tuesday-Thursday”, that is either Tuesday or Wednesday or Thursday, Fr – Friday, Sa – Saturday, Su – Sunday, Ho – a bank holiday, Be – day before a holiday, Af – day after a holiday, Br – bridge day, that is a day between two holidays, e.g. in Poland 2nd May, or a day between a holiday and either Saturday or Sunday, e.g. in Poland Friday after Corpus Christi). Naturally, the other day-type-divisions are possible. The hour dimension is “reduced”, that is each point of this three-dimensional space contains 24 price values corresponding to 24 day hours. For simplicity, in case of the spring clock shift, the value for the missing hour may be replaced by the average of the value before and after the clock shift, and in case of the autumn clock shift, the value coming from the additional hour may be averaged with the value from the hour immediately before the clock shift.
For simplicity, I marked only five points in the form of spheres on the graph – each of them reflects the weight I assign to the price observations in each year. Thus, the older the observation, the smaller the weight is. In total there should be 2 340 points = 5 years x 52 weeks x 9 types of day. This, however, will not be true, that is not all places (points) in the matrix will be filled up due to the moving bank holidays which may fall in various weeks of a year. In any case, it considers not only the bank holidays themselves but also the days adjacent to them. Instead of dividing a year into 52 weeks one can use the division into 12 months, but this will not solve the problem – for example, Easter may fall either in March or in April. How it can be maintained – I wrote in the following section. In case of the week-granulation, the sporadically encountered 53rd week may be appended either to 1st or to 52nd week.
Essentially, the algorithm of the price structure determination for the future years (for now, without level adjustment) comes down to rewriting of the averaged values from the past years for any given week of the year (or month) and for any given day type. Let us note that we do not need the year dimension when determining the price projection for the future period. Namely, when we are to determine the day prices e.g. for the 1st January 2020, we just need the averaged prices for a holiday (Ho) falling on the first week (or month) of a year. In consequence, the three-dimensional matrix may be flattened, leaving only two of its dimensions, that is the week (or month) dimension and the day-type one. When averaging by years, the weights assigned to each year should be applied.
Averaging by Weeks
As a result of flattening described in the above section, we will get the two-dimensional matrix with 468 elements = 52 weeks x 9 types of day. Basically, each element should contain 24 values, each of them being averaged by years and by day types (e.g. for ‘Tuesday-Thursday’ in a week without a holiday we expect 3 such days, and in Poland, for example, in the first week of year there are two bank holidays – New Year’s Day and Epiphany).
Not all 468 points will be filled up with values then. Additionally, some of them may contain outliers, which, most probably, will not be observed in the same week for the same day type in the future. Fortunately, the moving averaging of adjacent weeks (months) may come forward. Each point, that is each set of 24 values may be averaged by using appropriate week (or month) weights from the adjacent points. It is natural to assign the biggest weight to the central node and the smaller weights to the adjacent nodes, respectively. On the above graph, I marked them for the one chosen element, that is for the day type “Ho” (bank holiday) that falls on the 30th week of a year. Thus, the resulting values for the 30th week are the result of the averaging of weeks (nodes) from 27 to 33. The diameters of the points reflect the weights attributed to the respective weeks.
On the data edges, that is in the vicinity of 1st and 52nd week of a year, one can use the elements from the end or from the beginning of a year, respectively. If the above algorithm does not ensure that all matrix elements are populated, the missing data may be estimated based on the other day types, for example, one can assume values from Sundays for bank holidays, and for the holiday-adjacent days the values from typical days that are neither Saturday nor Sunday can be used as proxies. The same procedure can be applied in the case, when we require an element (node) contains the averaged data based on minimum, say, 3 observations, and if this condition is not fulfilled. In other words, we state that 3 observations are not enough to be representative for making a forecast. In such a case we can replace the missing data with the data coming from the point (node) with the closest characteristics.
As a result of the above calculations, we will receive a “cast” which can be applied to each day of the forecast period. After determining the day type and the week (month) number, we have 24 price values that are the result of the year and day-types averaging for the previous observations.
The graph below presents the price projection for years 2020-2021, yet before bringing it to the level of standard products that are actually observed on the forward market. It is worth noting the year cycle that is the similarity of the curve shape between the year 2020 and the year 2021.
After proper scaling of the graph (2nd and 3rd week of 2020), one can observe the week cycle as well. Note, that 6th January 2020 (a bank holiday falling on Monday) has significantly lower price level than the price level from the next Monday on 13th January 2020.
To present the day cycle I chose 13th and 14th January 2020:
Summing up, the resulting price structure (or its shape) fulfils all conditions imposed at the beginning that is it reflects both the calendar and the observed cycles on the energy market.
The price structure projection calculated in a way presented above does not reflect the price levels of the forward products, which is schematically presented on the graph below (the projection level is too low due to the dramatic increase of the prices over the current year):
The orange lines represent the price levels resulting from the quotes of the forward products in the middle of September 2019. At this time, the following forward contracts existed on the Polish market:
- quarter 1 of the year 2020,
- the year 2020,
- the year 2021.
In order to fulfil the no-arbitrage condition, all values of the projected price (the blue line) are to be brought to such a level that their averages in the following delivery periods correspond to the actual price levels of the forward products (the orange lines). It can be achieved by using two methods: multiplicative and additive. The first one comes down to multiplying each price value by the proper number so that the required price level is satisfied. The additive method relies on adding the proper number to each price value to satisfy the required price level. Both methods have their advantages and disadvantages which I will elaborate on here.
On the below graph I presented the price projection that has been brought to the level of the forward products by using the multiplicative method.
The average level of the price projection corresponds to the quotes of the forward product prices. In other words, I have just received the price forecast which satisfies the no-arbitrage condition, that is it represents the currently quoted prices of standard products on the forward market.
In the end, I would like to note that the HPFC should be determined at least once a working day, mainly due to the volatility of the prices of the forward products.
In case of any questions or remarks – please leave your comment or contact me.