How price syntax works in Ledger and hledger


In Ledger and hledger

  • In the journal, a P DATE COMMODITY AMOUNT directive some commodity’s market price in some other commodity on DATE. (A timestamp may be added, but is ignored.)

  • In a posting, AMT @ UNITPRICE declares the per-unit price that was used to convert AMT into the price’s commodity. Eg: 2A @ 3B records that 2A was posted, in exchange for 6B.

  • @@ TOTALPRICE is another form of @, sometimes more convenient. Eg: 2A @@ 5.99B records that 2A was posted in exchange for 5.99B.

In Ledger

  • Any use of @ also generates an implicit P directive. Eg:

      a  2A @ 3B

    in the journal is equivalent to writing

      a  2A @ 3B
    P 2019/1/1 A 1.5B

These need testing:

  • {UNITPRICE} and {{TOTALPRICE}} are synonyms for @ and @@

  • {`` UNITPRICE} is like @ but it also causes capital gains transactions to be generated

  • a @/@@ and a { }/{{ }}/{ `` }/ may be combined; the first is used

In hledger

  • { }, {{ }}, and {= } are ignored, and if combined with @/@@, must be written last