times[curIndex]-(MathMod(times[curIndex]/60,utils.periodIndexToPeriod(i)))*60
for efficiency and readability, simplifytimes[curIndex]- MathMod(times[curIndex],utils.periodIndexToPeriod(i)*60);
- for efficiency and readability and to avoid unnecessary function calls, I'd replace the functions with an array and save results
int utils.periodIndexToPeriod = { PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1, 20, 50 }; for(int i=curIndex+1; i<MAX; i++) int period = utils.periodIndexToPeriod[i]; seconds = period*60, time0 = times[curIndex] - MathMod(times[curIndex],seconds); if (times[i] != time0) { times[i] = time0; onBar(period); } }
- And avoid unnecessary function calls with the simpler
times[curIndex] = Time[0]; // = iTime(NULL,0,0);
Hi.
thx for this ideas, ur right.
1. Accessing the arrays is more faster than use switch - case element. (in this example 4 times), some test:
start = GetTickCount(); for(test=0; test<10000000; test++) for(i=0; i<MAX; i++) int value1 = utils.periodIndexToPeriod[i]; log("Elapsed : " + (GetTickCount()-start)); // 2100 ms start = GetTickCount(); for(test=0; test<10000000; test++) for(i=0; i<MAX; i++) int value2 = utils2.periodIndexToPeriod(i); log("Elapsed : " + (GetTickCount()-start)); // 8000 ms
but how accsess this 10.000.000*MAX in a row? :D and i think much more readble switch - case options beacuse it is more similar the other rutins. Easily readable by someone who not a coder.
2. use local variable in loop save some times but not so much i think so test it: in half year backtest, where do some loop in onBar event, ur code done in 6006ms, my 5990ms on ~ 72Kbar event so its same
3. Time[0] / iTime(NULL,0,0) does not affect the result.
So i change the loop code for ur versions (more readable), but not change the array access rutin. btw thx a lot, i swear i will not publish a code, after 2 am, when i am too tired :P
times[curIndex]-(MathMod(times[curIndex]/60,utils.periodIndexToPeriod(i)))*60
for efficiency and readability, simplifytimes[curIndex]- MathMod(times[curIndex],utils.periodIndexToPeriod(i)*60);
- for efficiency and readability and to avoid unnecessary function calls, I'd replace the functions with an array and save results
int utils.periodIndexToPeriod = { PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1, 20, 50 }; for(int i=curIndex+1; i<MAX; i++) int period = utils.periodIndexToPeriod[i]; seconds = period*60, time0 = times[curIndex] - MathMod(times[curIndex],seconds); if (times[i] != time0) { times[i] = time0; onBar(period); } }
- And avoid unnecessary function calls with the simpler
times[curIndex] = Time[0]; // = iTime(NULL,0,0);
Thanks for this I am trying with custom timerames, if I set it up for a 3 hour candle for example eg 180 minutes. When does this time start to count? eg form midnight every 3 hours or does it depend when the indicatoe is placed on the chart?
thanks again
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
New bar event in EA:
Author: Robert Simon