from aiomql import TradePositionfrom aiomql.lib.sessions import Duration # Session and Sessions Sessions allow you to run a strategy at specific times of the day. ## Table of Contents - [Session](#session) - [\__init\__](#session.__init__) - [begin](#session.begin) - [close](#session.close) - [action](#session.action) - [in_session](#session.in_session) - [duration](#session.duration) - [close_positions](#session.close_positions) - [close_all](#session.close_all) - [close_win](#session.close_win) - [close_loss](#session.close_loss) - [close_until](#session.until) - [Sessions](#sessions.sessions) - [\__init\__](#sessions.__init__) - [find](#sessions.find) - [find_next](#sessions.find_next) - [check](#sessions.check) - [delta](#sessions_mod.delta) - [backtest_sleep](#sessions_mod.backtest_sleep) ## Session ```python class Session ``` A session is a time period between two `datetime.time` objects specified in utc. #### Attributes: | Name | Type | Description | Default | |----------------|-------------------------------------------------------------------|------------------------------------------------------------------------|---------| | `start` | `datetime.time` | The start time of the session. | None | | `end` | `datetime.time` | The end time of the session. | None | | `on_start` | `Literal['close_all', 'close_win', 'close_loss', 'custom_start']` | The action to take when the session starts. Default is None. | None | | `on_end` | `Literal['close_all', 'close_win', 'close_loss', 'custom_end']` | The action to take when the session ends. Default is None. | None | | `custom_start` | `Callable` | A custom function to call when the session starts. Default is None. | None | | `custom_end` | `Callable` | A custom function to call when the session ends. Default is None. | None | | `name` | `str` | The name of the session. Default is a combination of start and finish. | | #### Notes: The `[close_all, close_win, close_loss]` will affect or open positions in the account irrespective of whether they were opened during the session or not or even by a strategy using the session. This is because the session is not aware of the positions opened by the strategy. This will be handled in a future release. ### \__init\__ ```python def __init__(*, start: int | time, end: int | time, on_start: Literal['close_all', 'close_win', 'close_loss', 'custom_start'] = None, on_end: Literal['close_all', 'close_win', 'close_loss', 'custom_end'] = None, custom_start: Callable = None, custom_end: Callable = None) ``` Create a session #### Parameters: | Name | Type | Description | Default | |----------------|-------------------------------------------------------------------|---------------------------------------------------------------------|---------| | `start` | `int` \| `datetime.time` | The start time of the session in UTC. | None | | `end` | `int` \| `datetime.time` | The end time of the session in UTC. | None | | `on_start` | `Literal['close_all', 'close_win', 'close_loss', 'custom_start']` | The action to take when the session starts. Default is None. | None | | `on_end` | `Literal['close_all', 'close_win', 'close_loss', 'custom_end']` | The action to take when the session ends. Default is None. | None | | `custom_start` | `Callable` | A custom function to call when the session starts. Default is None. | None | | `custom_end` | `Callable` | A custom function to call when the session ends. Default is None. | None | | `name` | `str` | The name of the session. Default is None. | None | ### begin ```python async def begin() ``` Call the action specified in on_start or custom_start. ### close ```python async def close() ``` Call the action specified in on_end or custom_end. ### in_session ```python def in_session() -> bool ``` Check if the current time is within the current session. ### duration ```python def duration() -> Duration ``` Get the duration of the session in hours, minutes, and seconds. ### close_positions ```python async def close_positions(*, positions: tuple[TradePosition, ...]) ``` Close positions in the sessions. This is used by the `close_all` action. #### Parameters: | Name | Type | Description | |-------------|-----------------------------|---------------------------------------| | `positions` | `tuple[TradePosition, ...]` | A tuple of TradePosition objects. | ### close_all ```python async def close_all() ``` Close all open positions ### close_win ```python async def close_win() ``` Close only winning positions ### close_loss ```python async def close_loss() ``` Close only losing positions ### action ```python async def action(*, action: Literal["close_all", "close_win", "close_loss", "custom_start", "custom_end"]): pass ``` Used by begin and close to call the action specified. #### Parameters: | Name | Type | Description | |----------|---------------------------------------------------------------------------------|---------------------| | `action` | `Literal['close_all', 'close_win', 'close_loss', 'custom_start', 'custom_end']` | The action to take. | ### until ```python def until() -> int ``` Get the seconds until the session starts from the current time. ## Sessions ```python class Sessions() ``` Sessions allow you to run code at specific times of the day. It is a collection of Session objects. Sessions are sorted by start time. The sessions object is an asynchronous context manager. ### Attributes: | Name | Type | Description | Default | |-------------------|-----------------|----------------------------|---------| | `sessions` | `list[Session]` | A list of Session objects. | [] | | `current_session` | `Session` | The current session. | None | #### \__init\__ ```python def __init__(*sessions: Iterable[Session]) ``` Create a Sessions object. #### Parameters: | Name | Type | Description | |------------|---------------------|--------------------------------| | `sessions` | `Iterable[Session]` | A iterable of Session objects. | ### find ```python def find(*, moment: time = None) -> Session | None ``` Find a session that contains a datetime.time object. #### Parameters: | Name | Type | Description | Default | |----------|--------|-------------------------|---------| | `moment` | `time` | A datetime.time object. | None | #### Returns: | Type | Description | |-----------|----------------------------------------| | `Session` | A Session object or None if not found. | ### find_next ```python def find_next(*, moment: time = None) -> Session ``` Find the next session that contains a datetime.time object. #### Parameters: | Name | Type | Description | Default | |----------|--------|-------------------------|---------| | `moment` | `time` | A datetime.time object. | | #### Returns: | Type | Description | |-----------|-------------------| | `Session` | A Session object. | ### check ```python async def check(): pass ``` Check if the current session has started and if not, wait until it starts. ### delta ```python def delta(obj: time) -> timedelta: pass ``` Get the timedelta of a datetime.time object. #### Parameters: | Name | Type | Description | Default | |-------|-----------------|-------------------------|---------| | `obj` | `datetime.time` | A datetime.time object. | None | #### Returns | Type | Description | |-------------|---------------------| | `timedelta` | A timedelta object. | ### backtest_sleep ```python async def backtest_sleep(secs) ``` Sleep method for backtesting.