Questions in understanding the indicator system in MQL5

 
I'm new to MQL5 with some experience in MQL4. In MQL4 the indicator value is directly called by 

double value = iSomeIndicator(symbol, period, parameters..., shift);

While MQL5 we use a handle to initialize first, use CopyBuffer() to map it to a defined Array then visit the array to get value.

So my questions are:

1. Do we copy value only or the memory reference by using CopyBuffer()? the question is utilized in this situation that, if I want a live value for given indicator when running EA, do I need to call CopyBuffer() every tick, or just put it in OnInit() or somewhere to call it only once?

2. I remember in MQL4 that if we call an indicator from a different symbol/period, the value will stop updating or giving wrong value after some time passed if chart meets given criteria (close its chart, remove from market watch etc. I forgot) Does this still exist in MQL5 as long as the indicator has been called and stored in a handle?

3. The help file says immediately call indicator value after its initialization will not get a correct result, it's recommended to try later. However, is there any way to know when it is ready? Either by waiting until its completion or call some function and return its status would be fine.

 
  1. It is a "copy", so if you want a live value you have to copy it on every tick. However, you only have to do this for the current bar only (i.e. [0]). Values copied for previous bars (i.e. [1], [2], ...) do not need to be copied again as they are already closed bars and will not change (provided the indicator does not repaint).
  2. Be it MQL4 or MQL5, accessing data from other symbols/time-frames requires that you synchronise the data before you access it. For MQL5 this is explained in — Documentation on MQL5: Timeseries and Indicators Access / Organizing Data Access
  3. When you first create the handle, the indicator needs some time to prepare data. You will know if it is not ready because the CopyBuffer function fails and returns -1 and gives an error, as explained in the documentation.
Reason: