[R-SIG-Finance] Bug in tradeStats function?
Brian G. Peterson
brian at braverock.com
Mon Nov 24 04:47:33 CET 2014
Yes, it looks like a bug.
One thing I've considered to simplify the code base would be to have
'tradeStats' use the 'trades' generated by 'perTradeStats' as inputs to
the calcs.
I'll take a closer look tomorrow. Any further assistance will of course
be appreciated, feel free to continue the analisis off-list (and we can
ping the list once it is resolved).
Regards,
Brian
On 11/23/2014 05:14 PM, Nick White wrote:
> 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]]
>
> _______________________________________________
> R-SIG-Finance at r-project.org 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.
>
--
Brian G. Peterson
http://braverock.com/brian/
Ph: 773-459-4973
IM: bgpbraverock
More information about the R-SIG-Finance
mailing list