I don't know your algorithm, but I doubt that you need to do all that work for each tick. Usually (and I'm making presumptions here) it's just on bar higher highs (& vv) that you need to do calcs.
A) So, when computation is 'expensive' I sometimes try
bool doCalcs = false; static double HBar; if(IsANewBar()) { HBar = -1.0; } if(High[ix] > HBar) { HBar = High[ix]; doCalcs = true; } if(docalcs) { // do heaps of stuff }
(just typed, not compiled or checked .. and just High part done)
B) At first tick of bar, work out (by back-calculation) what High (& Low) is needed to exceed to trigger Order action, then just check for H (& L) exceeding that
A) So, when computation is 'expensive' I sometimes try
//+------------------------------------------------------------------+ //| Skip useless ticks | //+------------------------------------------------------------------+ double CA.below, CA.above=0; // Export to start void CallAgain(double when){ if (when>=Bid && CA.above > when) CA.above = when; if (when<=Bid && CA.below < when) CA.below = when; return; } int start(){ static datetime Time0; #define INF 0x7FFFFFFF if (Time0 != Time[0] || Bid < CA.below || Bid > CA.above){ // Important CA.below = 0; CA.above = INF; Time0 = Time[0]; ... double delta = (Bid-pattern.trigger)*DIR; // Want to open if (delta <= 0 // Still below. || delta > 0.5*atr){ // Gapped above. oo.OP = pattern.trigger; // Show line CallAgain(oo.OP); return; }
I don't know your algorithm, but I doubt that you need to do all that work for each tick. Usually (and I'm making presumptions here) it's just on bar higher highs (& vv) that you need to do calcs.
A) So, when computation is 'expensive' I sometimes try
(just typed, not compiled or checked .. and just High part done)
B) At first tick of bar, work out (by back-calculation) what High (& Low) is needed to exceed to trigger Order action, then just check for H (& L) exceeding that
Thank you for your post and info. I will share your post with my programmer and i hope this will be helpful for him to do it.
Thanks very much. and i will update him about what he has thought.
McGene
Hi,
I am developing an ATS that would require simultaneous calculations ( 1000-10000 simple to moderate mathematical operations per tick). I have no programmatic knowledge for now and i am worry this simultaneous issue might provide a source of instability in the code and delay the execution.
However, i am working with a professional MQL4 programmer but later i am going to migrate to higher language.
Any suggestions is highly appreciated.
Thanks
McGene
I have no programming knowledge as i am an EA developer and trader. However, i worry that if i have thousands of math and quantitative operations are running on every tick, this might slow down the algo or disturb the execution system. This is my primary worry for now.. However, i know mql4 is not that strong language and i might migrate on time to higher " java or C++
", also, i am going on time to migrate to higher tech hardware using GPU. It might be the best solution for me on time.. I am still stick with mql4 till now and ready/open for suggestions.. Thanks all
A GPU will only affect graphics speed - not hard-core mathematical algorithm speed. And if your CPU utilisation does not even get close to 100% (well, 100% of one core), don't worry about code optimising.
I'm an old-timer from way back (writing IBM Mainframe Assembler in the 70's) and we would work out CPU cycles for each function. Nowadays, getting a faster computer is usually cheaper than people spending time improving code.
Having said that, some of my code has been CPU-intensive & some simple tricks (as stated above) can reduce CPU usage by a factor of 10 or more with little effort.
Another technique for, say, non-linear continuous algorithms is to calc the INITIAL value on new bar, then use SLOPE APPROXIMATION to calc values for each tick.
"Premature optimization is the root of all evil" -- Donald Knuth
In other words: Don't think about optimization now. Program your algorithm and make it work. Make it fulfill all specs and pass all tests. This has to have the highest priority until its working correctly as desired. THEN (after it is complete and working) you can start thinking about optimizing/rewriting individual parts of it (the parts that impact performance most) if needed at all.
Your programmer should know what he is doing. Just let him do his job. Don't complicate it unnecessarily and don't frustrate your programmer by trying to tell him how to write a program. He is called "programmer" because he should know all this already.
Thank you for all here
Really appreciate your posts and information
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I am developing an ATS that would require simultaneous calculations ( 1000-10000 simple to moderate mathematical operations per tick). I have no programmatic knowledge for now and i am worry this simultaneous issue might provide a source of instability in the code and delay the execution.
However, i am working with a professional MQL4 programmer but later i am going to migrate to higher language.
Any suggestions is highly appreciated.
Thanks
McGene