2015-08-09 83 views
1

這是一個關於blotter R包的amzn_test演示中已實現的交易PL的問題。這些交易是7日內交易的一系列交易。到getTxns('amzn_port', 'amzn')回報盤內即時兌現PL

    Txn.Qty Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost Net.Txn.Realized.PL 
2010-01-14 00:00:00  0  0.00  0   0   0.00     0 
2010-01-14 10:18:50 -400 127.49  0 -50996  127.49    50996 
2010-01-14 10:18:53  400 127.49  0  50996  127.49     0 
... 

呼叫爲什麼對於平倉交易Net.Txn.Realized.PL非零開盤交易和零?通過日常交易,實現的交易在交易結束當天將不爲零。

我在64位Windows上運行blotter 0.9.1666。

感謝您的耐心等待。

+1

這是現在固定在[修訂1693](https://r-forge.r-project.org/scm/viewvc.php/pkg/blotter/R/addTxn.R?根=吸墨紙&R1 = 1685&R2 = 1693&pathrev = 1693)。 –

+0

非常好,謝謝。 – mgsot

回答

0

這看起來像在addTxns的錯誤,因爲淨已實現P &大號看起來合理的,如果你打電話addTxnamzn.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