Skip to content

TRADINGLOAD

TRADINGLOAD shows half-hourly average dispatch levels, including fields to handle the Ancillary Services functionality.

Deprecation Warning

This table is in the HISTORICAL TABLES package, so is likely deprecated.

Source

Own (confidential) TRADINGLOAD data updates half hourly, with public availability of all data on next day.

Tip

1 second, 6 second, 5 minute, 60 second and regulation refer to types of FCAS markets.

Column Schema

DUID

Dispatchable Unit Identifier

Warning

This column may contain funny characters such as / (slash) or # (hash). This may break hive-style partitioning.

For more information, see the dedicated documentation page.

SQL Type: VARCHAR2(10) Polars Type: pl.Categorical

This column is mandatory, and a primary key.

Examples:

  • ADPBA1G
  • ADPBA1L
  • ADPPV1
  • AGLHAL
  • AGLSOM
  • ANGAST1
  • APD01
  • ARWF1
  • ASNAES1
  • ASNBRL1

PERIODID

Period Identifier

SQL Type: NUMBER(3,0) Polars Type: pl.Int16

This column is mandatory, and a primary key.

Examples: 1, 3

RUNNO

Dispatch run no.

SQL Type: NUMBER(3,0) Polars Type: pl.UInt16

This column is mandatory, and a primary key.

Example: 1

SETTLEMENTDATE

Date that this data applies to

Warning

Despite what the name suggests, this is a datetime, not a date.

SQL Type: DATE Polars Type: pl.Datetime()

This column is mandatory, and a primary key.

Example: 2021/09/01 00:30:00

TRADETYPE

Not used

SQL Type: NUMBER(2,0) Polars Type: pl.Int8

This column is mandatory, and a primary key.

Example: 0

AVAILABILITY

Bid energy availability

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.04, 0, 5, 1475

INITIALMW

Average Initial MW at start of each period

Warning

In AEMO data, datetimes usually refer to the end of an interval. Power values usually do too. However this column refers to the start of the interval. So you need to subtract 5 minutes from SETTLEMENTDATE to align it with INITIALMW.

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: -0.1, 0.01, 0, 603

LASTCHANGED

Last date and time record changed

For more information, see the dedicated documentation page.

SQL Type: DATE Polars Type: pl.Datetime()

This column is not mandatory.

Example: 2021/09/01 00:25:04

LOWER5MIN

Average 5 min lower dispatch

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.02, 0, 1, 25

LOWER6SEC

Average60 sec lower dispatch

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.14, 0, 1, 61

LOWER60SEC

Average 60 sec lower dispatch

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 1.33, 0, 1, 45

LOWERREG

Lower Regulation reserve target

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.01, 0, 1, 30

RAISE5MIN

Average 5 min raise dispatch

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.33, 0, 1, 61

RAISE6SEC

Average 6 sec raise dispatch

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.33, 0, 1, 79

RAISE60SEC

Average 60 sec raise dispatch

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.33, 0, 1, 115

RAISEREG

Raise Regulation reserve target

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.33, 0, 1, 57

RAMPDOWNRATE

Average ramp down rate

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.18, 0, 60, 41760

RAMPUPRATE

Average ramp up rate

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 1.16, 0, 60, 41760

SEMIDISPATCHCAP

Boolean representation flagging if the Target is Capped

SQL Type: NUMBER(3,0) Polars Type: pl.Boolean

This column is not mandatory.

Examples: 0, 1

TOTALCLEARED

Average total MW dispatched over period

SQL Type: NUMBER(15,5) Polars Type: pl.Float64

This column is not mandatory.

Examples: 0.04, 0, 1, 720

New Data Timing

Every 30 minutes

Code Examples

Polars

Casting is enums, categoricals etc is not essential, but may speed up parsing. Swapping int for pl.UInt16, pl.Int32 would also speed up parsing. However some of the datatypes are inferred, so they may be wrong.

This code deduplicates for you. Deduplication is normally only required across multiple months.

This code assumes that all columns are present, which may not be true for older files.

import polars as pl
import polars.selectors as cs

# e.g. "2029/03/15 00:05:00"
dt_s_fmt = "%Y/%m/%d %H:%M:%S"

csv_paths = ["SOMEFILE.CSV", "OTHERFILE.CSV"]

lf = (
    pl.concat(
        [
            pl.scan_csv(
                csv_path,  # must be unzipped beforehand
                skip_rows=1,  # skip the header
                infer_schema=False,  # much faster
            )
            .filter(cs.by_index(0) == "D")  # drop the footer
            .select(~cs.by_index(range(4)))  # drop metadata columns
            for csv_path in csv_paths
        ],
        how="diagonal_relaxed",
    )
    .with_columns(
        pl.col("SETTLEMENTDATE", "LASTCHANGED").str.strptime(pl.Datetime, dt_s_fmt),
    )
    # Polars can't cast string straight to bool. Need to go via something else.
    .cast({"SEMIDISPATCHCAP": pl.UInt8})
    .cast(
        {
            "DUID": pl.Categorical,
            "PERIODID": int,  # or pl.Int16
            "RUNNO": int,  # or pl.UInt16
            "TRADETYPE": int,  # or pl.Int8
            "AVAILABILITY": pl.Float64,
            "INITIALMW": pl.Float64,
            "LOWER5MIN": pl.Float64,
            "LOWER6SEC": pl.Float64,
            "LOWER60SEC": pl.Float64,
            "LOWERREG": pl.Float64,
            "RAISE5MIN": pl.Float64,
            "RAISE6SEC": pl.Float64,
            "RAISE60SEC": pl.Float64,
            "RAISEREG": pl.Float64,
            "RAMPDOWNRATE": pl.Float64,
            "RAMPUPRATE": pl.Float64,
            "SEMIDISPATCHCAP": pl.Boolean,
            "TOTALCLEARED": pl.Float64,
        }
    )
    # Drop deprecated/unused columns
    .drop("TRADETYPE")
    # Deduplicate
    # We want one row per ['DUID', 'PERIODID', 'RUNNO', 'SETTLEMENTDATE', 'TRADETYPE']
    # Tie-breaker: greatest value of ['LASTCHANGED']
    .sort(["LASTCHANGED"], descending=False)
    .unique(
        subset=["DUID", "PERIODID", "RUNNO", "SETTLEMENTDATE", "TRADETYPE"], keep="last"
    )
)

Nemosis

from nemosis import dynamic_data_compiler

df = dynamic_data_compiler(
    '2024/01/01 00:00:00',
    '2024/01/31 00:00:00',
    "TRADINGLOAD",
    "data/"
)

Nemosis only includes a subset of columns by default, as an optimisation. (i.e. the commonly used columns.) To include others:

from nemosis import defaults

defaults.table_columns["TRADINGLOAD"] += ["PERIODID", "RUNNO", "TRADETYPE", "LASTCHANGED"]
df = dynamic_data_compiler(...)

Example File

From PUBLIC_DVD_TRADINGLOAD_202109010000.zip

SETTLEMENTDATERUNNODUIDTRADETYPEPERIODIDINITIALMWTOTALCLEAREDRAMPDOWNRATERAMPUPRATELOWER5MINLOWER60SECLOWER6SECRAISE5MINRAISE60SECRAISE6SECLASTCHANGEDLOWERREGRAISEREGAVAILABILITYSEMIDISPATCHCAP
2021/09/01 00:30:001ADPBA1G010093930000002021/09/01 00:25:040000
2021/09/01 00:30:001ADPBA1L010.01093930000002021/09/01 00:25:040000
2021/09/01 00:30:001ADPPV101001201200000002021/09/01 00:25:040000
2021/09/01 00:30:001AGLHAL0131.98327207200000002021/09/01 00:25:04001000
2021/09/01 00:30:001AGLSOM01004804800000002021/09/01 00:25:04001600
2021/09/01 00:30:001ANGAST101-0.108408400000002021/09/01 00:25:0400490
2021/09/01 00:30:001APD01010000000105.89115312021/09/01 00:25:040000
2021/09/01 00:30:001ARWF1013.323.7760012000000002021/09/01 00:25:04003.770
2021/09/01 00:30:001ASNAES10100006662042021/09/01 00:25:040000
2021/09/01 00:30:001ASNBRL101000000063102021/09/01 00:25:040000
2021/09/01 00:30:001ASNENC10100000005347792021/09/01 00:25:040000
...

CSETP.WORLDDVD_TRADINGLOADAEMOPUBLIC2021/10/0703:50:0400000003503539470000000350353744
ITRADINGUNIT_SOLUTION2SETTLEMENTDATERUNNODUIDTRADETYPEPERIODIDINITIALMWTOTALCLEAREDRAMPDOWNRATERAMPUPRATELOWER5MINLOWER60SECLOWER6SECRAISE5MINRAISE60SECRAISE6SECLASTCHANGEDLOWERREGRAISEREGAVAILABILITYSEMIDISPATCHCAP
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ADPBA1G010093930000002021/09/01 00:25:040000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ADPBA1L010.01093930000002021/09/01 00:25:040000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ADPPV101001201200000002021/09/01 00:25:040000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001AGLHAL0131.98327207200000002021/09/01 00:25:04001000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001AGLSOM01004804800000002021/09/01 00:25:04001600
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ANGAST101-0.108408400000002021/09/01 00:25:0400490
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001APD01010000000105.89115312021/09/01 00:25:040000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ARWF1013.323.7760012000000002021/09/01 00:25:04003.770
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ASNAES10100006662042021/09/01 00:25:040000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ASNBRL101000000063102021/09/01 00:25:040000
DTRADINGUNIT_SOLUTION22021/09/01 00:30:001ASNENC10100000005347792021/09/01 00:25:040000
...
CEND OF REPORT1003

SETTLEMENTDATE,RUNNO,DUID,TRADETYPE,PERIODID,INITIALMW,TOTALCLEARED,RAMPDOWNRATE,RAMPUPRATE,LOWER5MIN,LOWER60SEC,LOWER6SEC,RAISE5MIN,RAISE60SEC,RAISE6SEC,LASTCHANGED,LOWERREG,RAISEREG,AVAILABILITY,SEMIDISPATCHCAP
"2021/09/01 00:30:00",1,ADPBA1G,0,1,0,0,93,93,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,0,0
"2021/09/01 00:30:00",1,ADPBA1L,0,1,0.01,0,93,93,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,0,0
"2021/09/01 00:30:00",1,ADPPV1,0,1,0,0,120,120,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,0,0
"2021/09/01 00:30:00",1,AGLHAL,0,1,31.98,32,720,720,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,100,0
"2021/09/01 00:30:00",1,AGLSOM,0,1,0,0,480,480,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,160,0
"2021/09/01 00:30:00",1,ANGAST1,0,1,-0.1,0,840,840,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,49,0
"2021/09/01 00:30:00",1,APD01,0,1,0,0,0,0,0,0,0,105.89,115,31,"2021/09/01 00:25:04",0,0,0,0
"2021/09/01 00:30:00",1,ARWF1,0,1,3.32,3.77,600,1200,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,3.77,0
"2021/09/01 00:30:00",1,ASNAES1,0,1,0,0,0,0,6,6,6,2,0,4,"2021/09/01 00:25:04",0,0,0,0
"2021/09/01 00:30:00",1,ASNBRL1,0,1,0,0,0,0,0,0,0,6,3,10,"2021/09/01 00:25:04",0,0,0,0
"2021/09/01 00:30:00",1,ASNENC1,0,1,0,0,0,0,0,0,0,53,47,79,"2021/09/01 00:25:04",0,0,0,0
...
C,SETP.WORLD,DVD_TRADINGLOAD,AEMO,PUBLIC,2021/10/07,03:50:04,0000000350353947,,0000000350353744
I,TRADING,UNIT_SOLUTION,2,SETTLEMENTDATE,RUNNO,DUID,TRADETYPE,PERIODID,INITIALMW,TOTALCLEARED,RAMPDOWNRATE,RAMPUPRATE,LOWER5MIN,LOWER60SEC,LOWER6SEC,RAISE5MIN,RAISE60SEC,RAISE6SEC,LASTCHANGED,LOWERREG,RAISEREG,AVAILABILITY,SEMIDISPATCHCAP
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ADPBA1G,0,1,0,0,93,93,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,0,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ADPBA1L,0,1,0.01,0,93,93,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,0,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ADPPV1,0,1,0,0,120,120,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,0,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,AGLHAL,0,1,31.98,32,720,720,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,100,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,AGLSOM,0,1,0,0,480,480,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,160,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ANGAST1,0,1,-0.1,0,840,840,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,49,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,APD01,0,1,0,0,0,0,0,0,0,105.89,115,31,"2021/09/01 00:25:04",0,0,0,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ARWF1,0,1,3.32,3.77,600,1200,0,0,0,0,0,0,"2021/09/01 00:25:04",0,0,3.77,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ASNAES1,0,1,0,0,0,0,6,6,6,2,0,4,"2021/09/01 00:25:04",0,0,0,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ASNBRL1,0,1,0,0,0,0,0,0,0,6,3,10,"2021/09/01 00:25:04",0,0,0,0
D,TRADING,UNIT_SOLUTION,2,"2021/09/01 00:30:00",1,ASNENC1,0,1,0,0,0,0,0,0,0,53,47,79,"2021/09/01 00:25:04",0,0,0,0
...
C,"END OF REPORT",1003

Availability

Visibility: Private & Public Next-Day

This table is in the public monthly MMSDM archive.

I have collated the list of all those files into one place, in this CSV metadata file. (Columns year, month, url, compressed_size in bytes).

The earliest available data is month 1 of 2015. The most recent available data is month 9 of 2021.

Every month in between has a file. (No gaps.)

Data Size

Each year of data is approximately 84 MB when zipped, 844 MB as unzipped CSV.

Deduplication and PDR Loader Configuration

The primary keys are:

The transaction type is "insert", which means that you will usually not see duplicate data. If you do, you can deduplicate based on the primary keys, without sorting first. Rows from different files with the same primary keys should have the same values.

PDR Loader configuration is:

Report Name Report Subtype Version
TRADING UNIT_SOLUTION 1
TRADING UNIT_SOLUTION 2

This means that the CSV files start with metadata columns:

I,TRADING,UNIT_SOLUTION,1,...
D,TRADING,UNIT_SOLUTION,1,...

or

I,TRADING,UNIT_SOLUTION,2,...
D,TRADING,UNIT_SOLUTION,2,...

Indexes

There is more than one index.

Index 1:

Index 2:

This page as JSON (schema documented here, but may change)

Download a JSON Schema specification for this table.

Official AEMO schema documentation

Other Information

Package: HISTORICAL TABLES