Title: Simulation of Alberta Pool Prices
1Simulation of Alberta Pool Prices
2Outline
- High level observations of Alberta power market
since deregulation - Load growth, Generation, Historical pool prices
- Challenges of simulating prices
- What drives price spikes?
- Albertas merit order
- Description of model
- Results
3(No Transcript)
4(No Transcript)
5(No Transcript)
6(No Transcript)
7(No Transcript)
8(No Transcript)
9Summary of Off Peak Prices
10Summary of On Peak Prices
11(No Transcript)
12(No Transcript)
13(No Transcript)
14(No Transcript)
15System Marginal Price
- Pool Price is the time weighted average of the
SMP - Intersection of Alberta Internal Load (AIL) and
merit curve determines the price - SMP remains constant as long as AIL is on the
price setting block - Many factors effect the merit order (Wind,
Imports, DCR)
16Sample SMP Calculation
Adjusted Load AIL SK WIND 0.44DCR
7496 MW 7496 MW (intersect
with merit curve) implies SMP 52.80 /MWh
17Description of Price Simulation Model
- Very simple (perhaps too simple?)
- Good
- Reproduces historically reasonable CDFs
- Stats are inline with history
- Spikes happen in the right hour endings (8-23)
- Back tests calculate margins with 1 to 1.5 std of
mean - Bad
- Fails to reproduce the large number of 10/MWh
hours. (Coal units marginal price) - Over parameterized?
- Assumes that history is likely to repeat itself
18Model Process
- Query historical data from SQL database
- Create shaping matrix
- Create noise vector
- Create price path
19Shaping Matrix(for one month)
Notation P_i,124
Day Occurrence
Hours 1 through 24
20Shaping Matrix(aggregate)
Notation, M mean() P_14,124,i
Year Label
Day Occurrence
Hours 1 through 24
21(No Transcript)
22Noise Vector
- Skip the details
- Broken out into peak (HE 8-23) and off peak
(everything else) - Remove seasonality by doing
- log(P_i) mean(log(P_month))
23Create Price Path (pseudocode)
- Tmp_(i,j) Smat(i,j) XSmat_std(i,j)
- where X a bU(0,1) random variable
- 2. Tmp flatten(Tmp)
- 3. S Sc
- where c is scaling constant
- 4. On_peak_chain emprand(Nvec_on)
- Off_peak_chain emprand(Nvec_off)
- 6. IF (HE is peak)
- P log(S) On_peak_chain
- Else
- P log(S) Off_peak_chain
- P exp(P) X
- where X a bU(0,1) random variable
24(No Transcript)
25(No Transcript)
26(No Transcript)
27(No Transcript)
28(No Transcript)
29(No Transcript)
30(No Transcript)
31Conclusion
- Thin supply stack causes wild price variation
- Generators dispatching intelligently
- Scarcity pricing, shadow bidding
- Naïve approach seems to yield reasonable results
(back tested over 1 year of data) - Flexible tool to allow users to assess the risk
of various hedge scenarios (7x24, 6x16, etc)