Это похоже на ошибку в addTxns
, потому что чистый понял P & L выглядит разумным, если вы звоните addTxn
для каждой строки в amzn.trades
.
require(blotter)
# load the example data
data("amzn")
currency("USD")
stock("amzn",currency="USD",multiplier=1)
# Initialize the Portfolio
initPortf("amzn_port",symbols="amzn",initDate="2010-01-14")
initAcct("amzn_acct",portfolios="amzn_port",initDate="2010-01-14", initEq=10000)
# Add the transactions to the portfolio
for (i in 1:nrow(amzn.trades)) {
x <- amzn.trades[i,]
addTxn("amzn_port", "amzn", index(x), coredata(x$TxnQty), coredata(x$TxnPrice))
}
# update the portfolio`
updatePortf("amzn_port",Dates="2010-01-14")
getTxns("amzn_port", "amzn")
Я буду исследовать и отчитываться после того, как обнаружу/исправлю ошибку.
Это теперь зафиксировано в revision 1693. Вот патч:
--- pkg/blotter/R/addTxn.R 2015/04/15 02:33:20 1685
+++ pkg/blotter/R/addTxn.R 2015/08/09 16:29:59 1693
@@ -246,9 +246,11 @@
NewTxns$Pos.Qty <- cumsum(initPosQty + NewTxns$Txn.Qty)
# only pass non-zero initial position qty and average cost
NewTxns$Pos.Avg.Cost <- .calcPosAvgCost_C(initPosQty[1], initPosAvgCost[1], NewTxns$Txn.Value, NewTxns$Pos.Qty, ConMult)
- # need lagged position average cost
+ # need lagged position average cost and quantity
lagPosAvgCost <- c(initPosAvgCost[1], NewTxns$Pos.Avg.Cost[-nrow(NewTxns)])
+ lagPosQty <- c(initPosQty[1], NewTxns$Pos.Qty[-nrow(NewTxns)])
NewTxns$Gross.Txn.Realized.PL <- NewTxns$Txn.Qty * ConMult * (lagPosAvgCost - NewTxns$Txn.Avg.Cost)
+ NewTxns$Gross.Txn.Realized.PL[abs(lagPosQty) < abs(NewTxns$Pos.Qty) | lagPosQty == 0] <- 0
NewTxns$Net.Txn.Realized.PL <- NewTxns$Gross.Txn.Realized.PL - NewTxns$Txn.Fees
NewTxns$Con.Mult <- ConMult
Сейчас эта проблема решена в [пересмотра 1693] (https://r-forge.r-project.org/scm/viewvc.php/pkg/blotter/R/addTxn.R? корень = промокательный & r1 = r2 & тысяча шестьсот восемьдесят-пять = 1693 & pathrev = 1693). –
Отлично, спасибо. – mgsot