Skip to main content

API Reference - Providers

Providers are a way to integrate data with outside world - host application

Mandatory providers

To load candles and chart service data (Quotes, Trades, ...)

ChartDataProvider

ChartDataProvider.requestHistoryData
ChartDataProvider.requestHistoryData(symbol: string, aggregation: AggregationPeriod, options: { fromTime?: number; toTime?: number; } & ChartDataOptions, updateCallback: (data: ChartCandleData[]) => void, chartId: string): Promise<ChartCandleData[]>

There might be 3 possible cases: 1. Initial data request when left bound of viewport somewhere in the history data and right bound at current candle tick. In this situation `requestHistoryData` method will provide only `fromTime` parameter (that's a base case for initial viewport). In other words `fromTime` will point somewhere on the left bound of viewport. That means that in this case you should provide history data AT LEAST from `fromTime` to right now, the time when request were made. BUT you can give more history data if you want. 2. lnitial data request when left and right bound of viewport somewhere in the history data. This can happen when user for example reloads the page when their viewport somewhere in the history data. In this situation `requestHistoryData` will provide only `fromTime` parameter too. It means that even in this case you should provide all the history data from `fromTime` to right now, the time when request were made. That's pretty much the same case as №1. 3. Lazy load of candles, that are on the left to timeline, i.e older history data. On initial load you can give chart any amount of candles you like, it might be 100 or 1000, doesn't matter. Depends on you. This means that when we scroll to the left to older data, we will have as much candles as you provided. When we will reach the oldest history candle, chart will fire `requestHistoryData` to request even older data, i.e lazy load. In this situation `requestHistoryData` will only provide `toTime`. Why this way? Because again, you can give chart any amount of data you want, so there's no point in `fromTime` parameter. You may not give any data in the response - this would mean that there's no history data left.

Parameters
symbol: string
aggregation: AggregationPeriod
options: { fromTime?: number; toTime?: number; } & ChartDataOptions
`fromTime` and `toTime` are candles timestamps, that simply reflect the current state of the chart. Therefore, you can either use the current state of the chart to calculate the necessary query parameters, or completely ignore them. `fromTime` is an oldest candle's timestamp which should be data get from, `toTime` is the newest (usually `toTime` candle equals the oldest visible candle)
updateCallback: (data: ChartCandleData[]) => void
!!! WARNING !!! This function updates the whole instrument's history data
chartId: string
Returns
Promise<ChartCandleData[]>
ChartDataProvider.subscribeCandles
ChartDataProvider.subscribeCandles(symbol: string, aggregation: AggregationPeriod, subscriptionId: string, subscribeCallback: (data: ChartCandleData[]) => void, options: ChartDataOptions, chartId: string): void

Parameters
symbol: string
aggregation: AggregationPeriod
subscriptionId: string
subscribeCallback: (data: ChartCandleData[]) => void
options: ChartDataOptions
chartId: string
Returns
void
ChartDataProvider.unsubscribeCandles
ChartDataProvider.unsubscribeCandles(subscriptionId: string): void

Unsubscribe is called when symbol, aggregation or options are changed

Parameters
subscriptionId: string
Returns
void
ChartDataProvider.subscribeServiceData
ChartDataProvider.subscribeServiceData(symbol: string, subscribeCallback: (data: ServiceData) => void): void

Parameters
symbol: string
subscribeCallback: (data: ServiceData) => void
Returns
void
ChartDataProvider.unsubscribeServiceData
ChartDataProvider.unsubscribeServiceData(symbol: string): void

Parameters
symbol: string
Returns
void

SymbolSuggestProvider

Symbol suggest provider fetches instrument data

SymbolSuggestProvider.findInstrument
SymbolSuggestProvider.findInstrument(symbol: string): Promise<Instrument>

By given instrument symbol returns exactly one instrument (or throws error)

Parameters
symbol: string
Returns
Promise<Instrument>
SymbolSuggestProvider.searchInstruments
SymbolSuggestProvider.searchInstruments(search: string): Promise<Instrument[]>

By given search string returns Promise of suggest result.

Parameters
search: string
Returns
Promise<Instrument[]>
SymbolSuggestProvider.onInstrumentChanged
SymbolSuggestProvider.onInstrumentChanged(symbol: string, chartId: string): void

Callback when instrument changed in specific chartId (multichart 0,1,2,3 supported).

Parameters
symbol: string
- new instrument symbol
chartId: string
- chart on which instrument was changed; if all 4 charts changed - callback will be called 4 times.
Returns
void

Additional features providers

LayoutProvider

To remember the layout of user and store it in DB as PLAIN_TEXT

LayoutProvider.createLayout
LayoutProvider.createLayout(layout: ChartLayoutNamed): Promise<string>

Creates the new layout. Returns either the ID or error.

Parameters
layout: ChartLayoutNamed
- new layout to create
Returns
Promise<string>
LayoutProvider.getLayouts
LayoutProvider.getLayouts(): Promise<ChartLayoutData>

Loads all available layouts including default one. If layout is loaded for the first time - Promise.reject() should be returned, after that updateLayouts method will be called by chart with default layout created.

Returns
Promise<ChartLayoutData>
LayoutProvider.updateLayout
LayoutProvider.updateLayout(layoutData: ChartLayoutWithId): Promise<void>

Update layout to persistence layer. No update expected from subscribeLayouts when this fn is called. The layout will be updated with different version if layout version does not match chart's version (migration will be performed).

Parameters
layoutData: ChartLayoutWithId
- layout to update
Returns
Promise<void>
LayoutProvider.updateSelectedLayout
LayoutProvider.updateSelectedLayout(id: string): Promise<void>

Updates selected layout state.

Parameters
id: string
- layout that's need to be selected
Returns
Promise<void>
LayoutProvider.updateLayoutData
LayoutProvider.updateLayoutData(layoutData: ChartLayoutData): Promise<void>

Update layout data

Parameters
layoutData: ChartLayoutData
- layout data to update
Returns
Promise<void>
LayoutProvider.deleteLayout
LayoutProvider.deleteLayout(id: string): Promise<void>

Delete layout by id from layout state.

Parameters
id: string
- layout with that id will be deleted
Returns
Promise<void>

UserDataProvider

To remember global user settings like custom colors and custom aggregation periods

UserDataProvider.getUserData
UserDataProvider.getUserData(): Promise<UserData>

Returns custom user data. If no data available, Promise.reject() is also valid return value

Returns
Promise<UserData>
UserDataProvider.setUserData
UserDataProvider.setUserData(userData: UserData): Promise<void>

Updates custom user data

Parameters
userData: UserData
Returns
Promise<void>

IndicatorsTemplateProvider

To save indicator templates for quick access

IndicatorsTemplateProvider.createTemplate
IndicatorsTemplateProvider.createTemplate(template: IndicatorTemplateNamed): Promise<string>

Creates new indicator template. Returns either an `id` of newly created template or error.

Parameters
template: IndicatorTemplateNamed
Returns
Promise<string>
IndicatorsTemplateProvider.deleteTemplate
IndicatorsTemplateProvider.deleteTemplate(id: string): Promise<void>

Deletes an indicator template by `id`.

Parameters
id: string
Returns
Promise<void>
IndicatorsTemplateProvider.updateTemplate
IndicatorsTemplateProvider.updateTemplate(template: IndicatorTemplate): Promise<void>

Updates an indicator template.

Parameters
template: IndicatorTemplate
- full {@link IndicatorTemplate} model with updates.
Returns
Promise<void>
IndicatorsTemplateProvider.getTemplates
IndicatorsTemplateProvider.getTemplates(): Promise<IndicatorTemplates>

Returns all available indicator templates for a user.

Returns
Promise<IndicatorTemplates>

ChartSharingProvider

To share chart snapshot images

ChartSharingProvider.uploadChartSnapshot
ChartSharingProvider.uploadChartSnapshot(blob: Blob, options: UploadOptions): Promise<UploadResult>

Uploads image on server and returns a link to uploaded image

Parameters
blob: Blob
image to share
options: UploadOptions
Returns
Promise<UploadResult>

DxScriptProvider

To make use of powerful dxScript language

DxScriptProvider.getScriptList
DxScriptProvider.getScriptList(): TDxScriptWithoutCode[]

Returns
TDxScriptWithoutCode[]
DxScriptProvider.fetchAllScripts
DxScriptProvider.fetchAllScripts(): Promise<TDxScriptWithoutCode[]>

Returns
Promise<TDxScriptWithoutCode[]>
DxScriptProvider.getScript
DxScriptProvider.getScript(id: string): Promise<TDxScript>

Parameters
id: string
Returns
Promise<TDxScript>
DxScriptProvider.createScript
DxScriptProvider.createScript(script: TDxScriptWithoutId): Promise<string>

Parameters
script: TDxScriptWithoutId
Returns
Promise<string>
DxScriptProvider.updateScript
DxScriptProvider.updateScript(script: TDxScriptWithoutCode): Promise<void>

Parameters
script: TDxScriptWithoutCode
Returns
Promise<void>
DxScriptProvider.deleteScript
DxScriptProvider.deleteScript(id: string): Promise<void>

Parameters
id: string
Returns
Promise<void>

OrderProvider

To integrate trading orders

OrderProvider.observeOrders
OrderProvider.observeOrders(symbol: string, dataCallback: (orders: OrderWithId[]) => void): void

Observes the order lines updates. We expect to be the full list of orders - no partial updates, for now the full list will be replaced.

Parameters
symbol: string
dataCallback: (orders: OrderWithId[]) => void
Returns
void
OrderProvider.observeExecutedOrders
OrderProvider.observeExecutedOrders(symbol: string, dataCallback: (orders: ExecutedOrder[]) => void): void

Observes the executed orders. We expect to be the full list of executed orders - no partial updates, for now the full list will be replaced.

Parameters
symbol: string
dataCallback: (orders: ExecutedOrder[]) => void
Returns
void
OrderProvider.createOrder
OrderProvider.createOrder(symbol: string, order: Order): Promise<string>

Creates new order We expect creating "id" for order inside this method If you create protection order, please don't forget to link it to original order by "protectionOrderIds" field

Parameters
symbol: string
order: Order
Returns
Promise<string>
OrderProvider.createOcoOrders
OrderProvider.createOcoOrders(symbol: string, parentOrderId: string, orders: [Order, Order]): Promise<[string, string]>

Creates new OCO orders We expect creating "ids" for the orders inside this method TODO: right now OCO orders is not fully supported by chart, so instead of orders will be passed [undefined, undefined]

Parameters
symbol: string
- current instrument's symbol
parentOrderId: string
- id of the order from which OCO orders will be created
orders: [Order, Order]
- array of two orders, which will be created as OCO orders
Returns
Promise<[string, string]>
OrderProvider.updateOrder
OrderProvider.updateOrder(symbol: string, order: OrderWithId): Promise<void>

Updates single order

Parameters
symbol: string
order: OrderWithId
Returns
Promise<void>
OrderProvider.deleteOrder
OrderProvider.deleteOrder(symbol: string, order: OrderWithId): Promise<void>

Deletes single order Please, take a look at "protectionOrdersIds" field: if order with type "original" order was deleted, protection orders should be deleted too.

Parameters
symbol: string
order: OrderWithId
Returns
Promise<void>

PositionProvider

To integrate trading positions

PositionProvider.observePositions
PositionProvider.observePositions(symbol: string, dataCallback: (positions: Position[]) => void): void

Parameters
symbol: string
dataCallback: (positions: Position[]) => void
Returns
void
PositionProvider.closePosition
PositionProvider.closePosition(symbol: string, id: string): Promise<void>

Parameters
symbol: string
id: string
Returns
Promise<void>
PositionProvider.closePositionWithOcoOrders
PositionProvider.closePositionWithOcoOrders(symbol: string, parentPositionId: string, orders: [Order, Order]): Promise<[string, string]>

Closes position with new OCO orders We expect creating "ids" for the orders inside this method TODO: right now OCO orders is not fully supported by chart, so instead of orders will be passed [undefined, undefined]

Parameters
symbol: string
- current instrument's symbol
parentPositionId: string
orders: [Order, Order]
- array of two orders, which will be created as OCO orders
Returns
Promise<[string, string]>

TradingSessionsProvider

To change the way trading sessions work

TradingSessionsProvider.generateSessions
TradingSessionsProvider.generateSessions(from: number, to: number, options: GenerateSessionOptions): Promise<TradingSession[]>

Generates trading sessions

Parameters
from: number
timestamp
to: number
timestamp
options: GenerateSessionOptions
see
Returns
Promise<TradingSession[]>
TradingSessionsProvider.getTimeZone
TradingSessionsProvider.getTimeZone(options: GenerateSessionOptions): Promise<string>

Returns timezone for specified symbol and trading hours

Parameters
options: GenerateSessionOptions
Returns
Promise<string>

EventsDataProvider

Fetches fundamental economic events

EventsDataProvider.requestEventsData
EventsDataProvider.requestEventsData(symbol: string): Promise<EventsData>

Returns events data for a symbol

Parameters
symbol: string
- symbol to get {@link EventsData} for
Returns
Promise<EventsData>

NewsDataProvider

Fetches news related to the instrument

NewsDataProvider.requestNews
NewsDataProvider.requestNews(symbol: string, options: AtLeastOne<RequestNewsOptions, "fromTime">): Promise<NewsData>

Parameters
symbol: string
options: AtLeastOne<RequestNewsOptions, "fromTime">
Returns
Promise<NewsData>

DxStudiesProvider

To add studies to the project

DxStudiesProvider.getStudies
DxStudiesProvider.getStudies(): TStudySettings[]

Returns
TStudySettings[]
DxStudiesProvider.observeStudies
DxStudiesProvider.observeStudies(): Observable<TStudySettings[]>

Returns
Observable<TStudySettings[]>
DxStudiesProvider.setStudies
DxStudiesProvider.setStudies(studies: TStudySettings[]): void

Parameters
studies: TStudySettings[]
Returns
void
DxStudiesProvider.updateStudy
DxStudiesProvider.updateStudy(study: TStudySettings): void

Parameters
study: TStudySettings
Returns
void
DxStudiesProvider.getStudy
DxStudiesProvider.getStudy(id: string): TStudySettings

Parameters
id: string
Returns
TStudySettings