View Source XtbClient
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
}}
...