Exemplo n.º 1
0
def main():
    initial_risk = 0.03

    start_date = str_to_date('2010-01-01')
    end_date = str_to_date('2011-12-31')

    # Use the preset daily data provider
    data_provider = daily_data_provider

    # ----- build trading session ----- #
    session_builder = container.resolve(BacktestTradingSessionBuilder)  # type: BacktestTradingSessionBuilder
    session_builder.set_backtest_name('Moving Average Alpha Model Backtest')
    session_builder.set_position_sizer(InitialRiskPositionSizer, initial_risk=initial_risk)
    session_builder.set_contract_ticker_mapper(DummyTickerMapper())
    session_builder.set_commission_model(IBCommissionModel)
    session_builder.set_data_provider(data_provider)
    session_builder.set_frequency(Frequency.DAILY)

    ts = session_builder.build(start_date, end_date)

    # ----- build models ----- #
    model = MovingAverageAlphaModel(fast_time_period=5, slow_time_period=20, risk_estimation_factor=1.25,
                                    data_handler=ts.data_handler)
    model_tickers = [DummyTicker('AAA'), DummyTicker('BBB'), DummyTicker('CCC'),
                     DummyTicker('DDD'), DummyTicker('EEE'), DummyTicker('FFF')]
    model_tickers_dict = {model: model_tickers}

    # ----- preload price data ----- #
    ts.use_data_preloading(model_tickers)
    # Verify the checksum of preloaded data with the precomputed value
    ts.verify_preloaded_data("e73eed1f125ff6afa2cdc95957a703a999f41d34")

    # ----- start trading ----- #
    AlphaModelStrategy(ts, model_tickers_dict, use_stop_losses=True)
    ts.start_trading()
Exemplo n.º 2
0
    def setUpClass(cls):
        cls.initial_cash = 1000000  # 1M
        cls.contract = Contract('AAPL US Equity',
                                security_type='STK',
                                exchange='NYSE')
        cls.contract_size = 75
        cls.fut_contract = Contract('CTZ9 Comdty',
                                    security_type='FUT',
                                    exchange='CME',
                                    contract_size=cls.contract_size)

        tickers = [
            DummyTicker(cls.contract.symbol),
            DummyTicker(cls.fut_contract.symbol)
        ]
        cls.prices_series = QFSeries(data=[120, 250], index=tickers)
        cls.prices_up = QFSeries(data=[130, 270], index=tickers)
        cls.prices_down = QFSeries(data=[100, 210], index=tickers)

        cls.start_time = str_to_date('2017-01-01')
        cls.random_time = str_to_date('2017-02-02')
        cls.end_time = str_to_date('2018-02-03')
        cls.trades_generator = TradesGenerator()
Exemplo n.º 3
0
    def get_portfolio_and_data_handler(self):
        data_handler = Mock(spec=DataHandler)
        data_handler.get_last_available_price.side_effect = lambda tickers: self.data_handler_prices[tickers] \
            if tickers else None

        contract_mapper = Mock(spec=ContractTickerMapper)
        contract_mapper.contract_to_ticker.side_effect = lambda contract: DummyTicker(
            contract.symbol)

        timer = SettableTimer()
        timer.set_current_time(self.start_time)

        portfolio = Portfolio(data_handler, self.initial_cash, timer,
                              contract_mapper)
        return portfolio, data_handler, timer
Exemplo n.º 4
0
def main():
    # settings
    backtest_name = 'Simple MA Strategy Demo'
    start_date = str_to_date("2010-01-01")
    end_date = str_to_date("2015-03-01")
    ticker = DummyTicker("AAA")

    # configuration
    session_builder = container.resolve(BacktestTradingSessionBuilder)  # type: BacktestTradingSessionBuilder
    session_builder.set_frequency(Frequency.DAILY)
    session_builder.set_backtest_name(backtest_name)
    session_builder.set_data_provider(daily_data_provider)

    ts = session_builder.build(start_date, end_date)

    OnBeforeMarketOpenSignalGeneration(SimpleMAStrategy(ts, ticker))
    ts.start_trading()
Exemplo n.º 5
0
def main():
    initial_risk = 0.03

    start_date = str_to_date('2010-01-01')
    end_date = str_to_date('2011-12-31')

    # Use the preset daily data provider
    data_provider = daily_data_provider

    # ----- build trading session ----- #
    session_builder = container.resolve(
        BacktestTradingSessionBuilder)  # type: BacktestTradingSessionBuilder
    session_builder.set_backtest_name('Moving Average Alpha Model Backtest')
    session_builder.set_position_sizer(InitialRiskPositionSizer,
                                       initial_risk=initial_risk)
    session_builder.set_commission_model(IBCommissionModel)
    session_builder.set_data_provider(data_provider)
    session_builder.set_frequency(Frequency.DAILY)

    ts = session_builder.build(start_date, end_date)

    # ----- build models ----- #
    model = MovingAverageAlphaModel(fast_time_period=5,
                                    slow_time_period=20,
                                    risk_estimation_factor=1.25,
                                    data_provider=ts.data_handler)
    model_tickers = [
        DummyTicker('AAA'),
        DummyTicker('BBB'),
        DummyTicker('CCC'),
        DummyTicker('DDD'),
        DummyTicker('EEE'),
        DummyTicker('FFF')
    ]
    model_tickers_dict = {model: model_tickers}

    # ----- preload price data ----- #
    ts.use_data_preloading(model_tickers)
    # Verify the checksum of preloaded data with the precomputed value
    ts.verify_preloaded_data("778bbaac65cb0a5a848167999b88cf29a1cd8467")

    # ----- start trading ----- #
    strategy = AlphaModelStrategy(ts, model_tickers_dict, use_stop_losses=True)

    # Set the signal generation and orders placement to be performed at the OnBeforeMarketOpen event
    OnBeforeMarketOpenSignalGeneration(strategy)

    ts.start_trading()
Exemplo n.º 6
0
def main():
    # settings
    backtest_name = 'Intraday MA Strategy Demo'
    start_date = str_to_date("2019-07-01")
    end_date = str_to_date("2019-10-01")
    ticker = DummyTicker("AAA")

    setup_logging(logging.INFO, console_logging=True)

    OnNewBarEvent.set_frequency(Frequency.MIN_15)
    OnNewBarEvent.set_start_and_end_time({"hour": 10, "minute": 0, "second": 0, "microsecond": 0},
                                         {"hour": 13, "minute": 0, "second": 0, "microsecond": 0})

    # configuration
    session_builder = container.resolve(BacktestTradingSessionBuilder)  # type: BacktestTradingSessionBuilder
    session_builder.set_frequency(Frequency.MIN_1)
    session_builder.set_backtest_name(backtest_name)
    session_builder.set_data_provider(intraday_data_provider)

    ts = session_builder.build(start_date, end_date)

    OnNewBarSignalGeneration(IntradayMAStrategy(ts, ticker))
    ts.start_trading()
Exemplo n.º 7
0
def _acquire_data(input_file: str):
    data_frame = read_csv(input_file, parse_dates=['dates'])

    # The data_frame contains following headers: dates, open, high, low, close, volume, ticker.
    dates = data_frame['dates'].drop_duplicates()
    tickers = [DummyTicker(t) for t in data_frame['tickers'].unique()]

    # The columns in the csv file are in the exactly same order as the corresponding fields in the list below
    fields = PriceField.ohlcv()

    # Create a data array
    data_array = data_frame.set_index(['dates', 'tickers']).stack().to_xarray()

    # Construct a QFDataArray based on the data_array and sort it by the 'dates' coordinate
    data = QFDataArray.create(dates=dates,
                              tickers=tickers,
                              fields=fields,
                              data=data_array).sortby('dates')

    start_date = dates.iloc[0]
    end_date = dates.iloc[-1]

    return data, start_date, end_date
Exemplo n.º 8
0
 def contract_to_ticker(self,
                        contract: Contract,
                        strictly_to_specific_ticker=True) -> Ticker:
     return DummyTicker(ticker=contract.symbol)