My platform was written for speed and flexibility. I want to be able to write anything I can dream up. That said, it's so fast that I have never bothered to optimize anything.
I switched to Java from C++ in 1999. I would not recommend C/C++ for this type of project. C# (CLR languages) and Java (JVM languages) unless you already program in C/C++. Very little difference in speed. The real use for C is in modifying the Linux kernel for HFT.
Like you, I put the data in a different format and distribute it to where it is needed. The only data checking I do is delete any trade data with a total daily volume less than the previous trade. I've never checked to see if this does anything, but my goal is to delete any trades reported late (they are not actionable).
How is your data stored that it is not all in memory? I just keep what I need in memory. Very fast. You can store an awful lot of doubles and longs in a megabyte of memory and access can be very fast. Also, some programs and libraries require you to put your data into a specific data structure; very bad design. I think TA-Lib was this way and maybe AmiBroker. Anyway, my data is not in their format, and no way I can put the data in their format every time I want to do a calculation and expect it to be fast.
Many years ago a friend and I implemented the same system. Me on my platform and him on AmiBroker (a very nice program which I have bought several licenses for over the years). Since AmiBroker was not built for real-time trading his code did calculations every 1 to 3 minutes, depending on how long the calculations took. I suspect that his code was single-threaded. Throwing all that work at it at one time took a while. Spreading the work out over time and threads makes a big difference.
Filtering the symbol list:
Average daily volume
Price above a certain level
Stock only
No REITs
ETF only (leveraged / not leveraged)
Industry Groups (haven't actually done this)
Different systems may be best with different symbol lists
Writing your own code will allow you to do whatever you want, but it is a lot of work.
Take care and best of luck.
I switched to Java from C++ in 1999. I would not recommend C/C++ for this type of project. C# (CLR languages) and Java (JVM languages) unless you already program in C/C++. Very little difference in speed. The real use for C is in modifying the Linux kernel for HFT.
Like you, I put the data in a different format and distribute it to where it is needed. The only data checking I do is delete any trade data with a total daily volume less than the previous trade. I've never checked to see if this does anything, but my goal is to delete any trades reported late (they are not actionable).
How is your data stored that it is not all in memory? I just keep what I need in memory. Very fast. You can store an awful lot of doubles and longs in a megabyte of memory and access can be very fast. Also, some programs and libraries require you to put your data into a specific data structure; very bad design. I think TA-Lib was this way and maybe AmiBroker. Anyway, my data is not in their format, and no way I can put the data in their format every time I want to do a calculation and expect it to be fast.
Many years ago a friend and I implemented the same system. Me on my platform and him on AmiBroker (a very nice program which I have bought several licenses for over the years). Since AmiBroker was not built for real-time trading his code did calculations every 1 to 3 minutes, depending on how long the calculations took. I suspect that his code was single-threaded. Throwing all that work at it at one time took a while. Spreading the work out over time and threads makes a big difference.
Filtering the symbol list:
Average daily volume
Price above a certain level
Stock only
No REITs
ETF only (leveraged / not leveraged)
Industry Groups (haven't actually done this)
Different systems may be best with different symbol lists
Writing your own code will allow you to do whatever you want, but it is a lot of work.
Take care and best of luck.