Commit Graph

2083 Commits

Author SHA1 Message Date
Eddie Hebert 352c8a6a8a MAINT: Change variable name in test transforms comprehension.
Using `n` conflicts with using `n` in an interactive debugger, like
pdb. Use `name` instead.
2014-03-27 22:38:57 -04:00
Eddie Hebert 95b379d567 BUG: Fix misalignment of downside series calc when using exact dates.
An oddity that was exposed while working on making the return series
passed to the risk module more exact, the series comparison between
the returns and mean returns was unbalanced, because the mean returns
were not masked down to the downside data points; however, in most,
if not all cases this was papered over by the call to `.valid()`
2014-03-27 20:51:48 -04:00
Jeremiah Lowin 25659f9672 MAINT: Use current_data instead of last_sale_price
It seems more clear to get price values from
`self.trading_client.current_data[sid].price` than
from `self.portfolio.positions[sid].last_sale_price`.

The two values are the same, so this is just a readability change,
but it is also the same behavior as in `self.order_value()` and it's
good to have them all be the same.
2014-03-27 15:25:14 -04:00
Eddie Hebert 64b2a7377c TST: Disable talib default params test.
The data zipline_transform.window is always evaluating to empty,
thus the actual checks are not being used because of the
`if not data` done before running the `asserts`.

This behavior should be fixed, and we should either remove the
`not data` check, or bubble up that the check is being hit too
many times; but in the meantime, disabling this test which takes
a non-trivial amount of time to run.

When run as an algorithm, outside of unit tests the talib wrapper
does work, so the cause of the window always being empty may be to
due to the machinery of the unit test.
2014-03-26 15:47:09 -04:00
twiecki 4bdecd6402 STY: PEP8 fixes. 2014-03-26 20:46:20 +09:00
Suminda Dharmasena 56c5c7e45a Add symbol to __all__
Currently symbol is not in __all__. So added it.
2014-03-26 17:52:35 +09:00
Eddie Hebert 51750a3a35 MAINT: Factor out downside risk calculation.
Move the downside risk calculation into the main risk module;
so that the same calculation can eventually be used by both
the period and cumulative calculations, to prevent implementation
drift.
2014-03-25 13:23:08 -04:00
Jeremiah Lowin d00edbcf04 BUG: check that self.logger exists
`self.logger` is initialized as `None` and there is no guarantee that
users have set it, so check that it exists before trying to pass
messages to it.
2014-03-24 22:06:03 -04:00
Eddie Hebert 51c8a310be MAINT: Remove unused members of TradingEnvironment.
The following members are no longer referenced elsewhere:
- `full_trading_day`
- `early_close_trading_day`
2014-03-24 21:56:17 -04:00
Richard Frank a6184b87e3 MAINT: Set initial values so to_dict can be called immediately
Previously, it would raise an exception.
2014-03-24 15:44:46 -04:00
Richard Frank bb50d996ed MAINT: Using dictionary literal syntax and combining lines
for readability
2014-03-24 15:44:46 -04:00
twiecki 3eb810ad97 ENH: Add simulated random trade source.
This adds a new data source that emits events
with certain user-specified frequency (minute
or daily).

This allows users to backtest and debug an
algorithm in minute mode to provide a cleaner
path towards Quantopian.
2014-03-22 21:22:22 -04:00
Eddie Hebert 803b58c8aa MAINT: More precise extraction of returns from returns container.
Use slice to date, `[:dt]` instead of `pd.Series.valid` to extract
from returns containers.

Using `valid` lead to some confusion when debugging tests, because
it papers over missing data.

The use of `.valid` was based on the assumption that all values
from the zeroth date to the current algo date are populated,
with no trailing values.
`[:dt]` extracts the same data, but in a hopefully more precise
and explicit fashion.
2014-03-21 17:22:10 -04:00
Eddie Hebert 7ce971fa17 MAINT: Use more clearly named cumulative risk returns containers.
Change `_period_returns` to `_cumulative_returns`, so that there
is less mental overhead/confusion when reading through the risk
module.
2014-03-20 16:00:34 -04:00
Richard Frank 54ad18e2ff MAINT: Simplified event stream creation for tests 2014-03-11 19:08:22 -04:00
Richard Frank 7a3f73cf1d BUG: Update perf period state when positions are changed by splits
Otherwise, self._position_amounts will be out of sync with position.amount, etc.
That value is used to calculate pnl and returns, so test for them.
2014-03-11 19:08:22 -04:00
Eddie Hebert 4860a966b3 REL: Update copyright year on all files changed since the new year. 2014-03-07 22:31:41 -05:00
Eddie Hebert a203f69635 PERF: Remove alias_dt transform in favor of property on SIDData.
Adding a copy of the Event's dt field as datetime via the
`alias_dt` generator, so that the API was forgiving and allowed
both datetime and dt on a SIDData object, was creating noticeable
overhead, even on an noop algorithms.

Instead of incurring the cost of copying the datetime value and
assigning it to the Event object on every event that is passed
through the system, add a property to SIDData which acts as an
alias `datetime` to `dt`.

Eventually support for `data['foo'].datetime` may be removed,
and could be considered deprecated.
2014-03-07 10:55:59 -05:00
twiecki 778da20468 BUG: Fix floating point error in order(). 2014-03-06 12:32:19 -05:00
twiecki eccaf8d53d ENH: Add symbol api function
A symbol() lookup feature was added to Quantopian.
By adding the same API function to zipline we can
make copy&pasting of a zipline algo to Quantopian
easier.
2014-03-05 17:15:44 -05:00
Richard Frank 5020c36f8d BUG: Fix cost basis calculation
Cost basis calculation now takes direction of txn into account.

Closing a long position or covering a short shouldn't affect the cost basis.
2014-03-05 14:48:58 -05:00
Richard Frank e459c2729c MAINT: Refactored unit tests to remove duplication
of arguments to factory.create methods.

Also added checking of the perf period cost basis results after each txn.
2014-03-05 14:48:42 -05:00
Richard Frank e7ec629510 MAINT: Cleaned up sid checks and exception types
Removed unnecessary parens

Keeping NameError reserved for when locals or globals are not found.
Exception is what we use for the other sid checks, so now they are consistent.
2014-03-05 14:40:05 -05:00
twiecki 63f1c791da DOC: Changed conda install channel. 2014-03-05 13:13:07 -05:00
Richard Frank 76b11e8b84 MAINT: Removed unnecessary floating point checks in slippage
Cleaned up some other expressions in slippage as well

Fixes #277
2014-03-04 18:36:29 -05:00
Eddie Hebert 6cdd5ddb10 BUG: Fix max drawdown calculation.
The input into max drawdown was incorrect, causing the bad results.
i.e. the `compounded_log_returns` were not values representative of
the algorithms total return at a given time, though
`calculate_max_drawdown` was treating the values as if they were.
Instead, use the `algorithm_period_returns` series, which does provide
the total return.

Update risk answer key with an Excel calculation of max drawdown
to help corroborate the calculations.

Also, remove `compounded_log_returns`, (which actually had stopped
being the `compounded_log_returns` at some point), since the max
drawdown was the only calculation using the values in that series.
2014-02-27 17:16:35 -05:00
Eddie Hebert e3096e9afc MAINT: Remove unused rounding method.
round_to_nearest is no longer referred elsewhere.
2014-02-26 21:55:14 -05:00
Eddie Hebert 7f724a9696 ENH: Provide all drawdowns and max drawdowns in cumulative risk.
The values are not part of the risk report, but can be useful for
examining the behavior of the drawdown calculations.
2014-02-26 20:46:58 -05:00
Colin Alexander 011ed09dc2 ENH: Extended commission PerShare method to allow a minimum cost per trade.
Also added unit tests (test_perf_tracking.TestCommissionEvents) to test
all commission models.
2014-02-25 14:37:08 -05:00
twiecki ae4a9b7d96 DOC: Added contributors to README.md 2014-02-21 09:05:22 -05:00
Richard Frank 14bae3e15b MAINT: Names were reversed from their actual values 2014-02-20 17:44:51 -05:00
Eddie Hebert 5dab18613b BUG: Prevent crash in vwap transform due to non-existent member.
The WrongDataForTransform was referencing a `self.fields` member,
which did not exist.

Add a self.fields member set to `price` and `volume` and use
it to iterate over during the check.
2014-02-20 17:33:30 -05:00
Eddie Hebert dd61ed4e25 BUG: Check required fields for stdev transform.
Move the assert method to the EventWindow subclass, to be
consistent with other transforms; also, add the check to
`handle_add`.
2014-02-20 17:29:25 -05:00
Eddie Hebert c139afb6a9 STY: Indentation fix in stddev. 2014-02-20 17:23:37 -05:00
Eddie Hebert 57c56351e9 MAINT: Re-enable algorithms which omit initialize method.
Though defining the `initialize` method may end up being explicitly
required, in the meantime prevent existing algorithms from crashing
by providing a noop function when `initialize` is not defined.
2014-02-20 13:50:03 -05:00
twiecki 170fe97631 BLD: Updates to conda build files. Now builds on windows. 2014-02-19 16:19:14 -05:00
twiecki e4caa43128 BLD: Added conda build files. 2014-02-16 11:00:51 -05:00
twiecki d900338e00 BUG: Py3 compatibility changes. 2014-02-16 10:59:29 -05:00
twiecki f0322015bd BUG: Fix pandas indexing in trading calendar. 2014-02-11 15:52:43 -05:00
Eddie Hebert e4d2527eca ENH: Limit handle_data to times with market data.
To prevent cases where custom data types had unaligned timestamps,
only call handle_data when market data passes through.

Custom data that comes before market data will still update
the data bar. But the handling of that data will only be done
when there is actionable market data.
2014-02-10 22:12:38 -05:00
Eddie Hebert 7aeaa69acf BUG: Prevent minute emission from crashing at end of available data.
The next day calculation was causing an error when a minute
emission algorithm reached the end of available data.

Instead of a generic exception when available data is reached,
raise and catch a named exception so that the tradesimulation loop
can skip over, since the next market close is not needed at the end.
2014-02-10 22:09:05 -05:00
Eddie Hebert e1608ad3f3 MAINT: Always defer to the algorithms data frequency.
For compatibility with existing behavior of having the,
data_frequency of the algorithm override the simulation parameters.

We may want to consider throwing an exception if the two do not match.
2014-02-10 15:24:18 -05:00
Eddie Hebert 8a22736f1e MAINT: Allow sim_params to provide data frequency for the algorithm.
In the case that data_frequency of the algorithm is None,
allow the sim_params to provide the data_frequency.

For less redundancy when setting up an algorithm.
2014-02-10 14:53:11 -05:00
Eddie Hebert b294d30af0 BLD: Update TA-Lib to latest version.
Keeping current with TA-Lib release.
Also, TA-Lib 0.4.7 has been removed from PyPI, so 0.4.8
is required for fresh PyPI based installs.
2014-02-07 22:03:06 -05:00
Eddie Hebert 7ecf544d15 BUG: Fix repr for cumulative risk metrics.
The __repr__ for RiskMetricsCumulative was referring to an older
structure of the class, causing an exception when printed.

Convert to printing the last values in the metrics DataFrame.
2014-02-07 21:34:01 -05:00
twiecki d91c18b1c2 BUG: Python 3 fix. 2014-01-30 18:48:46 -05:00
Michael Schatzow 59bcd097d5 ENH: Add hdf5 and csv source.
This creates a data source for csv and hdf5 files, a generator to create a sample csv, and a pytables generator to go from a list of dated gzipped csv's in a directory to a pytables data source.

This does not add a unittest yet which we should write for the future.
2014-01-30 16:47:27 -05:00
twiecki 07e25ae018 Merge branch to adjust benchmark times in minute mode. 2014-01-30 16:35:59 -05:00
twiecki 734abb2800 BUG: NoopAlgorithm requires initialize(). 2014-01-30 16:33:49 -05:00
Jamie Kirkpatrick 147242339d BUG: ensure perf stats are generated for all days
When running with minutely emissions the simulator would report to the
user that it simulated 'n - 1' days (where n is the number of days
specified in the simulation params).  Now the correct number of trading
days are reported as being simulated.
2014-01-30 16:04:29 -05:00