Beispiel #1
0
def run_strategy(data_provider: DataProvider) -> Tuple[float, str]:
    """ Returns the strategy end result and checksum of the preloaded data. """

    start_date = str_to_date("2017-01-01")
    end_date = str_to_date("2018-01-01")

    settings = get_test_settings()
    session_builder = BacktestTradingSessionBuilder(data_provider, settings,
                                                    PDFExporter(settings),
                                                    ExcelExporter(settings))
    session_builder.set_backtest_name('SPY w. stop ' +
                                      str(SpxWithStopLoss.percentage))
    session_builder.set_initial_cash(1000000)
    session_builder.set_frequency(Frequency.DAILY)
    session_builder.set_commission_model(IBCommissionModel)
    session_builder.set_data_provider(data_provider)
    session_builder.set_monitor_settings(BacktestMonitorSettings.no_stats())

    ts = session_builder.build(start_date, end_date)
    ts.use_data_preloading(SpxWithStopLoss.ticker, RelativeDelta(days=40))

    SpxWithStopLoss(ts)
    ts.start_trading()

    data_checksum = ts.get_preloaded_data_checksum()
    actual_end_value = ts.portfolio.portfolio_eod_series()[-1]
    return actual_end_value, data_checksum
Beispiel #2
0
    def setUp(self) -> None:
        settings = get_test_settings()
        self.data_provider = BloombergDataProvider(settings)
        self.data_provider.connect()

        if not self.data_provider.connected:
            raise self.skipTest("No Bloomberg connection")
Beispiel #3
0
    def setUp(self):
        dates = DatetimeIndex(start='2014-01-01', freq='d', periods=10)
        returns = np.arange(0, 1, 0.1)
        self.test_series = QFSeries(index=dates, data=returns)

        reversed_returns = returns[::-1]
        self.test_series_reversed = QFSeries(index=dates,
                                             data=reversed_returns)

        self.test_data_frame = concat(
            [self.test_series, self.test_series_reversed],
            axis=1,
            join='inner')

        settings = get_test_settings()
        self.xl_exporter = ExcelExporter(settings=settings)
Beispiel #4
0
def run_strategy(data_provider: DataProvider) -> Tuple[float, str]:
    """ Returns the strategy end result and checksum of the preloaded data. """

    model_tickers = [BloombergFutureTicker("Corn", "C {} Comdty", 1, 10, 1)]
    start_date = str_to_date('2003-05-30')
    end_date = str_to_date('2009-01-01')
    initial_risk = 0.006

    # ----- build trading session ----- #
    settings = get_test_settings()
    session_builder = BacktestTradingSessionBuilder(data_provider, settings,
                                                    PDFExporter(settings),
                                                    ExcelExporter(settings))
    session_builder.set_backtest_name('Simple Futures Strategy')
    session_builder.set_position_sizer(InitialRiskPositionSizer,
                                       initial_risk=initial_risk)
    session_builder.set_frequency(Frequency.DAILY)
    session_builder.set_data_provider(data_provider)
    session_builder.set_monitor_settings(BacktestMonitorSettings.no_stats())
    ts = session_builder.build(start_date, end_date)

    # ----- build models ----- #
    model = SimpleFuturesModel(fast_time_period=50,
                               slow_time_period=100,
                               risk_estimation_factor=3,
                               data_provider=ts.data_handler)
    model_tickers_dict = {model: model_tickers}

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

    ts.use_data_preloading(model_tickers)
    ts.start_trading()

    data_checksum = ts.get_preloaded_data_checksum()
    actual_end_value = ts.portfolio.portfolio_eod_series()[-1]
    return actual_end_value, data_checksum
Beispiel #5
0
import pandas as pd

from qf_lib.common.enums.frequency import Frequency
from qf_lib.common.enums.price_field import PriceField
from qf_lib.common.enums.quandl_db_type import QuandlDBType
from qf_lib.common.tickers.tickers import QuandlTicker
from qf_lib.common.utils.dateutils.string_to_date import str_to_date
from qf_lib.containers.dataframe.prices_dataframe import PricesDataFrame
from qf_lib.containers.dataframe.qf_dataframe import QFDataFrame
from qf_lib.containers.qf_data_array import QFDataArray
from qf_lib.containers.series.prices_series import PricesSeries
from qf_lib.containers.series.qf_series import QFSeries
from qf_lib.data_providers.quandl.quandl_data_provider import QuandlDataProvider
from qf_lib_tests.unit_tests.config.test_settings import get_test_settings

settings = get_test_settings()


@unittest.skipIf(
    not hasattr(settings, "quandl_key"),
    "`quandl_key` property was not found in the settings.\n"
    "Set it using `QUANTFIN_SECRET` environment variable. Sample value of the env. variable: \n"
    "{\"quandl_key\": \"zW14dr45trz4up4d4juZ\"}\n"
    "To get the key, register an account at https://www.quandl.com")
class TestQuandlTable(unittest.TestCase):
    START_DATE = str_to_date('2014-01-01')
    END_DATE = str_to_date('2015-02-02')
    SINGLE_FIELD = 'adj_close'
    MANY_FIELDS = ['adj_low', 'adj_volume', 'adj_close']
    db_name = 'WIKI/PRICES'
    type = QuandlDBType.Table
Beispiel #6
0
 def setUp(self):
     self.timer = SettableTimer(initial_time=str_to_date('2017-01-01'))
     settings = get_test_settings()
     self.bbg_provider = BloombergDataProvider(settings)