# http://hledger.org/journal.html#market-prices # http://hledger.org/hledger.html#market-value # 1. Market prices are ignored by -B. < P 2011/01/01 € $1.35 2011/01/01 expenses:foreign €100 assets $ hledger -f- bal -NB €-100 assets €100 expenses:foreign # 2. Market prices are used by bal -V. # Market prices for other commodities are not used. # Nor are transaction prices. < P 2011/01/01 € $1.35 P 2011/01/01 GBP $1.35 2011/01/01 (expenses:foreign) €100 @ $1.20 $ hledger -f- bal -N -V $135.00 expenses:foreign # 3. The location of price directives does not matter. # If multiple directives have the same date, the last parsed is used. < 3000/01/01 (a) $100 P 2000/1/1 $ €1.35 3000/03/03 (b) $100 P 2000/1/1 $ €1.30 $ hledger -f- bal -N -V a €130.00 a # 4. Market prices in the future are ignored when the valuation date # is today, which is the default with -V. #453, #683 < P 2000/1/1 $ €1.20 P 3000/1/1 $ €1.30 3000/01/01 (a) $100 $ hledger -f- bal -N -V €120.00 a # 5. Market prices in the future are not ignored when they are before # the valuation date set with an explicit report end date, as in # hledger 1.14 and older, and Ledger. See also valuation2.test, #1083 < P 3000/1/1 $ €1.10 3000/01/01 (a) $100 $ hledger -f- bal -N -V -e 3000/2 €110.00 a # 6. Market prices interact with D directives and with amount style canonicalisation. #131 < D 1000.00 H ; declare a default commodity named H P 2015/08/15 EEEE 41.66 ; default commodity H is used for these market prices P 2015/08/15 FFFF 74.62 P 2015/08/15 GGGG 32.39 2015/08/15 a 2.4120 EEEE @@ 100 ; default commodity H is used for these transaction prices a 0.3350 FFFF @@ 25 a 0.7718 GGGG @@ 25 b ; implicit balancing amount is in the cost commodity, H $ hledger -f- balance -V 150.48 H a -150.00 H b -------------------- 0.48 H # 7. register -V affects posting amounts and total. < P 2000/1/1 $ €1.20 2000/1/1 (a) $100 $ hledger -f- reg -V 2000-01-01 (a) €120.00 €120.00 # 8. print -V affects posting amounts but not balance assertions. < P 2000/1/1 $ €1.20 2000/1/1 (a) $100 = $100 $ hledger -f- print -V 2000-01-01 (a) €120.00 = $100 >=0 # --value tests < P 2000/01/01 A 1 B P 2000/01/15 A 5 B P 2000/02/01 A 2 B P 2000/03/01 A 3 B P 2000/04/01 A 4 B 2000/01/01 (a) 1 A @ 6 B 2000/02/01 (a) 1 A @ 7 B 2000/03/01 (a) 1 A @ 8 B # print # 9. print costs using transaction prices $ hledger -f- print --value=cost 2000-01-01 (a) 6 B 2000-02-01 (a) 7 B 2000-03-01 (a) 8 B >=0 # 10. print value using market prices on each transaction's (posting's) date $ hledger -f- print --value=then 2000-01-01 (a) 1 B 2000-02-01 (a) 2 B 2000-03-01 (a) 3 B >=0 # 11. print value using prices on last day of report period (2000-02-29) $ hledger -f- print --value=end date:2000/01-2000/03 2000-01-01 (a) 2 B 2000-02-01 (a) 2 B >=0 # 12. print value using prices on last day of report period (no period specified) # specified - uses last day of journal (2000-03-01) $ hledger -f- print --value=end 2000-01-01 (a) 3 B 2000-02-01 (a) 3 B 2000-03-01 (a) 3 B >=0 # 13. print value using prices on a specified date $ hledger -f- print --value=2000-01-15 2000-01-01 (a) 5 B 2000-02-01 (a) 5 B 2000-03-01 (a) 5 B >=0 # 14. print value using prices today # (assuming today's date is >= 2000-04-01) $ hledger -f- print --value=now 2000-01-01 (a) 4 B 2000-02-01 (a) 4 B 2000-03-01 (a) 4 B >=0 # register # 15. register report valued at cost. $ hledger -f- reg --value=cost 2000-01-01 (a) 6 B 6 B 2000-02-01 (a) 7 B 13 B 2000-03-01 (a) 8 B 21 B # 16. register report valued at posting dates $ hledger -f- reg --value=then 2000-01-01 (a) 1 B 1 B 2000-02-01 (a) 2 B 3 B 2000-03-01 (a) 3 B 6 B # 17. register report valued at period end $ hledger -f- reg --value=end 2000-01-01 (a) 3 B 3 B 2000-02-01 (a) 3 B 6 B 2000-03-01 (a) 3 B 9 B # 18. register report valued at specified date $ hledger -f- reg --value=2000-01-15 2000-01-01 (a) 5 B 5 B 2000-02-01 (a) 5 B 10 B 2000-03-01 (a) 5 B 15 B # 19. register report valued today $ hledger -f- reg --value=now 2000-01-01 (a) 4 B 4 B 2000-02-01 (a) 4 B 8 B 2000-03-01 (a) 4 B 12 B # 20. single-period register report valued at default date (same as --value=now) $ hledger -f- reg -V 2000-01-01 (a) 4 B 4 B 2000-02-01 (a) 4 B 8 B 2000-03-01 (a) 4 B 12 B # register with -H (starting balance) # 21. register with starting balance, valued at cost. $ hledger -f- reg --value=cost -b 200002 -H 2000-02-01 (a) 7 B 13 B 2000-03-01 (a) 8 B 21 B # 22. register with starting balance, valued at period end. # That is unspecified so the last posting date is used, ie 2000/3/1, so the price is 3 B. # Starting balance is 5 B as above. $ hledger -f- reg --value=end -b 200002 -H 2000-02-01 (a) 3 B 8 B 2000-03-01 (a) 3 B 11 B # 23. register with starting balance, valued at specified date (when the price is 5 B). # Starting balance is 5 B as above. $ hledger -f- reg --value=2000-01-15 -b 200002 -H 2000-02-01 (a) 5 B 10 B 2000-03-01 (a) 5 B 15 B # register, periodic # 24. periodic register report valued at cost. # The total for january is 6 B (1 A valued at 1/1, price 1 B, and 1 A # valued at 1/20, price 5 B). # Need an extra transaction for this test: < P 2000/01/01 A 1 B P 2000/01/15 A 5 B P 2000/02/01 A 2 B P 2000/03/01 A 3 B P 2000/04/01 A 4 B 2000/01/01 (a) 1 A @ 6 B 2000/01/20 (a) 1 A @ 7 B 2000/02/01 (a) 1 A @ 8 B 2000/03/01 (a) 1 A @ 9 B $ hledger -f- reg --value=cost -M 2000-01 a 13 B 13 B 2000-02 a 8 B 21 B 2000-03 a 9 B 30 B # back to the original test journal: < P 2000/01/01 A 1 B P 2000/01/15 A 5 B P 2000/02/01 A 2 B P 2000/03/01 A 3 B P 2000/04/01 A 4 B 2000/01/01 (a) 1 A @ 6 B 2000/02/01 (a) 1 A @ 7 B 2000/03/01 (a) 1 A @ 8 B # 25. periodic register report valued at period end $ hledger -f- reg --value=end -M 2000-01 a 5 B 5 B 2000-02 a 2 B 7 B 2000-03 a 3 B 10 B # 26. periodic register report valued at specified date $ hledger -f- reg --value=2000-01-15 -M 2000-01 a 5 B 5 B 2000-02 a 5 B 10 B 2000-03 a 5 B 15 B # 27. periodic register report valued today $ hledger -f- reg --value=now -M 2000-01 a 4 B 4 B 2000-02 a 4 B 8 B 2000-03 a 4 B 12 B # 28. periodic register report valued at default date (same as --value=end) $ hledger -f- reg -V -M 2000-01 a 5 B 5 B 2000-02 a 2 B 7 B 2000-03 a 3 B 10 B # balance # 29. single column balance report valued at cost $ hledger -f- bal -N --value=cost 21 B a # 30. single column balance report valued at period end $ hledger -f- bal -N --value=end 9 B a # 31. single column balance report valued at specified date $ hledger -f- bal -N --value=2000-01-15 15 B a # 32. single column balance report valued today $ hledger -f- bal -N --value=now 12 B a # 33. single column balance report valued at default date (same as --value=now) $ hledger -f- bal -N -V 12 B a # balance, periodic # 34. multicolumn balance report valued at cost $ hledger -f- bal -MTA --value=cost Balance changes in 2000Q1, valued at cost: || Jan Feb Mar Total Average ===++================================= a || 6 B 7 B 8 B 21 B 7 B ---++--------------------------------- || 6 B 7 B 8 B 21 B 7 B # 35. multicolumn balance report valued at period end $ hledger -f- bal -M --value=end Balance changes in 2000Q1, valued at period ends: || Jan Feb Mar ===++=============== a || 5 B 2 B 3 B ---++--------------- || 5 B 2 B 3 B # 36. multicolumn balance report valued at period end with -T or -A $ hledger -f- bal -MTA --value=end Balance changes in 2000Q1, valued at period ends: || Jan Feb Mar Total Average ===++================================= a || 5 B 2 B 3 B 10 B 3 B ---++--------------------------------- || 5 B 2 B 3 B 10 B 3 B # 37. multicolumn balance report valued at other date $ hledger -f- bal -MTA --value=2000-01-15 Balance changes in 2000Q1, valued at 2000-01-15: || Jan Feb Mar Total Average ===++================================= a || 5 B 5 B 5 B 15 B 5 B ---++--------------------------------- || 5 B 5 B 5 B 15 B 5 B # 38. multicolumn balance report valued today (with today >= 2000-04-01) $ hledger -f- bal -M --value=now Balance changes in 2000Q1, current value: || Jan Feb Mar ===++=============== a || 4 B 4 B 4 B ---++--------------- || 4 B 4 B 4 B # 39. multicolumn balance report valued at default date (same as --value=end) $ hledger -f- bal -M -V Balance changes in 2000Q1, valued at period ends: || Jan Feb Mar ===++=============== a || 5 B 2 B 3 B ---++--------------- || 5 B 2 B 3 B # balance, periodic, with -H (starting balance and accumulating across periods) # 40. multicolumn balance report with -H, valued at cost. # The starting balance on 2000/01/01 is 6 B (cost of the first 2 A). # February adds 1 A costing 7 B, making 13 B. # March adds 1 A costing 8 B, making 21 B. $ hledger -f- bal -M -H -b 200002 --value=cost Ending balances (historical) in 2000-02-01..2000-03-31, valued at cost: || 2000-02-29 2000-03-31 ===++======================== a || 13 B 21 B ---++------------------------ || 13 B 21 B # 41. multicolumn balance report with -H valued at period end. # The starting balance is 1 A. # February adds 1 A making 2 A, which is valued at 2000/02/29 as 4 B. # March adds 1 A making 3 A, which is valued at 2000/03/31 as 9 B. $ hledger -f- bal -MA -H -b 200002 --value=end Ending balances (historical) in 2000-02-01..2000-03-31, valued at period ends: || 2000-02-29 2000-03-31 Average ===++================================= a || 4 B 9 B 6 B ---++--------------------------------- || 4 B 9 B 6 B # 42. multicolumn balance report with -H valued at other date. # The starting balance is 5 B (1 A valued at 2000/1/15). $ hledger -f- bal -M -H -b 200002 --value=2000-01-15 Ending balances (historical) in 2000-02-01..2000-03-31, valued at 2000-01-15: || 2000-02-29 2000-03-31 ===++======================== a || 10 B 15 B ---++------------------------ || 10 B 15 B # 43. multicolumn balance report with -H, valuing each period's carried-over balances at cost. < P 2000/01/01 A 1 B P 2000/01/15 A 5 B P 2000/02/01 A 2 B P 2000/03/01 A 3 B P 2000/04/01 A 4 B 2000/01/01 (a) 1 A @ 6 B $ hledger -f- bal -ME -H -p200001-200004 --value=c Ending balances (historical) in 2000Q1, valued at cost: || 2000-01-31 2000-02-29 2000-03-31 ===++==================================== a || 6 B 6 B 6 B ---++------------------------------------ || 6 B 6 B 6 B # 44. multicolumn balance report with -H, valuing each period's carried-over balances at period end. # Unrelated, also -H always disables -T. $ hledger -f- bal -META -H -p200001-200004 --value=e Ending balances (historical) in 2000Q1, valued at period ends: || 2000-01-31 2000-02-29 2000-03-31 Average ===++============================================= a || 5 B 2 B 3 B 3 B ---++--------------------------------------------- || 5 B 2 B 3 B 3 B # 45. multicolumn balance report with -H, valuing each period's carried-over balances at other date. $ hledger -f- bal -ME -H -p200001-200004 --value=2000-01-15 Ending balances (historical) in 2000Q1, valued at 2000-01-15: || 2000-01-31 2000-02-29 2000-03-31 ===++==================================== a || 5 B 5 B 5 B ---++------------------------------------ || 5 B 5 B 5 B # balance --budget. The periodic transactions setting budget amounts # are valued in the same way as ordinary transactions. < P 2000/01/01 A 1 B P 2000/01/15 A 5 B P 2000/02/01 A 2 B P 2000/03/01 A 3 B P 2000/04/01 A 4 B ~ monthly (a) 2 A @ 1 B 2000/01/01 (a) 1 A @ 6 B 2000/02/01 (a) 1 A @ 7 B 2000/03/01 (a) 1 A @ 8 B # 46. budget report, unvalued (for reference). $ hledger -f- bal -M --budget Budget performance in 2000Q1: || Jan Feb Mar ===++====================================================== a || 1 A [50% of 2 A] 1 A [50% of 2 A] 1 A [50% of 2 A] ---++------------------------------------------------------ || 1 A [50% of 2 A] 1 A [50% of 2 A] 1 A [50% of 2 A] # 47. budget report, valued at cost. $ hledger -f- bal -MTA --budget --value=c Budget performance in 2000Q1, valued at cost: || Jan Feb Mar Total Average ===++================================================================================================ a || 6 B [300% of 2 B] 7 B [350% of 2 B] 8 B [400% of 2 B] 21 B [350% of 6 B] 7 B [350% of 2 B] ---++------------------------------------------------------------------------------------------------ || 6 B [300% of 2 B] 7 B [350% of 2 B] 8 B [400% of 2 B] 21 B [350% of 6 B] 7 B [350% of 2 B] # 48. budget report, valued at period ends. $ hledger -f- bal -MTA --budget --value=e Budget performance in 2000Q1, valued at period ends: || Jan Feb Mar Total Average ===++============================================================================================= a || 5 B [50% of 10 B] 2 B [50% of 4 B] 3 B [50% of 6 B] 10 B [50% of 20 B] 3 B [50% of 7 B] ---++--------------------------------------------------------------------------------------------- || 5 B [50% of 10 B] 2 B [50% of 4 B] 3 B [50% of 6 B] 10 B [50% of 20 B] 3 B [50% of 7 B] # 49. budget report, valued at other date. $ hledger -f- bal -MTA --budget --value=2000-01-15 Budget performance in 2000Q1, valued at 2000-01-15: || Jan Feb Mar Total Average ===++================================================================================================ a || 5 B [50% of 10 B] 5 B [50% of 10 B] 5 B [50% of 10 B] 15 B [50% of 30 B] 5 B [50% of 10 B] ---++------------------------------------------------------------------------------------------------ || 5 B [50% of 10 B] 5 B [50% of 10 B] 5 B [50% of 10 B] 15 B [50% of 30 B] 5 B [50% of 10 B] # 50. --value=then with --historical. How is the starting total valued ? # Currently not supported. < P 2020-01-01 A 1 B P 2020-02-01 A 2 B P 2020-03-01 A 3 B P 2020-04-01 A 4 B 2020-01-01 (a) 1 A 2020-02-01 (a) 1 A 2020-03-01 (a) 1 A 2020-04-01 (a) 1 A $ hledger -f- reg --value=then -b 2020-03 -H >2 /not yet supported/ >=1 # 51. --value=then with a report interval. How are the summary amounts valued ? # Currently each interval's unvalued sum is valued on its first day. < P 2020-01-01 A 1 B P 2020-02-01 A 2 B P 2020-03-01 A 3 B P 2020-04-01 A 4 B 2020-01-01 (a) 1 A 2020-02-01 (a) 1 A 2020-03-01 (a) 1 A 2020-04-01 (a) 1 A $ hledger -f- reg --value=then -Q 2020Q1 a 3 B 3 B 2020Q2 a 4 B 7 B >=0 # 52. print --value should affect all postings, including when there's an implicit transaction price < P 2020-01-01 A 1 C P 2020-01-01 B 1 C 2020-01-01 a 1 A b -1 B $ hledger -f- print -V 2020-01-01 a 1 C b -1 C >=0