def METHOD_NAME(benchmark):
    def setup():
        config = BacktestEngineConfig(logging=LoggingConfig(bypass_logging=True))
        engine = BacktestEngine(config=config)
        provider = TestDataProvider()
        interest_rate_data = pd.read_csv(
            os.path.join(TEST_DATA_DIR, "short-term-interest.csv"),
        )
        config = FXRolloverInterestConfig(interest_rate_data)
        fx_rollover_interest = FXRolloverInterestModule(config)
        engine.add_venue(
            venue=Venue("SIM"),
            oms_type=OmsType.HEDGING,
            account_type=AccountType.MARGIN,
            base_currency=USD,
            starting_balances=[Money(1_000_000, USD)],
            modules=[fx_rollover_interest],
        )
        engine.add_instrument(USDJPY_SIM)
        # Setup data
        wrangler = QuoteTickDataWrangler(USDJPY_SIM)
        ticks = wrangler.process_bar_data(
            bid_data=provider.read_csv_bars("fxcm-usdjpy-m1-bid-2013.csv"),
            ask_data=provider.read_csv_bars("fxcm-usdjpy-m1-ask-2013.csv"),
        )
        engine.add_data(ticks)
        config = EMACrossConfig(
            instrument_id=str(USDJPY_SIM.id),
            bar_type=str(TestDataStubs.bartype_usdjpy_1min_bid()),
            trade_size=Decimal(1_000_000),
            fast_ema_period=10,
            slow_ema_period=20,
        )
        strategy = EMACross(config=config)
        start = datetime(2013, 2, 1, 0, 0, 0, 0, tzinfo=pytz.utc)
        end = datetime(2013, 3, 1, 0, 0, 0, 0, tzinfo=pytz.utc)
        return (engine, start, end, [strategy]), {}
    def run(engine, start, end, strategies):
        engine.add_strategies(strategies)
        engine.run(start=start, end=end)
    benchmark.pedantic(run, setup=setup, rounds=1, iterations=1)