Can indicator be 'kicked' into life other than by new data receipt or (I assume by timed MT rescheduling) ??

 
Environment

Have indicator written by another, that runs and plots objects on rightmost/new data bars when certain conditions are satisfied.

I modified indicator so that it has virtual/sliding window concept using MQL4 functions: FirstVisibleBar(), BarsPerWindow().
When the plotting code used to see 0[...] as rightmost bar and Bars[. ..] as leftmost bar, I altered to winRight and winLeft respectively.

Code in start() sets the two vars up:

winLeft = FirstVisibleBar(); //wherever code had "Bars[...]" is now "winLeft[...]"
winRight = winLeft - BarsPerWindow() + 1; //wherever code had "0[...]" is now "winRight[...]"

where [...] is optional, may/mayNot be present incode - for example "Bars-20" or "0+i" or just "Bars" or "0" etc.

This has succeeded getting indicator to plot rightmost 'side' of any window being shown - regardless of bar numbering.
This 'fools' the code into thinking that the rightmost side of the window being shown is the actual/live rightmost window with newest data bars.

Why I do this?
- So can practice/dryRun/learn/study the plotted objects and understand why plotted/. .. IE, have some 'thinking time'
- any bar can now be on the rightside of a window and the code sees it as the latest/newest databar from the dataserver and if correct conditions will generate plots.
- This is great for simulation and getting good practice using the indicator and seeing the setups it plots. When I live trade, this practice pays big time because of all the learn time I can put in...
- Original indicator replots objects on rightmost data window each time start() entered. This means that previous objects I am looking at may be removed/updated - this not good for study/thinking,
so I make mods as described above causing replots to stay in current window - wherever that may be mapped to on symbol dataset.


Issue

Action = Window is moved by scrolling data bars via: pageKeys, arrowKeys or by dragging screen left/right with mouse.

Result =
Indicator not entered until some event takes place causing MT to call start().
This means objects do not plot in new window or if wait around staring at screen eventually after variable delay - start() is called again and plots are seen.

I have found that to get start() entered so plots execute, the following must happen:
1. IF right click and select REFRESH then indicator's start() called and objects plotted. Ok, so works but is very clunky way to do...yes?
or 2. IF MT has data, start() called...
or 3. IF MT reschedules/timeSliceGiven to indicator THEN start() called...

(3) above is only my guess - I would assume that all indicators are entered [at least] by some default mechanism... YES??


My Ideas to overcome above issue

1. nest plotting code [ called within start() ] in a loop which uses Sleep().
Indicator would never exit/return() unless for instance set exit flag via extern param...

2. to stop redundant work/MT overheads - keep note of window left and right bar numbers used in previous start execution/loop and if current window mapping == previous mapping then do nothing except Sleep().

3. Maybe Sleep() time can be extended each time by a configurable amount so that even less overheads...

Above would then satisfy my 'Why I do this?' ... :)

Suggestions, ideas, information on 'how' MT schedules/works etc. would be most interesting and appreciated!

Thank you
Tim
Reason: