Помогите разобраться в чем проблема.

 
Написал индикатор с возможностью работы на разных периодах(указывается во входных параметрах индикатора). Если в индикаторе указать текущий период, то все работает, но если период графика отличается от периода индикатора, то при появлении нового бара на графике все, что рисуется через буфера исчезает (fail.jpg)до нажатия ПКМ-Обновить. Помогите исправить.
Файлы:
ok.JPG  164 kb
fail.JPG  150 kb
 

Возможно ли переписать приведенный выше индикатор с использованием классов и возможностью без перекомпиляции менять набор инструментов. Больше всего не понятно как переписать код с возможностью динамического изменения набора инструментов:

  for(int i=to_copy-1; i>=0; i--)
     {

      double EURUSD=ma(hwd_EURUSDs, hwd_EURUSDf, i);
      double GBPUSD=ma(hwd_GBPUSDs, hwd_GBPUSDf, i);
      double AUDUSD=ma(hwd_AUDUSDs, hwd_AUDUSDf, i);
      //double NZDUSD=ma("NZDUSD", Slow, MA_Method, Price, i)/ma("NZDUSD", Fast, MA_Method, Price, i);

      double USDCAD=ma(hwd_USDCADf, hwd_USDCADs, i);
      double USDCHF=ma(hwd_USDCHFf, hwd_USDCHFs, i);
      double USDJPY=ma(hwd_USDJPYf, hwd_USDJPYs, i);

      //double sum = EURUSD + GBPUSD + AUDUSD + NZDUSD + USDCHF + USDCAD + USDJPY;
      double sum=EURUSD+GBPUSD+AUDUSD+USDCHF+USDCAD+USDJPY;

      // рассчет валют
      arrUSD[i] = sum-6.0;
      arrEUR[i] = (sum-EURUSD+1.0)/EURUSD-6.0;
      arrGBP[i] = (sum-GBPUSD+1.0)/GBPUSD-6.0;
      arrAUD[i] = (sum-AUDUSD+1.0)/AUDUSD-6.0;
      //arrNZD[i] = (sum-NZDUSD+1.0)/NZDUSD-7.0;
      arrCAD[i] = (sum-USDCAD+1.0)/USDCAD-6.0;
      arrCHF[i] = (sum-USDCHF+1.0)/USDCHF-6.0;
      arrJPY[i] = (sum-USDJPY+1.0)/USDJPY-6.0;

     }//end block for(int i=0; i<limit; i++)  

 Помогите хотя бы советом, но лучше кодом или примером.

Причина обращения: