These specifications are confidential and are the exclusive Intellectual Property of pdView Pty Ltd.
All pdBidr price variables are priced at the RRP, ie. at the node. This includes SRMC and trader price parameters. Hence bid Pricebands must be divided by the MLF in any calculations or conditions so that all price values are from the same frame of reference. For example if volume is to be allocated to the first PriceBand < SRMC it implies the first Priceband/MLF < SRMC.
pdBidr allocation logic includes a condition that ensures volume cannot be allocated to PB9 or PB10. This condition may be disabled.
Renewable bid allocation - no FCAS
Summary
The allocation logic aims to maximise value in a similar way to how Traders intuitive and dynamically bid renewable plant. That is, Traders price volume depending on the expected price and the expected price trajectory for every dispatch interval.
Importantly Traders use their skill to set key parameters in pdBidr. These are four priceband values and two trader parameters called Trader Price Max (TPmax) and Trader Price Min (TPmin). The Trader Parameters, SRMC (or turn down value) and forecast prices determine which pricebands volume will be allocated. along with determine
pdBidr allocates all volume to one of the following pricebands based on
Inputs
Information | Source | Description |
---|---|---|
SRMC+ | Solver (any upstream process would do however the solver already calculates this liability). If FCAS liability is excluded then the source is the Trader Parameters. | This is intended to represent the static SRMC plus the Raise Contingency FCAS liability (which is usually very small). Note that the addition of the FCAS liability can be disabled if required. If it is disabled then this constant can be thought of as TraderPriceMiddle, much like TPmin and TPmax |
FRRP | User selected price forecast source | The forecast energy price |
TraderPriceMinimum and TraderPriceMaximum (TPmin and TPmax) | Trader parameters | The upper and lower pricebands that are meant to span the flat area of the supply curve that represents the bulk of the SRMC of the regions renewable plant. |
Constraint_status | MMS.dispatch_local_price | Constraint_status is equal to 1 if local_price_adjustment is positive and represents the unit is at risk of being constrained OFF, 0 means there are no binding constraints for that unit and -1 means that the local_price_adjustment is negative and represents the unit is at risk of being constrained ON. As of the time of writing we consider it best to enter the constraint_status as a static trader parameter. |
max_capacity (MC) | MMS.dudetail | The volume to allocate in the chosen priceband. |
Formulas
Note that these formulas are written to be programmatically unambiguous. To simplify the concept this section is repeated and simplified under the heading below “Formulas - simplified”. Note that the simplified explanation applies where the FCAS liability is either switched off or is small.
Price_type (PT)
The allocation rules are designed to ensure that the unit will not be generating if a FRRP less than the TPmin is likely to occur. Similarly they are designed so that the unit will be generating at full capacity if the unit is operating between TPmin and TPmax but the FRRP is likely to increase above TPmax. The allocation rules are also designed to accommodate price uncertainty.
The forecast price for each dispatch interval is characterised as a “price_type (PT)” where the PT is assigned a label (which is entirely arbitrary) of either -10, -1, 1 or 10. PT is a function of the TraderPrices and SRMC+. PT is defined as follows.
if FRRP > max(TPmax , SRMC+) then PT = 10
if FRRP > min(TPmax , SRMC+) and FRRP <= max(TPmax , SRMC+) then PT = 1
if FRRP > min(TPmin , SRMC+) and FRRP <= min(TPmax , SRMC+) then PT = -1
if FRRP <= min(TPmin , SRMC+) then PT = -10
PT for the next three dispatch intervals
The latest dispatch price (ActRRP) is also included in the definition of PT for the first three dispatch intervals. The actual RRP is included to allow for the scenario where the actual prices are low but forecast prices were not low. Without this logic it is possible for actual prices to be very low (e.g. -$500) but volume will remain in PB1 because forecast prices are high (e.g. $0)). Hence the following definition applies for the next three dispatch intervals in a bid:
iff for dispatch interval at time t where
t <= current_datetime + 15 (minutes) then
if min(ActRRP, FRRPt) > max(TPmax , SRMC+) then PTt = 10
if min(ActRRP, FRRPt) > min(TPmax , SRMC+) and min(ActRRP, FRRPt) <= max(TPmax , SRMC+) then PTt= 1
if min(ActRRP, FRRPt) > min(TPmin , SRMC+) and min(ActRRP, FRRPt) <= min(TPmax , SRMC+) then PTt = -1
if min(ActRRP, FRRPt) <= min(TPmin , SRMC+) then PTt = -10
The reason to include ActRRP for the first three dispatch intervals is that we have found earnings outcomes can be consistently improved when the dispatch price is below SRMC but the forecastRRP is greater than TPmax. Effectively the price forecast is not reflecting actual price outcomes and hence without considering dispatch price the bid allocation can maintain volume allocation to priceband 1 which ensures a positive target even though prices are below SRMC.
Price_phase (PP)
A Price_phase (PP) is assigned to each dispatch interval and is a function of the current and future PT. The idea is to characterise the future price expectations beyond any given dispatch interval. The PP is defined as follows.
if PT = 10 then PP = 10
else PP = min(PTi=1 to n) where PTi <> 10 for all i
end
Allocation Rules
All equations below are shortened and imply PB. I.e. max(<TPmin , >SRMC+ ) means “allocate MC to the first PB where max(PB<TPmin , PB>SRMC+ )”
Different rules for different constraint_status relative to constraint_status = 0 are in bold.
Constraint_status = Any (-1, 0, 1)
If PT = 10 then allocate MC to PB1 |
---|
Constraint_status = 0
PT = -10 | PT = -1 | PT = 1 | |
---|---|---|---|
PP = 1 | N/A | N/A | min(>TPmin , <SRMC+ ) |
PP = -1 | N/A | min(<TPmax , <SRMC+ ) | min(>TPmin , <SRMC+ ) |
PP = -10 | max(<TPmax , >SRMC+ ) | min(<TPmax , >SRMC+ ) | min(<TPmax , <SRMC+ ) |
Constraint_status = 1 (constrained off)
PT = -10 | PT = -1 | PT = 1 | |
---|---|---|---|
PP = 1 | N/A | N/A | PB1 |
PP = -1 | N/A | min(<TPmax , <SRMC+ ) | min(>TPmin , <SRMC+ ) |
PP = -10 | max(<TPmax , >SRMC+ ) | min(<TPmax , >SRMC+ ) | min(<TPmax , <SRMC+ ) |
Constraint_status = -1 (constrained on)
PT = -10 | PT = -1 | PT = 1 | |
---|---|---|---|
PP = 1 | N/A | N/A | min(>TPmin , <SRMC+ ) |
PP = -1 | N/A | max(<TPmax , <SRMC+ ) | min(>TPmin , <SRMC+ ) |
PP = -10 | PB10 | PB10 | max(<TPmax , <SRMC+ ) |
Formulas - simplified
It will be true the vast majority of the time that TPmin < SRMC+ < TPmax . The above formulas have been simplified below given this condition is true.
Price_type
One of four price_types is assigned to every dispatch interval, where a price_type is defined as follows:
if TPmax < FRRP then price_type = 10
if SRMC+ < FRRP <= TPmax then price_type = 1
if TPmin < FRRP <= SRMC+ then price_type = -1
if FRRP <= TPmin then price-type = -10
Price_phase
One of four price_phases is assigned to every dispatch interval, where a price_phase is defined as follows:
if PT = 10 then PP = 10
else PP = min(PTi to n) where PTi <> 10 for all i (where i is a dispatch interval)
end
Relative prices
The bid allocation rules defines price_type and price_phase that are a function of TPmin, SRMC and TPmax.
Then depending on the price_type and price_phase of a dispatch interval then volume is assigned to one of five Pricebands shown in the diagramme below.
Allocation Rules - Simplified
All equations below are shortened and imply first priceband that meets the conditions. For example <TPmin means “allocate MC to the first PB <TPmin “
Different rules for different constraint_status are in bold.
Constraint_status = Any (-1, 0, 1)
If PT = 10 then allocate MC to PB1 |
---|
Constraint_status = 0
PT = -10 | PT = -1 | PT = 1 | |
---|---|---|---|
PP = 1 | N/A | N/A | > TPmin |
PP = -1 | N/A | <SRMC+ | >TPmin |
PP = -10 | <TPmax | >SRMC+ | < SRMC+ |
Constraint_status = 1 (constrained off)
PT = -10 | PT = -1 | PT = 1 | |
---|---|---|---|
PP = 1 | N/A | N/A | PB1 |
PP = -1 | N/A | <SRMC+ | >TPmin |
PP = -10 | <TPmax | >SRMC+ | <SRMC+ |
Constraint_status = -1 (constrained on)
PT = -10 | PT = -1 | PT = 1 | |
---|---|---|---|
PP = 1 | N/A | N/A | >TPmin |
PP = -1 | N/A | <TPmax | >TPmin |
PP = -10 | PB10 | PB10 | <TPmax |
Choosing values for Traderprice max and min
The aim of the volume allocation rules is for generation to be zero before prices become materially less than SRMC+ and for generation to be at a maximum before prices move materially greater than SRMC+ . To realise this aim volume should be allocated in anticipation of prices that would, or might, transition from prices that would result in positive earnings to prices that would result in negative earnings (and vice versa).
Trader judgement process
The physical trader has an important role in selecting appropriate values for TPmin , SRMC, TPmax and the pricebands as bid.
Review the supply curve around your SRMC (say -$40, an example is shown below).
Choose a price point that is 100MW (say) below your SRMC but where the price point is not too much less than SRMC (enter this price point under Settings/Algo Bid Parameters as trader priceband min, TPmin). In the example I’ve chosen -$52.
Similarly choose a price point 100MW (say) above your SRMC but where the price point is not too much greater than SRMC (enter this price point as trader priceband max, TPmax). In the example I’ve chosen -$35.
Then choose PB2, PB3, PB4 and PB5 as shown below.
Note that pricebands and trader priceband min and max are mostly static numbers. They should only be adjusted to fine tune results or when there is a change to the SRMC. In total the above requires 6 pricebands, the four described above plus PB1 and PB10. PB6 - PB9 should be chosen either to provide spot trading flexibility (for example portfolio optimisation) or for the rare occasion when FCAS liability is significant. Otherwise PB6-9 is effectively redundant.