<html aria-label="message body"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">Niranjan,<div><br></div><div>The transaction carries the date, description, and the CURRENCY that the transaction will be balanced in. In theory that doesn’t have to be either the currency in which the stock is priced nor the currency of the account from which you transfer the payment, but the more currencies that are involved the harder it is for GnuCash’s balancing code to get it right, so everything works best if there’s only one currency.</div><div><br></div><div>Before you create the transaction you must already have created the stock’s commodity and an account of type STOCK or MUTUAL FUND denominated in that commodity. That account should be parented with an account of either type ASSET or type BANK denominated in the currency in which the stock trades. In GnuCash debits are positive numbers and credits are negative numbers. You’ll create a split in that account with the number of shares as the amount and the value as the extended value (i.e. amount * price) in the transaction currency. You’ll create a second split in the cash account with the amount set to the negative equivalent in the cash account’s currency and value as the negative extended value in the transaction currency.</div><div><br></div><div>So the simplest example is all currencies are, say, INR. </div><div>Transaction.Date = 2026-05-31, Transaction.Description = “Buy XYZ 100 @ 25.00 INR/share”, Transaction.Currency = INR</div><div>Split1.Account = /Assets/Investment/Broker/Stocks/XYZ, Split1.Amount = 100, Split1.Value = 2500.00</div><div>Split2.Account = /Assets/nvestment/Broker/Cash, Split2.Amount = -2500.00, Split2.Value = -2500.00.</div><div><br></div><div>A more complicated example where the stock and cash account are still in INR but the transaction currency is USD. Today’s exchange rate is .010 USD = 1 INR so it will look like</div><div><br></div><div><div><div>Transaction.Date = 2026-05-31, Transaction.Description = “Buy XYZ 100 @ 25.00 INR/share”, Transaction.Currency = USD</div><div>Split1.Account = /Assets/Investment/Broker/Stocks/XYZ, Split1.Amount = 100, Split1.Value = 25.00</div><div>Split2.Account = /Assets/nvestment/Broker/Cash, Split2.Amount = -2500.00, Split2.Value = -25.00.</div><div><br></div><div>Regards,</div><div>John Ralls</div><div><br></div><blockquote type="cite"><div>On May 24, 2026, at 12:23, Niranjan Rao <nhrdls@gmail.com> wrote:</div><br class="Apple-interchange-newline"><div>

  

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  
  <div><p>Greetings,</p><p>I am trying to add a shares purchase transaction. I've account
      for given stock/commodity and a cash account from which money will
      be transferred</p><p>As I understand one part of the split should come from cash which
      will be currency or dollar value. Other split will be number of
      shares purchased for that money. </p><p>I am trying to use API (through my Java library) to create a
      transaction and not able to get it right. I am especially getting
      confused about the value and amount parts. I am not sure which
      field will represent the quantity or number of shares purchased.</p><p>Here is the general flow I am calling from Java </p><p><br>
    </p><p>Create transaction - <span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccMallocTransaction</span></span></span></p><p>Set currency as my commodity of stock - <span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccTransSetCurrency</span></span></span></p><p>Create split <span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccTransSetCurrency</span></span></span></p><p><br>
    </p><p>Set appropriate account and parent <span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccSplitSetAccount, </span></span></span><span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccSplitSetParent</span></span></span></p><p><br>
    </p><p>I now have three data fields available - total amount in dollar 
      (moneySpent), number of shares purchased (quantity) and price 
      (price) at which they were purchased. I tried various combinations
      of <span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccSplitSetAmount, </span></span></span><span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccSplitSetValue, </span></span></span><span style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span style="background-color: rgb(255, 255, 255); font-family: Monospace; font-size: 10pt; white-space: pre;"><span style=""></span><span style="background-color: rgb(212, 212, 212); font-style: italic;">xaccSplitSetSharePriceAndAmount</span></span></span></p><p><br>
    </p><p>But not matter what I do, I always get imbalance record or price
      gets calculated wrong. In general split entry is wrong. Mirroring
      split from cash account looks correct. At least that account shows
      the entry the way it should be.</p><p>Can you please help me with the right method calls and parameters
      I need to pass get the transaction right. I've intentionally used
      slightly different variable names in the email so as to avoid the
      confusion with the actual parameter names used in header files.</p><p><br>
    </p><p>Regards,</p><p>Niranjan</p><p><br>
    </p>
  </div>

_______________________________________________<br>gnucash-devel mailing list<br>gnucash-devel@gnucash.org<br>https://lists.gnucash.org/mailman/listinfo/gnucash-devel<br></div></blockquote></div><br></div></body></html>