Skip to main content

XTB trading platform client

Project description

XTBClient

X-Trade Brokers (XTB) trading platform client, supporting both asynchronous and synchronous clients with typed classes.

A python library supporting both asyncio and "normal" clients for X-Trade Brokers (XTB) trading using websockets.

It will use either websockets if using the async XTB client or websocket-client if using the sync XTB client

Installing

To install the client(s) just run pip install xtb-client. Or, better yet, using poetry run poetry add xtb-client.

Getting started

Both clients support context manager notation - with or async with statement.

Async client

If you call the API too quicky the server may disconnect you so I've added some sleep calls to simulate waiting a bit.

import asyncio
import datetime
import logging
import sys

from XTBClient.client import XTBAsyncClient
from XTBClient.models.models import ConnectionMode, Period, Transaction, TradeOperation, TradeType
from XTBClient.models.requests import ChartLastInfoRecord, ChartRangeRecord

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)


async def async_client_test(user, password):
    logger = logging.getLogger("async client")

    async with XTBAsyncClient(user, password, mode=ConnectionMode.DEMO) as client:
        start = datetime.datetime.now()
        future = start.replace(year=start.year + 1)
        start = start.replace(year=start.year - 1)

        transaction = Transaction(
            cmd=TradeOperation.Buy,
            custom_comment="Testing custom comment",
            expiration=future,
            offset=0,
            order=0,
            price=1.12,
            sl=0.0,
            symbol="EURUSD",
            tp=0.0,
            type=TradeType.Open,
            volume=1
        )

        id = await client.trade_transaction(transaction)
        logger.info(f"Initiated transaction: {id}")

        status = await client.transaction_status(id)
        logger.info(f"Trade transaction status: {status}")

        chart_info = await client.get_chart_last_request(ChartLastInfoRecord(Period.PERIOD_M5, datetime.datetime.now(), "EURPLN"))
        logger.info(f"Last chart info: {chart_info}")

        chart_info = await client.get_chart_range_request(
            ChartRangeRecord(Period.PERIOD_M5, datetime.datetime.utcnow(), datetime.datetime.now(), "EURPLN", ticks=5))
        logger.info(f"Chart range info: {chart_info}")

        trades = await client.get_trades(False)
        logger.info(f"All trades: {trades}")

        trades = await client.get_trades_history(start=start, end=datetime.datetime.now())
        logger.info(f"All trades history: {trades}")

        await asyncio.sleep(1)

        eurpln = await client.get_symbol("EURPLN")
        logger.info(f"EURO -> PLN: {eurpln}")

        current_user = await client.get_current_user_data()
        logger.info(f"Current user: {current_user}")

        calendars = await client.get_calendar()
        logger.info(f"All calendars: {calendars}")

        await asyncio.sleep(1)

        symbols = await client.get_all_symbols()
        logger.info(f"All symbols: {symbols}")


asyncio.get_event_loop().run_until_complete(async_client_test("user", "password"))

Sync (normal) client

If you call the API too quicky the server may disconnect you so I've added some sleep calls to simulate waiting a bit.

import datetime
import logging
import sys
import time

from XTBClient.models.models import ConnectionMode, Period, Transaction, TradeOperation, TradeType
from XTBClient.models.requests import ChartLastInfoRecord, ChartRangeRecord
from XTBClient.client.xtb import XTBSyncClient

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)


def sync_client_test(user, password):
    logger = logging.getLogger("sync client")

    with XTBSyncClient(user, password, mode=ConnectionMode.DEMO, proxy=None) as client:
        start = datetime.datetime.now()
        future = start.replace(year=start.year + 1)
        start = start.replace(year=start.year - 1)

        transaction = Transaction(
            cmd=TradeOperation.Buy,
            custom_comment="Testing custom comment",
            expiration=future,
            offset=0,
            order=0,
            price=1.12,
            sl=0.0,
            symbol="EURUSD",
            tp=0.0,
            type=TradeType.Open,
            volume=1
        )

        id = client.trade_transaction(transaction)
        logger.info(f"Initiated transaction: {id}")

        status = client.transaction_status(id)
        logger.info(f"Trade transaction status: {status}")

        chart_info = client.get_chart_last_request(ChartLastInfoRecord(Period.PERIOD_M5, datetime.datetime.now(), "EURPLN"))
        logger.info(f"Last chart info: {chart_info}")

        chart_info = client.get_chart_range_request(
            ChartRangeRecord(Period.PERIOD_M5, datetime.datetime.utcnow(), datetime.datetime.now(), "EURPLN", ticks=5))
        logger.info(f"Chart range info: {chart_info}")

        trades = client.get_trades(False)
        logger.info(f"All trades: {trades}")

        trades = client.get_trades_history(start=start, end=datetime.datetime.now())
        logger.info(f"All trades history: {trades}")

        time.sleep(1)

        eurpln = client.get_symbol("EURPLN")
        logger.info(f"EURO -> PLN: {eurpln}")

        current_user = client.get_current_user_data()
        logger.info(f"Current user: {current_user}")

        calendars = client.get_calendar()
        logger.info(f"All calendars: {calendars}")

        time.sleep(1)

        symbols = client.get_all_symbols()
        logger.info(f"All symbols: {symbols}")


sync_client_test("user", "password")

API and usage

Since this is Python you can browse through the code to find out what methods are available and how to use them. All methods and classes should have typing hints so you can tell what each method expects as parameters.

All return types from the XTB API is typed, there's no dictionaries with unknown key/value pairs or anything similar.

Working on the code

This project uses poetry for dependency management as well as for it's publishing functionality. To get started all you need to do is:

  • open a command prompt
  • clone the repository
  • browse to the newly cloned repository in the already opened command prompt
  • run poetry install

Work in progress

  • Streaming operations like getCandles and others are missing
  • Add missing normal API methods
  • More unit tests could be added
  • Better documentation
  • Added library to PyPi repository

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xtbclient-0.1.1.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

xtbclient-0.1.1-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

Details for the file xtbclient-0.1.1.tar.gz.

File metadata

  • Download URL: xtbclient-0.1.1.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.11.2 Windows/10

File hashes

Hashes for xtbclient-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7c9a2b80b81405c17051e978f25c4cce1b0c334474e686d3212dcb6098b0ee75
MD5 9788d85c6bcfa57acc1444cc81707826
BLAKE2b-256 4a876b5b8e3b4b55aba3b3b368ddac4fc18e10a1ec13a5b8232f7e7685924521

See more details on using hashes here.

File details

Details for the file xtbclient-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: xtbclient-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.11.2 Windows/10

File hashes

Hashes for xtbclient-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0c4d17338779c15e76db5aacebd4e11e45c3d91e4094543b111cf4a0c3d57896
MD5 9546b78f13c0dcd33e7969b2c0d21487
BLAKE2b-256 1eafd301659f288d92141587a6036ae4bb10d7246146d1815605bc97f0c2e02d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page