iMA не берет данные с другого инструмента

 

Приветствую всех!

Хочу на графике EURUSD вывести МА с графика UDDCHF.

Пока такой код. Он выводит данные с текущего символа:

//+------------------------------------------------------------------+
//|                                                   MultiChart.mq5 |
//|                                              Copyright 2019, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property indicator_chart_window

#property indicator_plots 1
#property indicator_buffers 1
#property indicator_type1 DRAW_LINE
#property indicator_color1  Blue
#property indicator_width1  2

input string s="USDCHF";
input int MAPeriod=22;
input int Barov=1111;

double MA[];
int ma;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,MA,INDICATOR_DATA);
   ma=iMA(s,0,MAPeriod,0,0,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

   double k=1.122/0.991;
   ArraySetAsSeries(MA,true);
   CopyBuffer(ma,0,0,Barov,MA);
   Comment("\n",MA[1]);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


если меняем символ, например на USDCHF, данных нет:



Может быть кто подскажет в чем моя ошибка?

 

если не учитывать, что в Вашем коде нет проверок - в кодобазе посмотрите как мультисимвольные или мультитаймфреймовые индикаторы написаны

то скорее всего Вы просто не видите отображение индикатора, или в подокно отобразите или Ctrl + D чтобы увидеть рассчитанные значения индикатора

вот Ваш код в подокне :


 
Igor Makanu:

если не учитывать, что в Вашем коде нет проверок - в кодобазе посмотрите как мультисимвольные или мультитаймфреймовые индикаторы написаны

то скорее всего Вы просто не видите отображение индикатора, или в подокно отобразите или Ctrl + D чтобы увидеть рассчитанные значения индикатора

вот Ваш код в подокне :


Благодарствую! У меня пока в таком виде:


//+------------------------------------------------------------------+
//|                                                   MultiChart.mq5 |
//|                                              Copyright 2019, AM2 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, AM2"
#property version   "1.00"
#property indicator_chart_window

#property indicator_plots 1
#property indicator_buffers 1
#property indicator_type1 DRAW_LINE
#property indicator_color1  Aqua
#property indicator_width1  2

input string s="USDCHF";
input int Barov=1111; // баров для расчета
input int Delta=1300; // параметр для выравнивания

double pr[];
double cl[];

MqlRates rate[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,pr,INDICATOR_DATA);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---


   
   ArraySetAsSeries(pr,true);
   ArraySetAsSeries(cl,true);
   ArraySetAsSeries(rate,true);
   CopyRates(s,0,0,Barov,rate);
   CopyClose(NULL,0,0,1,cl);
   
   double k=0;
   if(rate[0].close>0) k=cl[0]/rate[0].close; 
     
   double max=ChartGetDouble(0,CHART_PRICE_MAX,0);
   double min=ChartGetDouble(0,CHART_PRICE_MIN,0);

   for(int i=0;i<Barov;i++) pr[i]=rate[i].close*k+Delta*_Point;

   Comment("\n PR: ",pr[0],
           "\n Close: ",rate[0].close,
           "\n Coeff: ",k,
           "\n Max: ",max,
           "\n Min: ",min);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Andrey Kornishkin:

если меняем символ, например на USDCHF, данных нет:

А подгруженная история по USDCHF имеется для расчёта индикатора на Barov=1111 ?

Если вы пытаетесь сделать мультичарт, поищите что то на подобие Chart Overlay.

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