//+------------------------------------------------------------------+ //| Paradox.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "http://www.mql4.com" #property strict //--- indicator settings #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Silver #property indicator_width1 2 //--- indicator parameters //--- indicator buffers double ExtBuffer[]; string gs_suf = "", gs_txt = ""; //--- right input parameters flag //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { if (StringFind (_Symbol, "EURGBP") == -1) return (-1); if (StringLen (_Symbol) > 6) gs_suf = StringSubstr (_Symbol, 6); IndicatorDigits (Digits); //--- drawing settings SetIndexStyle (0, DRAW_LINE); //--- indicator buffers mapping SetIndexBuffer (0, ExtBuffer); //--- name for DataWindow and indicator subwindow label SetIndexLabel (0, "NewPrice"); SetIndexEmptyValue (0, 0.); //--- check for input parameters //--- initialization done return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- //--- last counted bar will be recounted int limit = rates_total - prev_calculated, li_Shift; double ld_Price, ld_curPrice; if (prev_calculated > 0) limit++; else limit--; //--- macd counted in the 1-st buffer for (int i = limit; i >= 0; i--) { datetime ldt_Time = Time[i]; li_Shift = iBarShift ("GBPUSD", _Period, ldt_Time, true); if (li_Shift == -1) {ExtBuffer[i] = 0.; gs_txt = StringConcatenate ("Нет цены на GBPUSD на ", i, " баре."); continue;} ld_Price = iOpen ("GBPUSD" + gs_suf, _Period, li_Shift) + MarketInfo ("GBPUSD" + gs_suf, MODE_SPREAD) * MarketInfo ("GBPUSD" + gs_suf, MODE_POINT); ExtBuffer[i] = ld_Price; li_Shift = iBarShift ("EURGBP", _Period, ldt_Time, true); if (li_Shift == -1) {ExtBuffer[i] = 0.; gs_txt = StringConcatenate ("Нет цены на EURGBP на ", i, " баре."); continue;} ld_curPrice = iOpen ("EURGBP" + gs_suf, _Period, li_Shift) + MarketInfo ("EURGBP" + gs_suf, MODE_SPREAD) * MarketInfo ("EURGBP" + gs_suf, MODE_POINT); ExtBuffer[i] *= ld_curPrice; li_Shift = iBarShift ("USDCHF", _Period, ldt_Time, true); if (li_Shift == -1) {ExtBuffer[i] = 0.; gs_txt = StringConcatenate ("Нет цены на USDCHF на ", i, " баре."); continue;} ld_Price = iOpen ("USDCHF" + gs_suf, _Period, li_Shift) + MarketInfo ("USDCHF" + gs_suf, MODE_SPREAD) * MarketInfo ("USDCHF" + gs_suf, MODE_POINT); ExtBuffer[i] *= ld_Price; li_Shift = iBarShift ("EURCHF", _Period, ldt_Time, true); if (li_Shift == -1) {ExtBuffer[i] = 0.; gs_txt = StringConcatenate ("Нет цены на EURCHF на ", i, " баре."); continue;} ld_Price = iOpen ("EURCHF" + gs_suf, _Period, li_Shift); ExtBuffer[i] *= (1. / ld_Price); ExtBuffer[i] *= ld_curPrice; } Comment (gs_txt); //--- done return (rates_total); } //+------------------------------------------------------------------+