Вопрос к профи, или как не сойти с ума :)

 

Сегодня мне показалось, что я сошел с ума : )))

Простейшая задача - отображение на индикаторе на произвольное время значения Эквити.

Но если через обычную переменную, инициализированную непосредственно числом, все проходит нормально,то через то же значение, но полученное посредством функции AccountInfoDouble(ACCOUNT_EQUITY) отображение пропадает,
хотя  инициализация переменных происходит в одном месте (OnInit).

В чем же дело?

Из подозрений были: преобразование типов, заморочки с OnCalculate, но теперь все упрощено до предела! 


 

//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double Values[];
double depozit;
double depozit2;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, true);
   depozit=5000;
   depozit2=AccountInfoDouble(ACCOUNT_EQUITY);
   if(depozit==depozit2)
      Print("Equity - OnCalculate: depozit=depozit2");
   else
      Print("Equity - OnCalculate: depozit<>depozit2"); 
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[]){
   Values[10] = depozit2;
   return rates_total;
  }

 

Добавил для отладки еще строчки. В OnInit:

Print("Equity: depozit=",depozit,", depozit2=",depozit2);

В OnCalculate:

   Values[12] = depozit;
   Values[14] = AccountInfoDouble(ACCOUNT_EQUITY);
   Values[16] = 5000;

Прекрасно работают все варианты:


У вас такая же версия терминала?.. А на депозите точно 5000 лежит?

 

Тогда я уже совсем ничего не понимаю...

Версия - 375 от 28 декабря, точно такая же, как у Вас.

Для проверки значения депо специально ввел блок условий и условие depozit=depozit2, то есть 5000 - соблюдается.

Предположил, что, может быть, дело в траблах с советником, и индикатор просто перетащил на чистый график, но - все то же самое.

...ds2, а Вы пробовали отобразить только одно значение ( а не три)?

Values[14] = AccountInfoDouble(ACCOUNT_EQUITY);

Правда, есть единственное подозрение, которое с этим может быть как-то коссвенно связано.

В этом офисном терминале в последнее время почему-то не обновляются котировки...

Но разве это может влиять на отображение на индикаторе обычных данных, которые в Print выводятся абсолютно нормально?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Общие функции / Print - Документация по MQL5
 

DV2010:

...ds2, а Вы пробовали отобразить только одно значение ( а не три)?

По-всякому работает.

Правда, есть единственное подозрение, которое с этим может быть как-то коссвенно связано.

В этом офисном терминале в последнее время почему-то не обновляются котировки...

Я настроил терминал на несуществующий адрес сервера - индикатор перестал рисоваться.

Настроил на несуществующий торговый счет - тоже не отображается.

Так что может не все так косвенно, как вам кажется... :)

Кстати, в обоих случаях в журнал терминала не выводятся никакие сообщения. Т.е. очевидно даже до Init не доходит дело.

 

После полной переустановки терминала проблема решена! (:-)