Trading Sessions Provider
TradingSessionsProvider
is responsible for getting selected instrument's trading schedule.
dxchart5-react
requests sessions up to +14 days fromDate.now()
for a correct work, so make sure you've provided enough.
There's only 4 types of trading sessions supported:
type SessionType = 'NO_TRADING' | 'PRE_MARKET' | 'REGULAR' | 'AFTER_MARKET';
TradingSessions
incorporates from
and to
timestamps, which is a range of time when the session is active, and type
of the session.
const tradingSessions: TradingSession[] = [
{
// as you can see here, NO_TRADING session is defined as from 12:00 AM to 8:00 AM on 10 Jul
from: 1720569600000, // GMT: Wednesday, July 10, 2024 12:00:00 AM
to: 1720598400000, // GMT: Wednesday, July 10, 2024 8:00:00 AM
type: 'NO_TRADING',
},
];
What you should do is just to define instrument's trading sessions one by one, one after another, like:
const tradingSessions: TradingSession[] = [
{
// as you can see here, you define NO_TRADING session from 12:00 AM to 8:00 AM on 10 Jul
from: 1720569600000, // GMT: Wednesday, July 10, 2024 12:00:00 AM
to: 1720598400000, // GMT: Wednesday, July 10, 2024 8:00:00 AM
type: 'NO_TRADING',
},
{
// after that obviously PRE_MARKET sessions starts from 8:00 AM to 12:00 PM
from: 1720598400000, // GMT: Wednesday, July 10, 2024 8:00:00 AM
to: 1720612800000, // GMT: Wednesday, July 10, 2024 12:00:00 PM
type: 'PRE_MARKET',
},
{
// then REGULAR session starts from 12:00 PM to 8:00 PM
from: 1720612800000, // GMT: Wednesday, July 10, 2024 12:00:00 PM
to: 1720641600000, // GMT: Wednesday, July 10, 2024 8:00:00 PM
type: 'REGULAR',
},
{
// and AFTER_MARKET then starts from 8:00 PM Jul 10 to 12:00 AM Jul 11
from: 1720641600000, // GMT: Wednesday, July 10, 2024 8:00:00 PM
to: 1720656000000, // GMT: Thursday, July 11, 2024 12:00:00 AM
type: 'AFTER_MARKET',
},
{
// and so on...
from: 1720656000000,
to: 1720684800000,
type: 'NO_TRADING',
},
];
With tradable weekends and holidays the situation is the same - just define
TradingSession
in the same format for them.
Example
/** Copyright ©2024 Devexperts LLC.All rights reserved. Any unauthorized use will constitute an infringement of copyright.In case of any questions regarding types of use, please contact legal@devexperts.com.This notice must remain intact.**/import { generateTradingSessions } from '@dx-private/dxchart5-react/dist/utils/generator/trading-sessions-generator.utils';const MOCK_TIME_ZONE = 'America/New_York';/*** Creates mock implementation of {@link TradingSessionsProvider}.*/export const createMockTradingSessionsProvider = () => {const sessionsCache = new Map();const timezonesCache = new Map();// NOTE: chart requests sessions up to +14 days from Date.now() for a correct work,// so make sure you've provided enough sessions.const MOCK_TRADING_SESSIONS = generateTradingSessions();const requestSession = (tradingHours) => {const cached = sessionsCache.get(tradingHours);if (cached) {return cached;}const req = new Promise(resolve => setTimeout(() => resolve(MOCK_TRADING_SESSIONS), 1000));sessionsCache.set(tradingHours, req);return req;};const requestTimezone = (tradingHours) => {const cached = timezonesCache.get(tradingHours);if (cached) {return cached;}const req = new Promise(resolve => setTimeout(() => resolve(MOCK_TIME_ZONE), 1000));timezonesCache.set(tradingHours, req);return req;};/*** `options.tradingHours` and `options.symbol` properties are taken by `dxcharts-react` from the information* about `Instrument` you've provided via `SymbolSuggestProvider`.** @example* options.tradingHours = "NewYorkUS(rt=0300;0=p04000930r09301600a16002000)";* options.symbol = "AAPL";*/const getTimeZone = (options) => {if (options.tradingHours === undefined) {return Promise.resolve('UTC');}const tradingHours = options.tradingHours;return requestTimezone(tradingHours);};const generateSessions = (from, to, options) => {const tradingHours = options.tradingHours;return tradingHours? requestSession(tradingHours).then((sessions) => {return sessions.filter(session => session.to >= from && session.from <= to);}): Promise.resolve([]);};return {generateSessions,getTimeZone,};};
API Reference
TradingSessionsProvider
To change the way trading sessions work
- TradingSessionsProvider.generateSessions
- Parameters
- from: number
- timestamp
- to: number
- timestamp
- options: GenerateSessionOptions
- see
- Returns
- Promise<TradingSession[]>
TradingSessionsProvider.generateSessions(from: number, to: number, options: GenerateSessionOptions): Promise<TradingSession[]>
Generates trading sessions
- TradingSessionsProvider.getTimeZone
- Parameters
- options: GenerateSessionOptions
- Returns
- Promise<string>
TradingSessionsProvider.getTimeZone(options: GenerateSessionOptions): Promise<string>
Returns timezone for specified symbol and trading hours