GithubHelp home page GithubHelp logo

preslavrachev / cryptotrader Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 3.0 127 KB

A Web-based trading automation platform, written in Kotlin

Kotlin 100.00%
algotrading cryptocurrency kotlin spring-boot

cryptotrader's Introduction

Hi there ๐Ÿ‘‹

๐ŸŽ‰ I wrote a book about graphics programming and generative art using Go. Check it out!

I am also offering a variety of professional services in the IT and knowlegde management domains. If you want me to help your team, class, or community, feel free to get in touch.


Hi, I'm Preslav.

Preslav Rachev speaking at PyConWeb 2019

I am a software engineer with around a decade behind my back, developing data-intensive software systems and applications. I have recently started work on my independent business, focusing on education (books, courses, etc) and building my own products and services. I am also helping small teams bring their ideas to market. If you are in need of technical guidance or mentoring, feel free to get in touch.

Besides my pure developer duties, I advocate for a strong culture among software developers, indie hackers, and solopreneurs - whether through my blog, or speaking at various events. I am an avid reader, a distance runner, and a hobby musician.

Being a genuinely curious individual, I always keep an eye on challenging problems I could help solve. If yours is one of those, Iโ€™d love to hear from you. Want to get in touch? No problem! Find me on Twitter and Mastodon. Follow right away or send me a direct message. I am also on Telegram, Medium, and LinkedIn.

cryptotrader's People

Contributors

preslavrachev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cryptotrader's Issues

Repo Maintenance

This includes, but not limited to:

  • updating .gitignore
  • file management

Order creation, management and execution

Creating and executing orders is the fundamental idea behind CryptoTrader. This issue is supposed to help lay out the foundation of order management within CT.

To simplify things, persisting orders will be left for a later stage. Currently, incoming orders will be queued using a thread-safe queue, directly into a singleton session bean. As no real orders are yet to be processed, one should not be concerned about the fact that the information will get lost every time the application instance gets restarted.

Besides storing the orders in a session, their scheduled processing needs to take place. A processing unit will go over the queue, take a number of orders off for processing, distribute them across a number of processing actors, and once done, free the queue.

Requirements:

  • Order model
  • Application Session Singleton
  • Order Queue Coordinator
  • Single Order Processor

Create a simple CLI application for automated backtesting of different trading strategies

Follows: #21

The idea is to be able to easily test the effectiveness of different trading strategies. Having such an application, would allow for setting up automated backtesting, which could run overnight, or batch-wise, etc.

Note: The goal of this issue is to create simple proof-of-concept (POC), which would use the simple support-line trading strategy as an example. Further, the POC will be extended with additional parameters, and why not, Kotlin scripting capabilities.

Create a possibility for placing order pairs

Create two Web endpoints which allows for placing order pairs (BUY-SELL / SELL-BUY) at a given:

  • price (prices)
    -- if no price is proved, assume "market"
  • quote amount (for now, the same amount will be used in both the buy and the sell order)
  • spread (in percentage) - when no sell price provided
  • cancellation deadline (optional). If the second order hasn't been processed by the time of the deadline, execute it immediately at market price.
  • distinguish between test and real orders

Regardless of the endpoint, the workflow should always be the same. The first order gets placed, and only when it has been executed, does the second one get placed

Implement the support/resistance line estimator

There is a working implementation of my own support/resistance estimation algorithm still sitting in a private Jupyter notebook. The goal of this issue is to get it rewritten in Kotlin, so that it can eventually get used as part of the trading bot's strategy.

Implement fetching chart data from Poloniex

Allow for fetching charting data from Poloniex: (ex: https://poloniex.com/public?command=returnChartData&currencyPair=USDT_BTC&start=1500000000&end=1500030000&period=300)

Resulting data is an array of objects, using the following format:

[
    {
        "date": 1500000000,
        "high": 2280.00000003,
        "low": 2275.52871623,
        "open": 2279.9999978,
        "close": 2276.8080001,
        "volume": 52318.87898628,
        "quoteVolume": 22.96606718,
        "weightedAverage": 2278.0948334
    },
    {...}
    // ...
]

Create a simple scheduled trading workflow

  • create a strategy interface, with a single implementation for now (CandlestickPatternStrategy). Each trading strategy will be fed a set of input data, and will produce a decision (simple for now - either SELL, or BUY).

Trade management

Trades need to be persisted. Each trade should contain at least the following information:

  • time of execution
  • quote currency
  • base currency
  • volume (in quote currency)
  • price (at the time of execution, in base currency)

A distinction must be made between demo trades and real ones

Make the Poloniex API accept parameters

The first version of the Poloniex API was scrappily developed so that I can something functioning. Now is the time to make this baby take some parameters.

This issue will be resolved as part of resolving #13

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.