jal
jal copied to clipboard
Учет дополнительных комиссий бирж (e.g. LSE)
Пример (укороченная версия)
<Trade accountId="ID" acctAlias="" exchange="LSE" quantity="10000" tradePrice="0.1296" tradeMoney="1296" proceeds="-1296" taxes="-6.48" ibCommission="-1.17" ibCommissionCurrency="GBP" />
См поле taxes, это идет как комиссия LSE за покупку активов (0.5%). Скорее всего это нужно учитывать как комиссию, в том числе в налогах.
На данный момент учитывается только поле ibCommission
Спасибо, вроде всё хорошо в коде, сделаю merge.
Меня только в этом всём всегда смущало поле ibCommissionCurrency. Я пока не делал поддержку отдельных валют.
А вот с taxes - оно всегда в валюте сделки идёт? Не было других вариантов?
И второй вопрос сразу назрел.
Я тут проверил пример другого счёта с покупкой бумаги в фунтах - там эти 0.5% идут как отдельная кэшевая транзакция с описанием UK Stamp Tax. У вас после такого трейда нет списания тех же самых taxes="-6.48" в секции CashTransactions? А то как бы задвоения учёта не получилось...
Спасибо, вроде всё хорошо в коде, сделаю merge. Меня только в этом всём всегда смущало поле
ibCommissionCurrency. Я пока не делал поддержку отдельных валют. А вот сtaxes- оно всегда в валюте сделки идёт? Не было других вариантов?
Валюта сделки и валюта комиссии могут отличаться, например при обмене валют RUB -> USD будет валюта сделки USD, а комиссия может быть в RUB.
<Trade accountId="ID" acctAlias="" model="" currency="USD" fxRateToBase="62.26" assetCategory="CASH" symbol="GBP.USD" description="GBP.USD" conid="12087797" securityID="" securityIDType="" cusip="" isin="" listingExchange="" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" tradeID="2639766768" putCall="" reportDate="20191220" principalAdjustFactor="" dateTime="20191220;063037" tradeDate="20191220" settleDateTarget="20191224" transactionType="ExchTrade" exchange="IDEALFX" quantity="2468" tradePrice="1.30298" tradeMoney="3215.75464" proceeds="-3215.75464" taxes="0" ibCommission="-124.52" ibCommissionCurrency="RUB" netCash="0" closePrice="0" openCloseIndicator="" notes="" cost="0" fifoPnlRealized="0" fxPnl="0" mtmPnl="-423.347886" origTradePrice="0" origTradeDate="" origTradeID="" origOrderID="0" clearingFirmID="" transactionID="11759388420" buySell="BUY" ibOrderID="1292164609" ibExecID="00013493.5df6c0d0.01.01" brokerageOrderID="004d97f6.0001a850.5dfc5e55.0001" orderReference="" volatilityOrderLink="" exchOrderId="N/A" extExecID="NYC03201DWJJ5R4B" orderTime="20191220;044508" openDateTime="" holdingPeriodDateTime="" whenRealized="" whenReopened="" levelOfDetail="EXECUTION" changeInPrice="0" changeInQuantity="0" orderType="LMT" traderID="" isAPIOrder="N" accruedInt="0" serialNumber="" deliveryType="" commodityType="" fineness="0.0" weight="0.0 ()" />
Насчет taxes не могу сказать, тк у меня везде совпадает с валютой сделки, уточнение снизу.
И второй вопрос сразу назрел. Я тут проверил пример другого счёта с покупкой бумаги в фунтах - там эти 0.5% идут как отдельная кэшевая транзакция с описанием
UK Stamp Tax. У вас после такого трейда нет списания тех же самыхtaxes="-6.48"в секцииCashTransactions? А то как бы задвоения учёта не получилось...
Есть секции TransactionTax, там как раз указывается точная валюта, пока не видел отличий в валюте.
<TransactionTaxes>
<TransactionTax accountId="ID" acctAlias="" model="" currency="GBP" fxRateToBase="80.952" assetCategory="STK" symbol="POG" description="PETROPAVLOVSK PLC" conid="37099428" securityID="GB0031544546" securityIDType="ISIN" cusip="" isin="GB0031544546" listingExchange="LSE" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" putCall="" principalAdjustFactor="" date="20191220;081205" taxDescription="UK Stamp Tax" quantity="10000" reportDate="20191220" taxAmount="-6.48" tradeId="2639777352" tradePrice="0.1296" source="TRADE" code="" levelOfDetail="SUMMARY" serialNumber="" deliveryType="" commodityType="" fineness="0.0" weight="0.0 ()" />
<TransactionTax accountId="ID" acctAlias="" model="" currency="GBP" fxRateToBase="80.952" assetCategory="STK" symbol="POG" description="PETROPAVLOVSK PLC" conid="37099428" securityID="GB0031544546" securityIDType="ISIN" cusip="" isin="GB0031544546" listingExchange="LSE" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" putCall="" principalAdjustFactor="" date="20191220;082246" taxDescription="UK Stamp Tax" quantity="8930" reportDate="20191220" taxAmount="-5.78664" tradeId="2639778690" tradePrice="0.1296" source="TRADE" code="" levelOfDetail="SUMMARY" serialNumber="" deliveryType="" commodityType="" fineness="0.0" weight="0.0 ()" />
</TransactionTaxes>
И сделки к ним:
<Trades>
<Trade accountId="ID" acctAlias="" model="" currency="GBP" fxRateToBase="80.952" assetCategory="STK" symbol="POG" description="PETROPAVLOVSK PLC" conid="37099428" securityID="GB0031544546" securityIDType="ISIN" cusip="" isin="GB0031544546" listingExchange="LSE" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" tradeID="2639777352" putCall="" reportDate="20191220" principalAdjustFactor="" dateTime="20191220;081205" tradeDate="20191220" settleDateTarget="20191224" transactionType="ExchTrade" exchange="LSE" quantity="10000" tradePrice="0.1296" tradeMoney="1296" proceeds="-1296" taxes="-6.48" ibCommission="-1.17" ibCommissionCurrency="GBP" netCash="-1303.65" closePrice="0.1256" openCloseIndicator="O" notes="P" cost="1303.65" fifoPnlRealized="0" fxPnl="0" mtmPnl="-40" origTradePrice="0" origTradeDate="" origTradeID="" origOrderID="0" clearingFirmID="" transactionID="11759430440" buySell="BUY" ibOrderID="1292171566" ibExecID="0001609a.5dfc7515.01.01" brokerageOrderID="004d97f6.0001a850.5dfc5e66.0001" orderReference="" volatilityOrderLink="" exchOrderId="N/A" extExecID="2251280873450203/B" orderTime="20191220;064221" openDateTime="" holdingPeriodDateTime="" whenRealized="" whenReopened="" levelOfDetail="EXECUTION" changeInPrice="0" changeInQuantity="0" orderType="LMT" traderID="" isAPIOrder="N" accruedInt="0" serialNumber="" deliveryType="" commodityType="" fineness="0.0" weight="0.0 ()" />
<Trade accountId="ID" acctAlias="" model="" currency="GBP" fxRateToBase="80.952" assetCategory="STK" symbol="POG" description="PETROPAVLOVSK PLC" conid="37099428" securityID="GB0031544546" securityIDType="ISIN" cusip="" isin="GB0031544546" listingExchange="LSE" underlyingConid="" underlyingSymbol="" underlyingSecurityID="" underlyingListingExchange="" issuer="" multiplier="1" strike="" expiry="" tradeID="2639778690" putCall="" reportDate="20191220" principalAdjustFactor="" dateTime="20191220;082246" tradeDate="20191220" settleDateTarget="20191224" transactionType="ExchTrade" exchange="LSE" quantity="8930" tradePrice="0.1296" tradeMoney="1157.328" proceeds="-1157.328" taxes="-5.78664" ibCommission="-0.28706376" ibCommissionCurrency="GBP" netCash="-1163.40170376" closePrice="0.1256" openCloseIndicator="O" notes="P" cost="1163.40170376" fifoPnlRealized="0" fxPnl="0" mtmPnl="-35.72" origTradePrice="0" origTradeDate="" origTradeID="" origOrderID="0" clearingFirmID="" transactionID="11759493161" buySell="BUY" ibOrderID="1292171566" ibExecID="0001609a.5dfc753b.01.01" brokerageOrderID="004d97f6.0001a850.5dfc5e66.0001" orderReference="" volatilityOrderLink="" exchOrderId="N/A" extExecID="2251280873450948/B" orderTime="20191220;064221" openDateTime="" holdingPeriodDateTime="" whenRealized="" whenReopened="" levelOfDetail="EXECUTION" changeInPrice="0" changeInQuantity="0" orderType="LMT" traderID="" isAPIOrder="N" accruedInt="0" serialNumber="" deliveryType="" commodityType="" fineness="0.0" weight="0.0 ()" />
</Trades>
Проверил, задвоение происходит в программе, при экспорте не нашел где это указывается.
Проверил, задвоение происходит в программе, при экспорте не нашел где это указывается.
jal имортирует секцию TransactionTax отсюда и задвоение. Т.е. у вашем варианте получается, что вы плюсуете поле taxes к комиссии в операции покупки/продажи и этот же налог импортируется отдельной операцией из TransactionTax.
По хорошему конечно этот налог надо бы привязать к покупке-продаже бумаг и учесть как расход на сделку. Но есть ещё, например, комиссии за ADR - я не помню идут ли они в TransactionTax или в CashTransactions, но они точно не привязаны к Trade. Я это к тому, что по хорошему, нужно сделать общий механизм такой привязки.
Поэтому наверное пока остаётся импорт из TransactionTax, а потом посмотрю как это сделать более универсальным способом.
Я заметил, что вы PR подправили. Может был и просто автоматический merge с моими изменениями, но может у нас возникло какое-то недопонимание. Т.к. в итоге вы подтвердили, что происходит задвоение, то я думаю пока оставить код как есть, не включая ваш PR. В будущем я попробую сделать привязку комиссий и прочего к бумаге, но тут надо подумать как это лучше реализовать.
Т.е. в итоге я закрываю эту Issue и отклоняю PR, не возражаете?
Да, там просто обновил ветку, чтобы сгенерировать отчет для налоговой. Привязку сделать сложнее гораздо, посмотрел код.
PR да, issue мб оставить для конечного фикса? Тут как удобнее.
Да, пусть наверное issue будет, чтобы эта идея как-то была озвучена. Может летом после ОоДДС сделаю.
Те, что с явным указанием номера сделки (как в этом примере для stamp tax для LSE) включил в комиссии за сделки, будет в 2024.2.2. Те, что без указания на сделки (как за ADR) возможно потом добавлю, но там надо подумать будет как лучше сделать.