# 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) - [Sessions](#sessions) - [\_\_init\_\_](#sessions.__init__) - [find](#sessions.find) - [find_next](#sessions.find_next) - [check](#sessions.check) - [delta](#delta) - [until](#until) ## 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. #### Arguments | 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. ### action ```python async def action(action): pass ``` Used by begin and close to call the action specified. #### Arguments | Name | Type | Description | Default | |----------|---------------------------------------------------------------------------------|---------------------|---------| | `action` | `Literal['close_all', 'close_win', 'close_loss', 'custom_start', 'custom_end']` | The action to take. | None | ## 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) ``` Create a Sessions object. #### Arguments | Name | Type | Description | Default | |------------|------------------|-----------------------------|---------| | `sessions` | `tuple[Session]` | A tuple of Session objects. | None | ### find ```python def find(obj: time) -> Session | None ``` Find a session that contains a datetime.time object. #### Arguments | Name | Type | Description | Default | |-------|-----------------|-------------------------|---------| | `obj` | `datetime.time` | A datetime.time object. | None | #### Returns | Type | Description | |-----------|----------------------------------------| | `Session` | A Session object or None if not found. | ### find\_next ```python def find_next(obj: time) -> Session ``` Find the next session that contains a datetime.time object. #### Arguments | Name | Type | Description | Default | |-------|-----------------|-------------------------|---------| | `obj` | `datetime.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. #### Arguments: | Name | Type | Description | Default | |-------|-----------------|-------------------------|---------| | `obj` | `datetime.time` | A datetime.time object. | None | #### Returns | Type | Description | |-------------|---------------------| | `timedelta` | A timedelta object. | ### until ```python def until() ``` Get the seconds until the session starts from the current time. #### Returns: | Type | Description | |-------|---------------------------------------| | `int` | The seconds until the session starts. |