An unofficial python API for trading on the DeGiro platform, with the ability to get real time data and historical data.

Overview

DegiroAPI

An unofficial API for the trading platform Degiro written in Python with the ability to get real time data and historical data for products.

DEPRECATED!

The package degiro-connector contains the same and much more functionality. It is also maintained well. Hence, the decision to deprecate this repository.

Credits

This project is a fork from DegiroAPI by lolokrauz. It was not actively maintained anymore, hence the creation of this repository.

Added changes

Over the original repository the following things were added:

  • Pre-commit hooks.
  • Style and type checking.
  • Dependencies handled by the setup instead of the user.
  • Typing information all over the code.
  • Removed logic from __init__.
  • Renaming of function, parameters and variables to adhere to pythons snake_case.

Getting Started

Installing

pip install degiroapi

Logging in

frmo degiroapi.degiro import DeGiro
degiro = DeGiro()
degiro.login("username", "password")

Logging out

degiro.logout()

Available Functions

  • login
  • logout
  • get_data
  • search_products
  • product_info
  • transactions
  • orders
  • delete_order
  • real_time_price
  • get_stock_list
  • buy_order
  • sell_order

get_data

Printing your current cash funds:

from degiroapi.data_type import DataType
cashfunds = degiro.get_data(DataType.CASHFUNDS)
for data in cashfunds:
    print(data)

Printing your current portfolio, argument True to filter out products with a size of 0, False or no Argument to show all:

from degiroapi.data_type import DataType
portfolio = degiro.get_data(DataType.PORTFOLIO, True)
for data in portfolio:
    print(data)

search_products

Searching for a product:

products = degiro.search_products('Pfizer')
print(Product(products[0]).id)

product_info

Printing info for a specified product ID:

info = degiro.product_info(331823)
print(info["id"], info["name"], info["currency"], info["closePrice"])

transactions

Printing your transactions in a given time interval:

from datetime import datetime, timedelta

transactions = degiro.transactions(datetime(2019, 1, 1), datetime.now())
print(pretty_json(transactions))

orders

Printing your order history(the maximum timespan is 90 days) With argument True, this function only returns open orders

from datetime import datetime, timedelta

orders = degiro.orders(datetime.now() - timedelta(days=90), datetime.now())
print(pretty_json(orders))

orders = degiro.orders(datetime.now() - timedelta(days=90), datetime.now(), True)
print(pretty_json(orders))

delete_order

Deleting an open order with the orderId

orders = degiro.orders(datetime.now() - timedelta(days=1), datetime.now(), True)
degiro.delete_order(orders[0]['orderId'])
degiro.delete_order("f278d56f-eaa0-4dc7-b067-45c6b4b3d74f")

real_time_price

Get the real time price and the historical data of a stock:

from degiro.interval_type import IntervalType

products = degiro.search_products('nrz')
# Interval can be set to One_Day, One_Week, One_Month, Three_Months, Six_Months, One_Year, Three_Years, Five_Years, Max
realprice = degiro.real_time_price(Product(products[0]).id, IntervalType.One_Day)

# getting the real time price
print(realprice[0]['data']['lastPrice'])
print(pretty_json(realprice[0]['data']))

# getting historical data
print(realprice[1]['data'])

get_stock_list

Get the symbols of the S&P500 stocks:

sp5symbols = []
products = degiro.get_stock_list(14, 846)
for product in products:
    sp5symbols.append(Product(product).symbol)

Get the symbols of the german30 stocks:

daxsymbols = []
products = degiro.get_stock_list(6, 906)
for product in products:
    daxsymbols.append(Product(product).symbol)

buy_order

Placing a buy order is dependent on the order Type:

Limit order

You have to set a limit order price to which the order gets executed. arguments: order type, product id, execution time type (either 1 for "valid on a daily basis", or 3 for unlimited, size, limit(the limit price)

from degiroapi.order_type import OrderType
degiro.buy_order(OrderType.LIMIT, Product(products[0]).id, 3, 1, 30)

StopLimit order

Sets a limit order when the stoploss price is reached (not bought for more than the limit at the stop loss price): arguments: order type, product id, execution time type (either 1 for "valid on a daily basis", or 3 for "unlimited"), size, limit(the limit price), stop_loss(stop loss price)

from degiroapi.order_type import OrderType
degiro.buy_order(OrderType.STOPLIMIT, Product(products[0]).id, 3, 1, 38, 38)

Market order

Bought at the market price: arguments: order type, product id, execution time type (either 1 for "valid on a daily basis", or 3 for "unlimited"), size

from degiroapi.order_type import OrderType
degiro.buy_order(OrderType.MARKET, Product(products[0]).id, 3, 1)

StopLoss order

The stop loss price has to be higher than the current price, when current price reaches the stoploss price the order is placed: arguments: order type, product id, execution time type (either 1 for "valid on a daily basis", or 3 for "unlimited"), size

from degiroapi.order_type import OrderType
degiro.buy_order(OrderType.STOPLOSS, Product(products[0]).id, 3, 1, None, 38)

sell_order

Placing a sell order is dependent on the order Type: Equivalent to the buy orders:

from degiroapi.order_type import OrderType
degiro.sell_order(OrderType.LIMIT, Product(products[0]).id, 3, 1, 40)
from degiroapi.order_type import OrderType
degiro.sell_order(OrderType.STOPLIMIT, Product(products[0]).id, 3, 1, 37, 38)
from degiroapi.order_type import OrderType
degiro.sell_order(OrderType.MARKET, Product(products[0]).id, 3, 1)
from degiroapi.order_type import OrderType
degiro.sell_order(OrderType.STOPLOSS, Product(products[0]).id, 3, 1, None, 38)

Usage

For documented examples see examples.py

Contributing

How great this project will turn out to be, totally depends on you. If you think you have a great addition, please create a PR :). If you are unfamilar with pull requests, please take a look here.

Requirements

In order for your commit to be accepted, please install pre-commit. This will run a couple of tools to make sure the formatting of the code is good and there are no obvious mistakes.

Installing pre-commit

pre-commit install

Now everytime you will commit, it will automatically run the pre-commit hooks. If you are using Pycharm, the errors appear in git(left bottom) -> console.

You might also like...
OnTime is a small python that you set a time and on that time, app will send you notification and also play an alarm.

OnTime Always be OnTime! What is OnTime? OnTime is a small python that you set a time and on that time, app will send you notification and also play a

Stocks Trading News Alert Using Python

Stocks-Trading-News-Alert-Using-Python Ever Thought of Buying Shares of your Dream Company, When their stock price got down? But It is not possible to

Simple Python API for the Ergo Platform Explorer
Simple Python API for the Ergo Platform Explorer

Ergo is a "Resilient Platform for Contractual Money." It is designed to be a platform for applications with the main focus to provide an efficient, se

Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources.

Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources. It provides the necessary user stream data and order book data for trading in a format one would expect from a centralized exchange API.

A pairs trade is a market neutral trading strategy enabling traders to profit from virtually any market conditions.

A pairs trade is a market neutral trading strategy enabling traders to profit from virtually any market conditions. This strategy is categorized as a statistical arbitrage and convergence trading strategy.

Senator Stock Trading Tester

Senator Stock Trading Tester Program to compare stock performance of Senator's transactions vs when the sale is disclosed. Using to find if tracking S

Unofficial Python Library to communicate with SESAME 3 series products from CANDY HOUSE, Inc.

pysesame3 Unofficial Python Library to communicate with SESAME 3 series products from CANDY HOUSE, Inc. This project aims to control SESAME 3 series d

Unofficial Python implementation of the DNMF overlapping community detection algorithm

DNMF Unofficial Python implementation of the Discrete Non-negative Matrix Factorization (DNMF) overlapping community detection algorithm Paper Ye, Fan

Unofficial Valorant documentation and tools for third party developers

Valorant Third Party Toolkit This repository contains unofficial Valorant documentation and tools for third party developers. Our goal is to centraliz

Comments
  • Could not login since this week. Does everybody experience this problem?

    Could not login since this week. Does everybody experience this problem?

    You are not supposed to be here Reference: 01c39b5b6e8855f9a109602b826b8a89 Remote IP: 164.90.200.176 Identifier: 69f25a1512df4531acb32e9e6e22f3cd=python_bot Date: 11/Dec/2022:18:54:46 +0100

    opened by uptodata 0
  • Could not login

    Could not login

    While executing degiro.login():

    Exception: Could not login. Response: ...

    You are not supposed to be here

    Reference: 56a89c89a5fbe8faf38d15fbd1283c11

    Remote IP: 88.149.xxx.xxx

    Identifier: 69f25a1512df4531acb32e9e6e22f3cd=python_bot

    Date: 10/Dec/2022:12:45:47 +0100

    opened by TriposDev 0
  • real_time_price ValueError: invalid literal for int() with base 10

    real_time_price ValueError: invalid literal for int() with base 10

    The command 'real_time_price' most of the times complete the gathering of data, but sometimes comes out the this error:

    Traceback (most recent call last):

    File "C:\Users\840653\Anaconda3\lib\site-packages\degiroapi_init_.py", line 224, in real_time_price int(tmp)

    ValueError: invalid literal for int() with base 10: 'US6806652052.TRADE,E'

    If I run it again, it works and then fails with a different product id.

    opened by paulomiguelfferreira 1
  • Releases(0.1.0)
    • 0.1.0(Sep 14, 2021)

    • v0.0.5(Sep 12, 2021)

    • v0.0.4(Sep 12, 2021)

    • v0.0.3(Sep 12, 2021)

    • v0.0.2(Sep 12, 2021)

    • v0.0.1(Sep 12, 2021)

      This is a project that was based on https://github.com/lolokraus/DegiroAPI. It still contains 90% the same code.

      Changelog:

      • Add requests as dependency in setup.py. This prevents the need for users to install it themselves.
      • Add typing information.
      • Add some pre-commit hooks.
      • Add logging in with 2FA (thanks @pforero)
      • Add modify_order (thanks @adamchabin)
      • Add get account overview (thanks @pforero)
      • Add common exchange rates (thanks @blunderedbishop)
      • Add list of dividends that will be paid (thanks @Jakub-CZ)
      • Add session usage (thanks @eugep)
      • Add support for missing close price in product (thanks @Jakub-CZ)
      • Formatted readme (thanks @ahmedhamedaly)
      • Add support for multiple vwd keys (thanks @hjortlund)
      Source code(tar.gz)
      Source code(zip)
    Owner
    Jorrick Sleijster
    Data Engineer @Adyen
    Jorrick Sleijster
    pvaPy provides Python bindings for EPICS pvAccess

    PvaPy - PvAccess for Python The PvaPy package is a Python API for EPICS7. It supports both PVA and CA providers, all standard EPICS7 types (structures

    EPICS Base 25 Dec 05, 2022
    Free Vocabulary Trainer - not only for German, but any language

    Bilderraten DOWNLOAD THE EXE FILE HERE! What can you do with it? Vocabulary Trainer for any language Use your own vocabulary list No coding required!

    Hans Alemão 4 Jan 02, 2023
    A collection of examples of using cocotb for functional verification of VHDL designs with GHDL.

    At the moment, this repo is in an early state and serves as a learning tool for me. So it contains a a lot of quirks and code which can be done much better by cocotb-professionals.

    T. Meissner 7 Mar 10, 2022
    Another Provably Rare Gem Miner 💎 (for Raritygems)

    Provably Rare Gem Miner Go (for Rarity) Pull Request is strongly welcome as I don't know anything about Golang/Python/Web3. Usage Install Python 3.x i

    朱里 6 Apr 22, 2022
    Unofficial Valorant documentation and tools for third party developers

    Valorant Third Party Toolkit This repository contains unofficial Valorant documentation and tools for third party developers. Our goal is to centraliz

    Noah Kim 20 Dec 21, 2022
    Reproduction repository for the MDX 2021 Hybrid Demucs model

    Submission This is the submission for MDX 2021 Track A, for Track B go to the track_b branch. Submission Summary Submission ID: 151378 Submitter: defo

    Alexandre Défossez 62 Dec 18, 2022
    Tucan Discord Token Generator - Remastered

    TucanGEN-SRC Tucan Discord Token Generator - Remastered Tucan source made better by me. -- idk if it works anymore Includes: hCaptcha Bypass Automatic

    Vast 8 Nov 04, 2022
    Slientruss3d : Python for stable truss analysis tool

    slientruss3d : Python for stable truss analysis tool Desciption slientruss3d is a python package which can solve the resistances, internal forces and

    3 Dec 26, 2022
    Automates the fixing of problems reported by yamllint by parsing its output

    yamlfixer yamlfixer automates the fixing of problems reported by yamllint by parsing its output. Usage This software automatically fixes some errors a

    OPT Nouvelle Caledonie 26 Dec 26, 2022
    A docker container (Docker Desktop) for a simple python Web app few unit tested

    Short web app using Flask, tested with unittest on making massive requests, responses of the website, containerized

    Omar 1 Dec 13, 2021
    pyinsim is a InSim module for the Python programming language.

    PYINSIM pyinsim is a InSim module for the Python programming language. It creates socket connection with LFS and provides many classes, functions and

    2 May 12, 2022
    Snack Rice - A Rice University servery finder, customized for your needs!

    Snack Rice - A Rice University servery finder, customized for your needs!

    Aidan Gerber 3 Sep 25, 2022
    K2HASH Python library - NoSQL Key Value Store(KVS) library

    k2hash_python Overview k2hash_python is an official python driver for k2hash. Install Firstly you must install the k2hash shared library: curl -o- htt

    Yahoo! JAPAN 3 Oct 19, 2022
    WordlistPasswordGenerator - Shuhfab Basheer

    WordlistPasswordGenerator - Shuhfab Basheer Python wordlist generator MAINTAINER

    1 Dec 31, 2021
    This repository is an archive of emails that are sent by the awesome Quincy Larson every week.

    Awesome Quincy Larson Email Archive This repository is an archive of emails that are sent by the awesome Quincy Larson every week. If you fi

    Sourabh Joshi 912 Jan 05, 2023
    Python Freecell Solver

    freecell Python Freecell Solver Very early version right now. You can pick a board by changing the file path in freecell.py If you want to play a game

    Ben Kaufman 1 Nov 26, 2021
    A module to prevent invites and joins to Matrix rooms by checking the involved server(s)' domain.

    Synapse Domain Rule Checker A module to prevent invites and joins to Matrix rooms by checking the involved server(s)' domain. Installation From the vi

    matrix.org 4 Oct 24, 2022
    PIP Manager written in python Tkinter

    PIP Manager About PIP Manager is designed to make Python Package handling easier by just a click of a button!! Available Features Installing packages

    Will Payne 9 Dec 09, 2022
    Demo repository for Saltconf21 talk - Testing strategies for Salt states

    Saltconf21 testing strategies Demonstration repository for my Saltconf21 talk "Strategies for testing Salt states" Talk recording Slides and demos Get

    Barney Sowood 3 Mar 31, 2022
    Repo contains Python Code Reference to learn Python in a week, It also contains Machine Learning Algorithms and some examples for Practice, Also contains MySql, Tableau etc

    DataScience_ML_and_Python Repo contains Python Code Reference to learn Python in a week, It also contains Machine Learning Algorithms and some example

    Meerabo D Shah 1 Jan 17, 2022