# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501

import decimal
import typing

from nautilus_trader import model

__all__ = [
    "DataTesterConfig",
    "ExecTesterConfig",
    "ensure_file_exists_or_download_http",
]

@typing.final
class DataTesterConfig:
    def __init__(
        self,
        actor_id: model.ActorId | None = None,
        client_id: model.ClientId | None = None,
        instrument_ids: typing.Sequence[model.InstrumentId] | None = None,
        bar_types: typing.Sequence[model.BarType] | None = None,
        subscribe_book_deltas: bool | None = None,
        subscribe_book_depth: bool | None = None,
        subscribe_book_at_interval: bool | None = None,
        subscribe_quotes: bool | None = None,
        subscribe_trades: bool | None = None,
        subscribe_mark_prices: bool | None = None,
        subscribe_index_prices: bool | None = None,
        subscribe_funding_rates: bool | None = None,
        subscribe_bars: bool | None = None,
        subscribe_instrument: bool | None = None,
        subscribe_instrument_status: bool | None = None,
        subscribe_instrument_close: bool | None = None,
        subscribe_option_greeks: bool | None = None,
        can_unsubscribe: bool | None = None,
        request_instruments: bool | None = None,
        request_quotes: bool | None = None,
        request_trades: bool | None = None,
        request_bars: bool | None = None,
        request_book_snapshot: bool | None = None,
        request_book_deltas: bool | None = None,
        request_funding_rates: bool | None = None,
        book_depth: int | None = None,
        book_interval_ms: int | None = None,
        book_levels_to_print: int | None = None,
        manage_book: bool | None = None,
        log_data: bool | None = None,
        stats_interval_secs: int | None = None,
        log_events: bool | None = None,
        log_commands: bool | None = None,
    ) -> None: ...
    @property
    def actor_id(self) -> model.ActorId | None: ...
    @property
    def client_id(self) -> model.ClientId | None: ...
    @property
    def instrument_ids(self) -> list[model.InstrumentId]: ...
    @property
    def bar_types(self) -> list[model.BarType] | None: ...
    @property
    def subscribe_book_deltas(self) -> bool: ...
    @property
    def subscribe_book_depth(self) -> bool: ...
    @property
    def subscribe_book_at_interval(self) -> bool: ...
    @property
    def subscribe_quotes(self) -> bool: ...
    @property
    def subscribe_trades(self) -> bool: ...
    @property
    def subscribe_mark_prices(self) -> bool: ...
    @property
    def subscribe_index_prices(self) -> bool: ...
    @property
    def subscribe_funding_rates(self) -> bool: ...
    @property
    def subscribe_bars(self) -> bool: ...
    @property
    def subscribe_instrument(self) -> bool: ...
    @property
    def subscribe_instrument_status(self) -> bool: ...
    @property
    def subscribe_instrument_close(self) -> bool: ...
    @property
    def subscribe_option_greeks(self) -> bool: ...
    @property
    def can_unsubscribe(self) -> bool: ...
    @property
    def request_instruments(self) -> bool: ...
    @property
    def request_quotes(self) -> bool: ...
    @property
    def request_trades(self) -> bool: ...
    @property
    def request_bars(self) -> bool: ...
    @property
    def request_book_snapshot(self) -> bool: ...
    @property
    def request_book_deltas(self) -> bool: ...
    @property
    def request_funding_rates(self) -> bool: ...
    @property
    def book_depth(self) -> int | None: ...
    @property
    def book_interval_ms(self) -> int: ...
    @property
    def book_levels_to_print(self) -> int: ...
    @property
    def manage_book(self) -> bool: ...
    @property
    def log_data(self) -> bool: ...
    @property
    def stats_interval_secs(self) -> int: ...
    @property
    def log_events(self) -> bool: ...
    @property
    def log_commands(self) -> bool: ...

@typing.final
class ExecTesterConfig:
    def __init__(
        self,
        strategy_id: model.StrategyId | None = None,
        order_id_tag: str | None = None,
        use_hyphens_in_client_order_ids: bool | None = None,
        use_uuid_client_order_ids: bool | None = None,
        external_order_instrument_ids: typing.Sequence[model.InstrumentId] | None = None,
        instrument_id: model.InstrumentId | None = None,
        client_id: model.ClientId | None = None,
        order_qty: model.Quantity | None = None,
        order_display_qty: model.Quantity | None = None,
        order_expire_time_delta_mins: int | None = None,
        order_params: dict | None = None,
        subscribe_book: bool | None = None,
        subscribe_quotes: bool | None = None,
        subscribe_trades: bool | None = None,
        book_type: model.BookType | None = None,
        book_depth: int | None = None,
        book_interval_ms: int | None = None,
        book_levels_to_print: int | None = None,
        open_position_on_start_qty: decimal.Decimal | None = None,
        open_position_on_first_quote: bool | None = None,
        open_position_time_in_force: model.TimeInForce | None = None,
        enable_limit_buys: bool | None = None,
        enable_limit_sells: bool | None = None,
        enable_stop_buys: bool | None = None,
        enable_stop_sells: bool | None = None,
        tob_offset_ticks: int | None = None,
        limit_time_in_force: model.TimeInForce | None = None,
        stop_order_type: model.OrderType | None = None,
        stop_offset_ticks: int | None = None,
        stop_limit_offset_ticks: int | None = None,
        stop_trigger_type: model.TriggerType | None = None,
        stop_time_in_force: model.TimeInForce | None = None,
        trailing_offset: decimal.Decimal | None = None,
        trailing_offset_type: model.TrailingOffsetType | None = None,
        enable_brackets: bool | None = None,
        batch_submit_limit_pair: bool | None = None,
        bracket_entry_order_type: model.OrderType | None = None,
        bracket_offset_ticks: int | None = None,
        modify_orders_to_maintain_tob_offset: bool | None = None,
        modify_stop_orders_to_maintain_offset: bool | None = None,
        cancel_replace_orders_to_maintain_tob_offset: bool | None = None,
        cancel_replace_stop_orders_to_maintain_offset: bool | None = None,
        trigger_limit_order_maintenance_once: bool | None = None,
        use_post_only: bool | None = None,
        limit_aggressive: bool | None = None,
        use_quote_quantity: bool | None = None,
        emulation_trigger: model.TriggerType | None = None,
        use_individual_cancels_on_stop: bool | None = None,
        cancel_orders_on_stop: bool | None = None,
        close_positions_on_stop: bool | None = None,
        close_positions_qty_precision: int | None = None,
        close_positions_time_in_force: model.TimeInForce | None = None,
        reduce_only_on_stop: bool | None = None,
        use_batch_cancel_on_stop: bool | None = None,
        dry_run: bool | None = None,
        log_data: bool | None = None,
        test_reject_post_only: bool | None = None,
        test_reject_reduce_only: bool | None = None,
        test_modify_rejected: bool | None = None,
        can_unsubscribe: bool | None = None,
        clamp_to_instrument_price_range: bool | None = None,
        log_events: bool | None = None,
        log_commands: bool | None = None,
    ) -> None: ...
    @property
    def strategy_id(self) -> model.StrategyId | None: ...
    @property
    def order_id_tag(self) -> str | None: ...
    @property
    def use_hyphens_in_client_order_ids(self) -> bool: ...
    @property
    def use_uuid_client_order_ids(self) -> bool: ...
    @property
    def external_order_instrument_ids(self) -> list[model.InstrumentId] | None: ...
    @property
    def instrument_id(self) -> model.InstrumentId: ...
    @property
    def client_id(self) -> model.ClientId | None: ...
    @property
    def order_qty(self) -> model.Quantity: ...
    @property
    def order_display_qty(self) -> model.Quantity | None: ...
    @property
    def order_expire_time_delta_mins(self) -> int | None: ...
    @property
    def order_params(self) -> dict | None: ...
    @property
    def subscribe_book(self) -> bool: ...
    @property
    def subscribe_quotes(self) -> bool: ...
    @property
    def subscribe_trades(self) -> bool: ...
    @property
    def book_type(self) -> model.BookType: ...
    @property
    def book_depth(self) -> int | None: ...
    @property
    def book_interval_ms(self) -> int: ...
    @property
    def book_levels_to_print(self) -> int: ...
    @property
    def open_position_on_start_qty(self) -> decimal.Decimal | None: ...
    @property
    def open_position_on_first_quote(self) -> bool: ...
    @property
    def open_position_time_in_force(self) -> model.TimeInForce: ...
    @property
    def enable_limit_buys(self) -> bool: ...
    @property
    def enable_limit_sells(self) -> bool: ...
    @property
    def enable_stop_buys(self) -> bool: ...
    @property
    def enable_stop_sells(self) -> bool: ...
    @property
    def tob_offset_ticks(self) -> int: ...
    @property
    def limit_time_in_force(self) -> model.TimeInForce | None: ...
    @property
    def stop_order_type(self) -> model.OrderType: ...
    @property
    def stop_offset_ticks(self) -> int: ...
    @property
    def stop_limit_offset_ticks(self) -> int | None: ...
    @property
    def stop_trigger_type(self) -> model.TriggerType: ...
    @property
    def stop_time_in_force(self) -> model.TimeInForce | None: ...
    @property
    def trailing_offset(self) -> decimal.Decimal | None: ...
    @property
    def trailing_offset_type(self) -> model.TrailingOffsetType: ...
    @property
    def enable_brackets(self) -> bool: ...
    @property
    def batch_submit_limit_pair(self) -> bool: ...
    @property
    def bracket_entry_order_type(self) -> model.OrderType: ...
    @property
    def bracket_offset_ticks(self) -> int: ...
    @property
    def modify_orders_to_maintain_tob_offset(self) -> bool: ...
    @property
    def modify_stop_orders_to_maintain_offset(self) -> bool: ...
    @property
    def cancel_replace_orders_to_maintain_tob_offset(self) -> bool: ...
    @property
    def cancel_replace_stop_orders_to_maintain_offset(self) -> bool: ...
    @property
    def trigger_limit_order_maintenance_once(self) -> bool: ...
    @property
    def use_post_only(self) -> bool: ...
    @property
    def limit_aggressive(self) -> bool: ...
    @property
    def use_quote_quantity(self) -> bool: ...
    @property
    def emulation_trigger(self) -> model.TriggerType | None: ...
    @property
    def use_individual_cancels_on_stop(self) -> bool: ...
    @property
    def cancel_orders_on_stop(self) -> bool: ...
    @property
    def close_positions_on_stop(self) -> bool: ...
    @property
    def close_positions_qty_precision(self) -> int | None: ...
    @property
    def close_positions_time_in_force(self) -> model.TimeInForce | None: ...
    @property
    def reduce_only_on_stop(self) -> bool: ...
    @property
    def use_batch_cancel_on_stop(self) -> bool: ...
    @property
    def dry_run(self) -> bool: ...
    @property
    def log_data(self) -> bool: ...
    @property
    def test_reject_post_only(self) -> bool: ...
    @property
    def test_reject_reduce_only(self) -> bool: ...
    @property
    def test_modify_rejected(self) -> bool: ...
    @property
    def can_unsubscribe(self) -> bool: ...
    @property
    def clamp_to_instrument_price_range(self) -> bool: ...
    @property
    def log_events(self) -> bool: ...
    @property
    def log_commands(self) -> bool: ...

def ensure_file_exists_or_download_http(
    filepath: str, url: str, checksums: str | None = None, timeout_secs: int | None = 30
) -> None: ...
