I've searched this list and it appears some people use Org Mode for outline hierarchy, I don't see much mention of using the other Org capabilities with beancount.
I've just set up some Org Babel and tables to simplify the process of entering and updating currency positions.
First, a babel bash shell block that converts from one currency to another. The default here is 1 USD to USD, but you can change the "curfrom" and "curto" and "amt" if you want.
#+NAME: cconv
#+BEGIN_SRC sh :results output :eval no-export :var amt="1", curfrom="USD", curto="USD"
echo $val
#+END_SRC
#+RESULTS: cconv
: 1
Then, an inline babel call to test that the function works when passed other arguments
#+CALL: cconv(amt="1", curfrom="USD", curto="CHF")
#+RESULTS:
: 0.9622
Then, an Org Table of all of my currencies I would like to track:
#+NAME: currency_table
| Input | Output | Value |
|-------+--------+--------|
| USD | DKK | 6.5135 |
| USD | CHF | 0.9622 |
| DKK | CAD | 0.1992 |
#+TBLFM: $3='(org-sbe cconv (amt 1) (curfrom '$1) (curto '$2))
Pressing "C-c C-c" on the #+TBLFM line should update the 3rd column with the current conversion rate of each currency.
Finally, another Babel bash shell block that takes the current conversion rate and prints the appropriate beancount lines.
Note that because we are using NAMED blocks, all of this code can be located anywhere in your document, and the #+RESULTS: prices line located in a separate location, and it will still be updated. Also, "prepend" can be removed if you want to sort by date decreasing.
#+NAME: prices
#+BEGIN_SRC sh :results output raw prepend :eval no-export :var c=currency_table
cc=( $c )
len=$(echo ${#cc[@]})
for (( i=0; i<$len; i+=3 )); do
line=$(echo $c | cut -d" " -f1-3) # first three
c=$(echo $c | cut -d" " -f4-) # rest of line
curin=$(echo $line | cut -d" " -f1) # break out first three
curout=$(echo $line | cut -d" " -f2)
val=$(echo $line | cut -d" " -f3)
echo $(date "+%Y-%m-%d") price $curin \\t\\t\\t $val $curout
done
#+END_SRC
#+RESULTS: prices
2017-07-07 price USD 6.5135 DKK
2017-07-07 price USD 0.9622 CHF
2017-07-07 price DKK 0.1992 CAD
Currently this requires evaluating (C-c C-c) the TBLFM and then evaluating the #+NAME:prices code block. I think there is a way to force the code block to update the table when it is evaluated, saving a bit of time, but I am not yet sure how to do that.
I hope this is helpful to someone else,
-k.