@nitro I agree that off the shelf software just doesn't cut it. I get frustrated how some software forces you down a dead-end retail trading approach. That is why I have also chosen to roll-my own from scratch.
I trade a mixture timeframes,
- short term - trades last from seconds to hours
- medium term - trades last from days to months
- long term - trades last from months to years (my pension
Each of the above have very different technology requirements. The short term is the most challenging and requires more advanced programming techniques to handle more advanced requirements, such as optimal legging in techniques to get good executions, etc.
However, in all cases the technology stack is the same,
Mac OSx & Linux - no way am I running on Windows. My production trading system runs on Linux and I do my research on Mac.
Java - highly optimised, multi-threaded concurrent programming techniques allow me to monitor and trade multiple assets in real-time. I run concurrent back-tests which crunch data, i.e. co-integration tests, genetic-algorithm based optimisations, etc. All done using Java, broken into micro-services which can be deployed and run individually and thus are horizontally scalable should I need to add more capacity. I run locally but am thinking of moving to Docker so I can scale on the cloud.
For data storage I use hand rolled persistence using memory-mapped files, which are very fast and suit my requirements.
For the front end UI - I'm currently moving to a web based front end developed in JavaScript. Some may say it isn't fast enough, but I disagree, web based front ends are the way to go for custom visualisation of data. I use it for research and monitoring purposes only, all of the actual trading is essentially automated in the back-end.
Like
@nitro mentioned, data is of utmost importance, if it's not correctly aligned, your tests are invalid. You have to check and double-check your data is correct.
I check data against multiple sources - free and paid. I filter real-time data and drop ticks that fail filtering. I have tests and validation built into the software at every stage to verify and check inputs and outputs, I've caught so many bugs like this. I use unit testing and integration testing to ensure quality. I'm a seasoned professional software developer with expertise in real-time Java programming for banks in the City of London. Its not all plain sailing - I've had a few mishaps - once a bug triggered multiple trades! Took me months to recover from that.
Edit -
IAH - LOL
The name of my system is SUCKS - Scalable Utility Completion Keying System
The next version will be called REALLY SUCKS V2.0