require(blotter)
## Loading required package: blotter
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Loading required package: FinancialInstrument
## Loading required package: quantmod
## Loading required package: Defaults
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
## Loading required package: PerformanceAnalytics
## 
## Attaching package: 'PerformanceAnalytics'
## 
## The following object is masked from 'package:graphics':
## 
##     legend
require(quantmod)

currency("USD")
## [1] "USD"

# Initialize a portfolio object 'p'
print("Creating portfolio \"p\"...")
## [1] "Creating portfolio \"p\"..."
initPortf("p", symbols = "MMM", currency = "USD")
## [1] "p"


getSymbols("MMM", from = "2007-01-01", to = "2007-01-31", src = "yahoo", index.class = c("POSIXt", 
    "POSIXct"))  # Download price data
##     As of 0.4-0, 'getSymbols' uses env=parent.frame() and
##  auto.assign=TRUE by default.
## 
##  This  behavior  will be  phased out in 0.5-0  when the call  will
##  default to use auto.assign=FALSE. getOption("getSymbols.env") and 
##  getOptions("getSymbols.auto.assign") are now checked for alternate defaults
## 
##  This message is shown once per session and may be disabled by setting 
##  options("getSymbols.warning4.0"=FALSE). See ?getSymbol for more details
## [1] "MMM"
stock("MMM", currency = "USD", multiplier = 1)  # Add the instrument
## [1] "MMM"

addTxn("p", "MMM", "2007-01-05", -50, 77.9, TxnFees = -0.05 * 50)
## [1] "2007-01-05 00:00:00 MMM -50 @ 77.9"
addTxn("p", "MMM", "2007-01-08", 50, 77.6, TxnFees = -0.05 * 50)
## [1] "2007-01-08 00:00:00 MMM 50 @ 77.6"
addTxn("p", "MMM", "2007-01-09", 50, 77.6, TxnFees = -0.05 * 50)
## [1] "2007-01-09 00:00:00 MMM 50 @ 77.6"
addTxn("p", "MMM", "2007-01-10", -50, 77.04, TxnFees = -0.05 * 50)
## [1] "2007-01-10 00:00:00 MMM -50 @ 77.04"



updatePortf(Portfolio = "p", Dates = "2007-01")
## [1] "p"

initAcct(name = "a", portfolios = "p", initEq = 10000, currency = "USD")
## [1] "a"

updateAcct("a", "2007-01")  # Check out the sweet date scoping. Thanks, xts.
## [1] "a"
updateEndEq("a", "2007-01")
## [1] "a"


PortfReturns(Account = "a", Dates = "2007", Portfolios = "p")
##            MMM.DailyEndEq
## 2007-01-03        0.00000
## 2007-01-04        0.00000
## 2007-01-05        0.00215
## 2007-01-08       -0.00115
## 2007-01-09        0.00015
## 2007-01-10       -0.00345
## 2007-01-11        0.00000
## 2007-01-12        0.00000
## 2007-01-16        0.00000
## 2007-01-17        0.00000
## 2007-01-18        0.00000
## 2007-01-19        0.00000
## 2007-01-22        0.00000
## 2007-01-23        0.00000
## 2007-01-24        0.00000
## 2007-01-25        0.00000
## 2007-01-26        0.00000
## 2007-01-29        0.00000
## 2007-01-30        0.00000
## 2007-01-31        0.00000

getTxns(Portfolio = "p", Symbol = "MMM", Date = "2007-01")
##            Txn.Qty Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost
## 2007-01-05     -50     77.90     -2.5     -3895        77.90
## 2007-01-08      50     77.60     -2.5      3880        77.60
## 2007-01-09      50     77.60     -2.5      3880        77.60
## 2007-01-10     -50     77.04     -2.5     -3852        77.04
##            Net.Txn.Realized.PL
## 2007-01-05                -2.5
## 2007-01-08                12.5
## 2007-01-09                -2.5
## 2007-01-10               -30.5
getTxns(Portfolio = "p", Symbol = "MMM", Date = "2007-01-03::2007-01-05")
##            Txn.Qty Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost
## 2007-01-05     -50      77.9     -2.5     -3895         77.9
##            Net.Txn.Realized.PL
## 2007-01-05                -2.5

getPos(Portfolio = "p", Symbol = "MMM", Date = "2007-01")
## Error: character string is not in a standard unambiguous format
getPos(Portfolio = "p", Symbol = "MMM", Date = "2007-01-05")
##            Pos.Qty Pos.Avg.Cost
## 2007-01-05     -50         77.9
getPosQty(Portfolio = "p", Symbol = "MMM", Date = "2007-01")
## Error: character string is not in a standard unambiguous format

dailyStats("p", use = "txns")
## Error: object 'dailyPL' not found
dailyStats("p", use = "trades")
## Error: object 'dailyPL' not found

dailyEqPL("p")
##            MMM.DailyEndEq
## 2007-01-03            0.0
## 2007-01-04            0.0
## 2007-01-05           21.5
## 2007-01-08          -11.5
## 2007-01-09            1.5
## 2007-01-10          -34.5
## 2007-01-11            0.0
## 2007-01-12            0.0
## 2007-01-16            0.0
## 2007-01-17            0.0
## 2007-01-18            0.0
## 2007-01-19            0.0
## 2007-01-22            0.0
## 2007-01-23            0.0
## 2007-01-24            0.0
## 2007-01-25            0.0
## 2007-01-26            0.0
## 2007-01-29            0.0
## 2007-01-30            0.0
## 2007-01-31            0.0
dailyTxnPL("p")
##            MMM.DailyTxnPL
## 2007-01-04           -2.5
## 2007-01-07           12.5
## 2007-01-08           -2.5
## 2007-01-09          -30.5