Пример #1
0
 def test_full_zipline(self):
     # provide enough trades to ensure all orders are filled.
     self.zipline_test_config['order_count'] = 100
     # making a small order amount, so that each order is filled
     # in a single transaction, and txn_count == order_count.
     self.zipline_test_config['order_amount'] = 25
     # No transactions can be filled on the first trade, so
     # we have one extra trade to ensure all orders are filled.
     self.zipline_test_config['trade_count'] = 101
     full_zipline = simfactory.create_test_zipline(
         **self.zipline_test_config)
     assert_single_position(self, full_zipline)
Пример #2
0
 def test_full_zipline(self):
     # provide enough trades to ensure all orders are filled.
     self.zipline_test_config['order_count'] = 100
     # making a small order amount, so that each order is filled
     # in a single transaction, and txn_count == order_count.
     self.zipline_test_config['order_amount'] = 25
     # No transactions can be filled on the first trade, so
     # we have one extra trade to ensure all orders are filled.
     self.zipline_test_config['trade_count'] = 101
     full_zipline = simfactory.create_test_zipline(
         **self.zipline_test_config)
     assert_single_position(self, full_zipline)
Пример #3
0
    def test_volshare_slippage(self):
        # verify order -> transaction -> portfolio position.
        # --------------
        test_algo = TradingAlgorithm(
            script="""
from zipline.api import *

def initialize(context):
    model = slippage.VolumeShareSlippage(
                            volume_limit=.3,
                            price_impact=0.05
                       )
    set_slippage(model)
    set_commission(commission.PerShare(0.02))
    context.count = 2
    context.incr = 0

def handle_data(context, data):
    if context.incr < context.count:
        # order small lots to be sure the
        # order will fill in a single transaction
        order(0, 5000)
    record(price=data[0].price)
    record(volume=data[0].volume)
    record(incr=context.incr)
    context.incr += 1
    """,
            sim_params=self.sim_params,
        )
        set_algo_instance(test_algo)

        self.zipline_test_config['algorithm'] = test_algo
        self.zipline_test_config['trade_count'] = 100

        # 67 will be used inside assert_single_position
        # to confirm we have as many transactions as expected.
        # The algo places 2 trades of 5000 shares each. The trade
        # events have volume ranging from 100 to 950. The volume cap
        # of 0.3 limits the trade volume to a range of 30 - 316 shares.
        # The spreadsheet linked below calculates the total position
        # size over each bar, and predicts 67 txns will be required
        # to fill the two orders. The number of bars and transactions
        # differ because some bars result in multiple txns. See
        # spreadsheet for details:
# https://www.dropbox.com/s/ulrk2qt0nrtrigb/Volume%20Share%20Worksheet.xlsx
        self.zipline_test_config['expected_transactions'] = 67

        zipline = simfactory.create_test_zipline(
            **self.zipline_test_config)
        output, _ = assert_single_position(self, zipline)

        # confirm the slippage and commission on a sample
        # transaction
        per_share_commish = 0.02
        perf = output[1]
        transaction = perf['daily_perf']['transactions'][0]
        commish = transaction['amount'] * per_share_commish
        self.assertEqual(commish, transaction['commission'])
        self.assertEqual(2.029, transaction['price'])
Пример #4
0
    def test_fixed_slippage(self):
        # verify order -> transaction -> portfolio position.
        # --------------
        test_algo = TradingAlgorithm(
            script="""
from zipline.api import (slippage,
                         commission,
                         set_slippage,
                         set_commission,
                         order,
                         record)

def initialize(context):
    model = slippage.FixedSlippage(spread=0.10)
    set_slippage(model)
    set_commission(commission.PerTrade(100.00))
    context.count = 1
    context.incr = 0

def handle_data(context, data):
    if context.incr < context.count:
        order(0, -1000)
    record(price=data[0].price)

    context.incr += 1""",
            sim_params=self.sim_params,
        )
        set_algo_instance(test_algo)

        self.zipline_test_config['algorithm'] = test_algo
        self.zipline_test_config['trade_count'] = 200

        # this matches the value in the algotext initialize
        # method, and will be used inside assert_single_position
        # to confirm we have as many transactions as orders we
        # placed.
        self.zipline_test_config['order_count'] = 1

        # self.zipline_test_config['transforms'] = \
        #     test_algo.transform_visitor.transforms.values()

        zipline = simfactory.create_test_zipline(
            **self.zipline_test_config)

        output, _ = assert_single_position(self, zipline)

        # confirm the slippage and commission on a sample
        # transaction
        recorded_price = output[1]['daily_perf']['recorded_vars']['price']
        transaction = output[1]['daily_perf']['transactions'][0]
        self.assertEqual(100.0, transaction['commission'])
        expected_spread = 0.05
        expected_commish = 0.10
        expected_price = recorded_price - expected_spread - expected_commish
        self.assertEqual(expected_price, transaction['price'])
Пример #5
0
 def test_full_zipline(self):
     #provide enough trades to ensure all orders are filled.
     self.zipline_test_config['order_count'] = 100
     self.zipline_test_config['trade_count'] = 200
     zipline = simfactory.create_test_zipline(**self.zipline_test_config)
     assert_single_position(self, zipline)
Пример #6
0
 def test_full_zipline(self):
     #provide enough trades to ensure all orders are filled.
     self.zipline_test_config['order_count'] = 100
     self.zipline_test_config['trade_count'] = 200
     zipline = simfactory.create_test_zipline(**self.zipline_test_config)
     assert_single_position(self, zipline)