Hi all, Not sure if I've found a bug here, but I've had some issues with tradeStats in getting a correct number of trades (as opposed to number of transactions).
For reproducibility, I'm using the "AMZN" demo from Rev 1317 -- latest code here: https://r-forge.r-project.org/scm/viewvc.php/pkg/blotter/demo/amzn_test.R?view=markup&revision=1317&root=blotter ) So I set `Sys.setenv(TZ="UTC")` and then run the demo script. I then call: > getTxns("amzn_port","amzn") 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 15:18:50 -400 127.49 0 -50996 127.49 50996 2010-01-14 15:18:53 400 127.49 0 50996 127.49 0 2010-01-14 15:21:50 -300 127.26 0 -38178 127.26 38178 2010-01-14 15:21:53 300 127.26 0 38178 127.26 0 2010-01-14 15:23:07 100 127.17 0 12717 127.17 -12717 2010-01-14 15:23:10 -100 127.19 0 -12719 127.19 2 2010-01-14 15:37:56 -400 127.12 0 -50848 127.12 50848 2010-01-14 15:37:59 400 127.12 0 50848 127.12 0 2010-01-14 15:38:32 -500 127.23 0 -63615 127.23 63615 2010-01-14 15:38:35 500 127.23 0 63615 127.23 0 2010-01-14 15:38:37 300 127.27 0 38181 127.27 -38181 2010-01-14 15:38:40 -300 127.30 0 -38190 127.30 9 2010-01-14 15:46:08 -1300 126.95 0 -165035 126.95 165035 2010-01-14 15:46:11 1300 126.95 0 165035 126.95 0 and we see 14 transactions comprising 7 flat-to-flat trades (though, of course, there is the portfolio initiation at midnight on the 14th, which brings it up to 15 entries) However, when I call > t(tradeStats("amzn_port")) amzn Portfolio "amzn_port" Symbol "amzn" Num.Txns "14" Num.Trades "9" Net.Trading.PL "11" Avg.Trade.PL "35309.44" Med.Trade.PL "38178" Largest.Winner "165035" Largest.Loser "-38181" Gross.Profits "368683" Gross.Losses "-50898" Std.Dev.Trade.PL "59503.98" Percent.Positive "77.77778" Percent.Negative "22.22222" Profit.Factor "7.243566" Avg.Win.Trade "52669" Med.Win.Trade "50848" Avg.Losing.Trade "-25449" Med.Losing.Trade "-25449" Avg.Daily.PL "317785" Med.Daily.PL "317785" Std.Dev.Daily.PL NA Ann.Sharpe NA Max.Drawdown "-109.0012" Profit.To.Max.Draw "0.1009164" Avg.WinLoss.Ratio "2.06959" Med.WinLoss.Ratio "1.998035" Max.Equity "102.0036" Min.Equity "-37.00018" End.Equity "11" Where we get the correct number of trades (14) , but the incorrect number of trades (9). This also stands contrary to `perTradeStats` which gets it 'right' with 7 line items (apols for formatting) > perTradeStats("amzn_port") Start End Init.Pos Max.Pos Num.Txns Max.Notional.Cost Net.Trading.PL MAE MFE Pct.Net.Trading.PL Pct.MAE Pct.MFE tick.Net.Trading.PL tick.MAE tick.MFE 1 2010-01-14 15:18:50 2010-01-14 15:18:53 -400 -400 2 -50996 0 0.00000 72.00098 0.0000000000 0.0000000000 0.0014118946 0 0.000000 18.000244 2 2010-01-14 15:21:50 2010-01-14 15:21:53 -300 -300 2 -38178 0 -33.00082 0.00000 0.0000000000 -0.0008643937 0.0000000000 0 -11.000275 0.000000 3 2010-01-14 15:23:07 2010-01-14 15:23:10 100 100 2 12717 2 0.00000 12.94995 0.0001572698 0.0000000000 0.0010183181 2 0.000000 12.949951 4 2010-01-14 15:37:56 2010-01-14 15:37:59 -400 -400 2 -50848 0 -32.04150 0.00000 0.0000000000 -0.0006301429 0.0000000000 0 -8.010376 0.000000 5 2010-01-14 15:38:32 2010-01-14 15:38:35 -500 -500 2 -63615 0 0.00000 45.00031 0.0000000000 0.0000000000 0.0007073851 0 0.000000 9.000061 6 2010-01-14 15:38:37 2010-01-14 15:38:40 300 300 2 38181 9 -39.00018 9.00000 0.0002357193 -0.0010214553 0.0002357193 3 -13.000061 3.000000 7 2010-01-14 15:46:08 2010-01-14 15:46:11 -1300 -1300 2 -165035 0 0.00000 91.00357 0.0000000000 0.0000000000 0.0005514198 0 0.000000 7.000275 In my own data set of some fills from Friday I get the following (XYZ is the dummy ticker) > t(perTradeStats(b.strategy,"XYZ")) [,1] Start "2014-11-21 14:30:01" End "2014-11-21 20:42:26" Init.Pos "200" Max.Pos "50263" Num.Txns "95" ***SNIP*** So `perTradeStats` has rightly calculated the position as being flat to flat with 95 transactions comprising one single trade starting at 14:30 and ending at 20:42 UTC....BUT tradeStats makes the error again Portfolio "list_demo" Symbol "XYZ" Num.Txns "95" Num.Trades "94" This is not the first time I've bumped up against this. In other examples for my own trades, I've found that tradeStats is sensitive to how you've indexed the data (for example, it doesn't seem to like it if you have some things as "Date" and others as "POSIXct". But in the above case, ensuring all indexes are classed the same way still produces the transactions / trades error. I think there might perhaps be something assumed in the `tradeDef` function that may need to be made more explicit depending on system options for time zone or index class...but thought I'd get some initial thoughts from the community before proceeding further to reconcile. Any ideas? n. > sessionInfo() R version 3.1.1 (2014-07-10) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] blotter_0.9.1637 PerformanceAnalytics_1.4.3541 FinancialInstrument_1.1 quantmod_0.4-2 TTR_0.22-0.1 xts_0.9-7 zoo_1.7-12 loaded via a namespace (and not attached): [1] grid_3.1.1 lattice_0.20-29 quantstrat_0.9.1632 tools_3.1.1 [[alternative HTML version deleted]] _______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. If you want to post, subscribe first. -- Also note that this is not the r-help list where general R questions should go.
