//+------------------------------------------------------------------+ //| CurrencyIndexC.mq4 | //| индикатор направления движения для 8 валют | //| на основе прямого вычисления индексов валют | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, S.Boykov (Mislaid)" #property link "E-mail: fort-ino@yandex.ru" #property indicator_separate_window #property indicator_buffers 8 extern int ChartBars=300; // количество точек на графике //---- indicator buffers double b0[],b1[],b2[],b3[],b4[],b5[],b6[],b7[]; datetime LastTrial; bool NoLabels; string IndicatorName="CurrencyIndexC"; // рабочие массивы double Y0[8],Y1[8],S0[8],D[8]; double Ra[8,8]; // число валютных пар int SymbolNumber; // список валютных пар, длина записи для пары 7 символов string SymbolList="EURUSD GBPUSD AUDUSD EURGBP USDJPY EURJPY GBPJPY AUDJPY CHFJPY CADJPY EURAUD GBPAUD USDCHF EURCHF GBPCHF AUDCHF CADCHF USDCAD EURCAD GBPCAD AUDCAD NZDUSD EURNZD GBPNZD NZDJPY AUDNZD NZDCHF NZDCAD "; // валютная корзина для расчета индекса доллара int BasketCount=6; string BasketOfCurrencies="EURUSD USDJPY GBPUSD USDCAD USDSEK USDCHF "; double BasketWeights[6]={-0.576,0.136,-0.119,0.0091,0.0042,0.0036}; double c0=50.14348112; // число валют int CurrencyNumber; // список валют, длина записи 4 символа // первая валюта должна быть USD string CurrencyList="USD EUR GBP JPY AUD CHF CAD NZD "; color CurrencyColor[8]={ Coral,Gold,LimeGreen,Blue,DeepPink,Violet,Goldenrod,DarkViolet}; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(8); IndicatorDigits(2); //---- 8 indicator buffers mapping SetIndexBuffer(0,b0); SetIndexBuffer(1,b1); SetIndexBuffer(2,b2); SetIndexBuffer(3,b3); SetIndexBuffer(4,b4); SetIndexBuffer(5,b5); SetIndexBuffer(6,b6); SetIndexBuffer(7,b7); //---- drawing settings int i; string CurrencyName; CurrencyNumber=(StringLen(CurrencyList)+1)/4; // +1, если вытрут последний пробел if(CurrencyNumber>8) { CurrencyNumber=8; CurrencyList=StringSubstr(CurrencyList,0,4*CurrencyNumber); } for(i=0; i=0; i--) { IterationMatrixCount(i); // вычисляем итерационную матрицу для расчета весов валют IterationSolve(i); // итерационное вычисление индексов if(i==ChartBars-1) ArrayCopy(S0,Y0,0,0,CurrencyNumber); // запоминаем стартовые индексы b0[i] = Y0[0] - S0[0]; b1[i] = Y0[1] - S0[1]; b2[i] = Y0[2] - S0[2]; b3[i] = Y0[3] - S0[3]; b4[i] = Y0[4] - S0[4]; b5[i] = Y0[5] - S0[5]; b6[i] = Y0[6] - S0[6]; b7[i] = Y0[7] - S0[7]; // if (i == 1) WriteToFile(); } return(0); // done } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ double LastKnownPrice(string SymbolName,datetime cTime) { int shift; shift=iBarShift(SymbolName,0,cTime,false); if(iTime(SymbolName,0,shift)>cTime) shift++; return(iClose(SymbolName,0,shift)); } //+------------------------------------------------------------------+ void IterationMatrixCount(int shift) { string FirstCurr,SecondCurr,SymbolName; int SymbolIndex,FirstCurrIndex,SecondCurrIndex; datetime cTime; double r; cTime=Time[shift]; for(SymbolIndex=0; SymbolIndex0.000001) { s=0.0; for(i=0; i