Dear community,
I'm currently using my spare time to develop a charts/trading suite. The reason is that I'm not at all satisfied with the trading experience and the amount of information the charts on the exchanges present. There are way more possibilities and I have no idea why they aren't used. So I started developing (at the beginning only for myself) and from time to time, I was talking about my project on several threads and in IRC chats, and I got quite some resonance. So I considered to continue developing with the ability to let users also use this project in mind, and to not miss the point and waste time into coding something noone wants to use, I wanted to share my idea and ask for some feedback. The project is in a quite early stage of development, so there is room for ideas and improvements.
Some things about meI live in Germany and I'm a web developer by profession. For the most part, I'm making TYPO3 websites for our customers (for the Americans and other people who maybe don't know TYPO3: it's an open source enterprise CMS - content management system - like Drupal, Wordpress and so on, very extensible and with a very, very active community) and I have quite a lot of experience in
- PHP development (mostly developing TYPO3 extensions, also TYPO3.Flow, which is a framework... to explain what TYPO3.Flow is, i often say "TYPO3.Flow is to PHP what Rails is to Ruby"), OOP/MVC
- JavaScript magic (plain JavaScript as well as jQuery, jQueryUI, mootools, ExtJS, Sencha Touch, ...)
- GNU/Linux server administration, shell magic, ...
- some other fields of web development which do not really matter here
I'm working for a small web agency in Karlsruhe since several years now, being in home office due to me and my wife moving places at the end of last year (about the same time as the last - up to now biggest - Bitcoin price run, heh). My spare time goes to a big extend to the development of private projects like this one.
Planned features of the applicationNewsletter (see an image of the current version
here):
- different subscribable versions of a newsletter will be available
- newsletters will cover various exchanges, beginning with Bittrex (implementation almost complete) and others following
- newsletter contains an overview about how which coins perform
- historical data is displayed for the last ~25 days
- more detailed information and charts can be found on the website
Technical analysis:
- storage of historical data (not sure about how much data there will be stored... Cryptsy e.g. has way more than 100 coins listed)
- implementation of different subscribable trading strategies with different levels of complexity - suggestions are welcome
- notifications (e.g. email) if a trading signal (e.g. moving averages crossing each other) occured
- configurable JavaScript based charts displaying excessive information which we don't see on the exchanges (no idea why they don't implement more features... they have the charts, they have the data - it's easy!)
Market analysis: displaying information (with nice charts, graphs and diagrams) we don't see on the exchanges, such as
- relations between time, volume and price movements to detect - if that's possible at all, I'll have to investigate this - recurring events
- major price movements of certain coins: which coins have gained/lost unproportionally much value in a certain amount of time?
Trading (Live/Auto):
Update 2015/01/20: Focus of trading features has ceased a bit and shifted towards charting and TA. For that reason, the trading features are planned for a later version, if any.- trading on the exchanges with improved user interface (although there is still one problem to solve: I do not want to handle users' trading API keys; although I'm quite experienced in handling GNU/Linux servers, I'm convinced that there is always someone with better skills to hijack the server, and I don't ever want to be in the need to tell people why their accounts got wiped... maybe I find a solution to outsource the API connection into the client, we'll see)
- adding buy/sell orders: single order or by setting an amount of orders to place as well as a range, so the intermediate orders between min and max value are calculated automatically
- in the table of own buy/sell orders, there are buttons to cancel and edit (remove and re-add) single orders as well as to remove all own orders
- "Auto Pump/Dump" feature (sorry, didn't come up with a better name yet): either set a slider for the target value (needed amount of cryptocurrency is being calculated and displayed prior to execution) or enter an amount to invest into buying/selling (the target price is being displayed)
- fill gaps on buy/sell side when pumping/dumping the market
- option to remove all buy/sell orders before pumping/dumping the market
- overview of current buy/sell orders on the market
- nice chart of current price development, optionally with trend indicators
- automated trading using a bot with different trading strategies
Account settings
Of course, there will be account settings with options on which trading strategies to subscribe to, the type of notification used when certain events (buy/sell signals etc) occur.
General information about the project - the backendThe backend is a TYPO3.Flow application which is totally separate from the frontend. This brings some benefits: as TYPO3.Flow can be easily instructed to deliver JSON data output, it's easy to create APIs which can be used by totally independent frontends (although it sounds funny: creating an API for an application which uses APIs of exchanges).
All the logic is handled by the backend:
- reading data from database
- writing new data to the database
- querying APIs of the different exchanges
General information about the project - the frontendThe frontend is provided by a separate TYPO3.Flow application which connects to the backend. Its main purpose is to display data (plus some JavaScript calculations which are more performant to be executed client-side instead of server-side). For doing so, I purchased a license for a really powerful template called "SmartAdmin". It's normally used for implementation in backends, but depending on the view - when development has progressed so far that users can log in to the service - it actually is a backend.
It provides (amongst others) the following features:
- UI components based on twitter bootstrap and jQueryUI
- a charting/plotting library (for our beloved candlestick charts, I had to implement another library called "AmCharts", as the included library "flot" had a separate plugin for candlesticks, but I was not satisfied with that one... AmCharts is free for personal use; however, when the application goes online, I have to purchase a license for some 140 or 280 $ (depending on what features are used), but as AmCharts is really great, I'm more than willing to pay the price
- the whole frontend layout
SmartAdmin is a great template. However, it took a lot of time to actually wrap my head around it, as it provides a ton of sample files with ui elements of all kinds, each with up to more than a thousand lines of code.
Goals achieved so far: backend- setup of new TYPO3.Flow application "BitShit.Backend" with models required to store historical data (atm for only one coin, as I'm still in development phase and I have no need of other coins, yet)
- implementation of the complete cryptsy API (I just saw recently that someone already coded a library for that, heh)
- basic implementation of some simple/complex trading strategies based on historical data (calculated in the backend because historical data is completely handled by the backend/fetched from database... trading strategies used on short term/live data will probably be calculated in the frontend, as the data comes from the exchanges' APIs directly)
- usage of PHP PECL package "trader" for trend indicators etc
Goals achieved so far: frontend- setup of new TYPO3.Flow application "BitShit.Frontend"
- integration of "SmartAdmin" template for UI elements
- found and implemented nice candlestick-capable JavaScript charting/plotting library "AmCharts"
- calculation of several trend indicators (for the moment it's just SMAs, more to follow)
- basic version of the "Technical Analysis" menu point (mainly just a chart for the moment with trend indicators for use with a certain trading strategy I implemented for use with historical data)
- built view "Trading (Auto/Live) -> Cryptsy" with a chart representing current market data (also for a single coin for now), adding of new buy/sell orders (amount of orders as well as range (for multiple orders) customizable), output of lists of current own open buy/sell orders with buttons to edit/cancel, option to "pump/dump" the market with options to fill gaps created in orderbook as well as to remove all own buy/sell orders before unloading coins on the market, and an overview of current open buy/sell orders on the market (all those points are pure frontend work (besides the chart displaying real data), the features have yet to be connected to the backend/exchanges APIs)
- built a basic version of the user settings screen
- built a basic version of the newsletter
- implemented cryptoId.info's API to monitor coins/wallets for large movements
ScreenshotsNewsletter (2015-01-10):
Technical Analysis:
Trading (Live/Auto):
Settings / Notifications:
Top Coins / Bittrex
(added 2014-10-13, will contain more exchanges for direct comparison as well as historical data)That's it for now. Main reason for posting a project which is in development was because I mentioned it in another thread and I got so much positive resonance that I thought that I take the opportunity and open a separate thread, so the development of current features can be discussed. Also, if some good ideas about features people wish to see/use arise, I'd consider to implement them.
I'll keep this posting updated with current development progress, and if you have questions, critics (constructive, please) or wish to discuss anything, please feel free to post your reply.
.edit:
At the moment, I'm developing locally, but soon I'll take the time to remove all private data from the source and put the application on my server.
.edit2:
Fixed some grammar and typos.
Next steps:2014-09-15:
- Implemented on 2014-09-18:
Selection of trading pair in the "Trading (Live/Auto)" view, as currently, there is only one coin being used
2014-09-19:
- Improvements for handling API data (got some issues with script timeouts due to the amount of data being loaded and processed)
- Storage of historical data in the database (on a hourly basis) for all coins (Cryptsy)
- Setup of the application on my server, so interested users can have a look (2014-10-13: suspended for now, as I have a lot of features to develop before putting it live… so, when it goes live, it'll hopefully be more usable than a half-ready product)