2015-08-09 4 views
1

Это вопрос о реализованном PL транзакций в демо-версии amzn_test пакета blotter R. Транзакции представляют собой последовательность из 7 сделок, которые открывают и закрывают позиции внутри дня. Вызов getTxns('amzn_port', 'amzn') возвращаетсяBlotter внутридневный реализован 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 ненулевой для открытия сделки и ноля для сделки закрытия? С ежедневными транзакциями реализованный P & L будет отличным от нуля в день закрытия транзакции.

Я бегу blotter 0.9.1666 на 64-разрядной Windows.

Благодарим за ваше терпение.

+1

Сейчас эта проблема решена в [пересмотра 1693] (https://r-forge.r-project.org/scm/viewvc.php/pkg/blotter/R/addTxn.R? корень = промокательный & r1 = r2 & тысяча шестьсот восемьдесят-пять = 1693 & pathrev = 1693). –

+0

Отлично, спасибо. – mgsot

ответ

0

Это похоже на ошибку в 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 

 Смежные вопросы

  • Нет связанных вопросов^_^