View Source XtbClient

Elixir CI

Elixir client for the XTB trading platform.

Library provides simple client written as GenServer intended to be started as a process to communicate with XTB server.

As all regular OTP processes, the process for XtbClient.Connection could be supervised, registered locally or in distributed environment, monitored, traced, linked to other processes etc.

installation

Installation

The package can be installed by adding xtb_client_ex to your list of dependencies in mix.exs:

def deps do
  [
    {:xtb_client_ex, "~> 0.1.0"}
  ]
end

usage

Usage

Find more examples in the folder examples/.

starting-client-connection

Starting client connection

params = %{app_name: "XtbClient", type: :demo, url: "wss://ws.xtb.com", user: "<<USER_ID>>", password: "<<PASSWORD>>"}

{:ok, pid} = XtbClient.Connection.start_link(params)

subscribe-to-tick-prices

Subscribe to tick prices

Code.require_file("./examples/stream_listener.ex")

params = %{app_name: "XtbClient", type: :demo, url: "wss://ws.xtb.com", user: "<<USER_ID>>", password: "<<PASSWORD>>"}
{:ok, cpid} = XtbClient.Connection.start_link(params)

args = %{symbol: "LITECOIN"}
query = XtbClient.Messages.Quotations.Query.new(args)
{:ok, litecoin} = StreamListener.start_link(%{"name" => args.symbol})
XtbClient.Connection.subscribe_get_tick_prices(cpid, litecoin, query)

Listener handle info: {:ok,
 %XtbClient.Messages.TickPrice{
   ask: 131.45,
   ask_volume: 250,
   bid: 130.46,
   bid_volume: 250,
   exe_mode: nil,
   high: 132.38,
   level: 3,
   low: 127.94,
   quote_id: :five,
   spread_raw: 0.99,
   spread_table: 0.99,
   symbol: "LITECOIN",
   timestamp: ~U[2022-03-28 21:31:21.126Z]
 }}
Listener handle info: {:ok,
 %XtbClient.Messages.TickPrice{
   ask: 131.54,
   ask_volume: 500,
   bid: 130.39,
   bid_volume: 500,
   exe_mode: nil,
   high: 132.38,
   level: 4,
   low: 127.94,
   quote_id: :five,
   spread_raw: 1.15,
   spread_table: 1.15,
   symbol: "LITECOIN",
   timestamp: ~U[2022-03-28 21:31:21.126Z]
 }}
 ...

subscribe-to-candles

Subscribe to candles

Code.require_file("./examples/stream_listener.ex")

params = %{app_name: "XtbClient", type: :demo, url: "wss://ws.xtb.com", user: "<<USER_ID>>", password: "<<PASSWORD>>"}
{:ok, cpid} = XtbClient.Connection.start_link(params)

args = "LITECOIN"
query = XtbClient.Messages.Candles.Query.new(args)
{:ok, litecoin} = StreamListener.start_link(%{"name" => args})
XtbClient.Connection.subscribe_get_candles(cpid, litecoin, query)

Listener handle info: {:ok,
 %XtbClient.Messages.Candle{
   close: 130.69,
   ctm: ~U[2022-03-28 21:29:00.000Z],
   ctm_string: "Mar 28, 2022, 11:29:00 PM",
   high: 130.7,
   low: 130.63,
   open: 130.64,
   quote_id: :five,
   symbol: "LITECOIN",
   vol: 257.0
 }}
Listener handle info: {:ok,
 %XtbClient.Messages.Candle{
   close: 130.65,
   ctm: ~U[2022-03-28 21:30:00.000Z],
   ctm_string: "Mar 28, 2022, 11:30:00 PM",
   high: 130.7,
   low: 130.64,
   open: 130.68,
   quote_id: :five,
   symbol: "LITECOIN",
   vol: 216.0
 }}
 ...