From 7a7833a540e0efb79f4f2b9d5da3d46a558454d9 Mon Sep 17 00:00:00 2001 From: fawce Date: Fri, 30 Mar 2012 17:48:05 -0400 Subject: [PATCH 1/3] fixed missing fields, added a new random source option to test zipline (still buggy). --- zipline/finance/risk.py | 2 ++ zipline/lines.py | 21 ++++++++++++++++----- zipline/test/factory.py | 15 ++++++++++++++- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/zipline/finance/risk.py b/zipline/finance/risk.py index 4a335990..06a683b4 100644 --- a/zipline/finance/risk.py +++ b/zipline/finance/risk.py @@ -128,6 +128,8 @@ class RiskMetrics(): 'benchmark_volatility' : self.benchmark_volatility, 'algo_volatility' : self.algorithm_volatility, 'treasury_period_return': self.treasury_period_return, + 'algorithm_period_return' : self.algorithm_period_returns, + 'benchmark_period_return' : self.benchmark_period_returns, 'sharpe' : self.sharpe, 'beta' : self.beta, 'alpha' : self.alpha, diff --git a/zipline/lines.py b/zipline/lines.py index 50f3b787..824f00eb 100644 --- a/zipline/lines.py +++ b/zipline/lines.py @@ -191,6 +191,10 @@ class SimulatedTrading(object): :py:class:`zipline.simulator.Simulator` - algorithm - optional parameter providing an algorithm. defaults to :py:class:`zipline.test.algorithms.TestAlgorithm` + - random - optional parameter to request random trades. if present + :py:class:`zipline.sources.RandomEquityTrades` is the source. If + not :py:class:`ziplien.sources.SpecificEquityTrades` is the + source """ assert isinstance(config, dict) @@ -225,11 +229,18 @@ class SimulatedTrading(object): #------------------- sids = [sid] #------------------- - trade_source = factory.create_daily_trade_source( - sids, - trade_count, - trading_environment - ) + if config.has_key('random'): + trade_source = factory.create_random_trade_source( + sids, + trade_count, + trading_environment + ) + else: + trade_source = factory.create_daily_trade_source( + sids, + trade_count, + trading_environment + ) #------------------- # Create the Algo #------------------- diff --git a/zipline/test/factory.py b/zipline/test/factory.py index 1bfddc07..406ae74b 100644 --- a/zipline/test/factory.py +++ b/zipline/test/factory.py @@ -9,7 +9,7 @@ from datetime import datetime, timedelta import zipline.util as qutil import zipline.finance.risk as risk import zipline.protocol as zp -from zipline.sources import SpecificEquityTrades +from zipline.sources import SpecificEquityTrades, RandomEquityTrades from zipline.finance.trading import TradingEnvironment def load_market_data(): @@ -152,6 +152,19 @@ def create_returns_from_list(returns, start, trading_calendar): return test_range +def create_random_trade_source(sid, trade_count, trading_environment): + # create the source + source = RandomEquityTrades(sid, "rand-"+str(sid), trade_count) + + # make the period_end of trading_environment match + cur = trading_environment.period_start + one_day = timedelta(days = 1) + for i in range(trade_count + 2): + cur = get_next_trading_dt(cur, one_day, trading_environment) + trading_environment.period_end = cur + + return source + def create_daily_trade_source(sids, trade_count, trading_environment): """ creates trade_count trades for each sid in sids list. From c7bb22d4d6a6d4862bbb56d3b6fc80661745983a Mon Sep 17 00:00:00 2001 From: fawce Date: Sat, 31 Mar 2012 22:55:43 -0400 Subject: [PATCH 2/3] added a publish_to method to make the api access simpler for providing a socket into the zipline to publish. --- zipline/lines.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/zipline/lines.py b/zipline/lines.py index 824f00eb..e45e72d9 100644 --- a/zipline/lines.py +++ b/zipline/lines.py @@ -173,6 +173,72 @@ class SimulatedTrading(object): self.trading_client.set_algorithm(self.algorithm) + + # + @staticmethod + def create_test_zipline(**config): + """ + :param config: A configuration object that is a dict with: + + - environment - a \ + :py:class:`zipline.finance.trading.TradingEnvironment` + - allocator - a :py:class:`zipline.simulator.AddressAllocator` + - simulator_class - optional parameter that provides an alternative + subclass of ComponentHost to hold the whole zipline. Defaults to + :py:class:`zipline.simulator.Simulator` + - algorithm - required parameter providing an algorithm. defaults + to :py:class:`zipline.test.algorithms.TestAlgorithm` + """ + assert isinstance(config, dict) + + allocator = config['allocator'] + + #-------------------- + # Trading Environment + #-------------------- + if config.has_key('environment'): + trading_environment = config['environment'] + else: + trading_environment = factory.create_trading_environment() + + if config.has_key('order_count'): + order_count = config['order_count'] + else: + order_count = 100 + + if config.has_key('trade_count'): + trade_count = config['trade_count'] + else: + trade_count = 100 + + if config.has_key('simulator_class'): + simulator_class = config['simulator_class'] + else: + simulator_class = Simulator + + #------------------- + # Trade Source + #------------------- + + #------------------- + # Create the Algo + #------------------- + algo = config['algorithm'] + + #------------------- + # Simulation + #------------------- + zipline = SimulatedTrading(**{ + 'algorithm':algo, + 'trading_environment':trading_environment, + 'allocator':allocator, + 'simulator_class':simulator_class + }) + #------------------- + + zipline.add_source(trade_source) + + return zipline @staticmethod def create_test_zipline(**config): @@ -298,6 +364,9 @@ class SimulatedTrading(object): def get_cumulative_performance(self): return self.trading_client.perf.cumulative_performance.to_dict() + + def publish_to(self, result_socket): + self.trading_client.perf.publish_to(result_socket) def allocate_sockets(self, n): """ From e1a3a8e7990875fdce2f0c6db44edaf77e3dcafc Mon Sep 17 00:00:00 2001 From: fawce Date: Mon, 2 Apr 2012 10:37:27 -0400 Subject: [PATCH 3/3] removed extraneous method --- zipline/lines.py | 65 ------------------------------------------------ 1 file changed, 65 deletions(-) diff --git a/zipline/lines.py b/zipline/lines.py index e45e72d9..2bc32aa2 100644 --- a/zipline/lines.py +++ b/zipline/lines.py @@ -174,71 +174,6 @@ class SimulatedTrading(object): self.trading_client.set_algorithm(self.algorithm) - # - @staticmethod - def create_test_zipline(**config): - """ - :param config: A configuration object that is a dict with: - - - environment - a \ - :py:class:`zipline.finance.trading.TradingEnvironment` - - allocator - a :py:class:`zipline.simulator.AddressAllocator` - - simulator_class - optional parameter that provides an alternative - subclass of ComponentHost to hold the whole zipline. Defaults to - :py:class:`zipline.simulator.Simulator` - - algorithm - required parameter providing an algorithm. defaults - to :py:class:`zipline.test.algorithms.TestAlgorithm` - """ - assert isinstance(config, dict) - - allocator = config['allocator'] - - #-------------------- - # Trading Environment - #-------------------- - if config.has_key('environment'): - trading_environment = config['environment'] - else: - trading_environment = factory.create_trading_environment() - - if config.has_key('order_count'): - order_count = config['order_count'] - else: - order_count = 100 - - if config.has_key('trade_count'): - trade_count = config['trade_count'] - else: - trade_count = 100 - - if config.has_key('simulator_class'): - simulator_class = config['simulator_class'] - else: - simulator_class = Simulator - - #------------------- - # Trade Source - #------------------- - - #------------------- - # Create the Algo - #------------------- - algo = config['algorithm'] - - #------------------- - # Simulation - #------------------- - zipline = SimulatedTrading(**{ - 'algorithm':algo, - 'trading_environment':trading_environment, - 'allocator':allocator, - 'simulator_class':simulator_class - }) - #------------------- - - zipline.add_source(trade_source) - - return zipline @staticmethod def create_test_zipline(**config):