Индексы валют.

 
Индикатор индексов валют.

Позволяет смотреть стоимости валют выраженные в некоторой одинаковой для всех валют единице.

Зачем он нужен и как его применять можно смотрите сами.

Одновременно это хороший тест на глюки в МТ4.
Ошибок в скрипте не вижу, если кто найдет - велкам.

Использование.
На чарт с любой валютной парой добавляем несколько этих индикаторов и задаем им разные значения параметра.
Параметр определяет имя валюты, индекс которой будет отображаться.
Имя валюты - это (USD, GBP, EUR, CHF, JPY, AUD, CAD) - обязательно большими буквами.
(разработчикам - неплохо бы иметь функции преобразования строки к верхнему/нижнему регистру)

//+------------------------------------------------------------------+
//|                                                       MIndex.mq4 |
//|                                  Copyright © 2005, Yuri Makarov. |
//|                                       http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov."
#property link      "http://mak.tradersmind.com"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 OrangeRed

extern string Curency = "USD";

double EurUsd[],UsdChf[],GbpUsd[],UsdJpy[],AudUsd[],UsdCad[];
double Idx[];

int init()
{
   IndicatorShortName(Curency);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Idx);

   return(0);
}

void start()
{
   int counted_bars=IndicatorCounted();
   double USD;
   
   ArrayCopySeries(EurUsd,MODE_CLOSE,"EURUSD");
   ArrayCopySeries(GbpUsd,MODE_CLOSE,"GBPUSD");
   ArrayCopySeries(AudUsd,MODE_CLOSE,"AUDUSD");
   ArrayCopySeries(UsdChf,MODE_CLOSE,"USDCHF");
   ArrayCopySeries(UsdJpy,MODE_CLOSE,"USDJPY");
   ArrayCopySeries(UsdCad,MODE_CLOSE,"USDCAD");

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   
   for(int i=0; i<limit; i++)
   if (UsdChf[i]*UsdJpy[i]*UsdCad[i]*EurUsd[i]*GbpUsd[i]*AudUsd[i] > 0)
   {
      USD = MathPow(UsdChf[i]*UsdJpy[i]*UsdCad[i]/EurUsd[i]/GbpUsd[i]/AudUsd[i],1./7.);
      if (Curency == "USD") Idx[i] = USD; 
      if (Curency == "EUR") Idx[i] = USD*EurUsd[i];
      if (Curency == "GBP") Idx[i] = USD*GbpUsd[i];
      if (Curency == "AUD") Idx[i] = USD*AudUsd[i];
      if (Curency == "CHF") Idx[i] = USD/UsdChf[i];
      if (Curency == "JPY") Idx[i] = USD/UsdJpy[i];
      if (Curency == "CAD") Idx[i] = USD/UsdCad[i];
   }
}



Глюков при работе скрипта множество.
В основном как мне показалось они связаны с подкачкой данных.

1. Иногда перестают появляться новые бары.
Лечится закрытием МТ и повторным запуском.

2. Часто не делается подкачка данных, например при переключении таймфрейма (иногда работает)
Лечится аналогично.

3. При листании влево часто нет подкачки данных по некоторым парам, в результате графики не строятся.

 
Есть еще один момент - проводятся операции над барами без контроля - совпадет ли время у них?
 
проводятся операции над барами без контроля - совпадет ли время у них?

Не понял про что речь.

Предполагалось, что все массивы полученные по ArrayCopySeries на одном тике синхронизованы. Но даже если иногда есть небольшой разнобой во времени, это не страшно. Это может немного исказить результат, но не до такой степени.
Причина обращения: