Что случилось с тестером в режиме визуализация?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexander Fedosov
15841
Alexander Fedosov  

Пытаюсь получить значение стандартного индикатора на нулевом баре и в режиме Визуализация пишет что попало:


При этом без Визуального всё нормально.

Код проверки:

//+------------------------------------------------------------------+
//|                                                      Example.mq5 |
//|                                                         Alex2356 |
//|                    https://www.mql5.com/ru/users/alex2356/seller |
//+------------------------------------------------------------------+
#property copyright "Alex2356"
#property link      "https://www.mql5.com/ru/users/alex2356/seller"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input double               SAR_Step          =  0.02;                // Шаг PSAR
input double               SAR_Max           =  0.2;                 // Макс. шаг PSAR
int PSAR_Handle;
double psar[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Получение хэндла индикатора PSAR
   PSAR_Handle=iSAR(Symbol(),PERIOD_CURRENT,SAR_Step,SAR_Max);
   if(PSAR_Handle==INVALID_HANDLE)
     {
      Print("Failed to get PSAR handle!");
      Print("Handle = ",PSAR_Handle,"  error = ",GetLastError());
      return(INIT_FAILED);
     }
//---
   PSAR_Signal();
   Print("ЗНАЧЕНИЕ PSAR: ",psar[0]);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int PSAR_Signal()
  {
//--
   ArraySetAsSeries(psar,true);
//---
   return (CopyBuffer(PSAR_Handle,0,0,1,psar));
  }
//+------------------------------------------------------------------+
Alexander Fedosov
15841
Alexander Fedosov  

Без визуализации всё нормально.


Vladimir Karputov
Модератор
182897
Vladimir Karputov  
В InInit Вы распечатываете из массива индекс #0 - но Вы туда сначала что-то положили, прежде чем распечатать?

То есть создали массив, забыли его инициализировать и пытаетесь из массива что-то получить ( а там ведь после создания и без инициализации может быть и мусор, а может быть какое-то осмысленное число - как повезёт)
Alexander Fedosov
15841
Alexander Fedosov  
Vladimir Karputov:
В InInit Вы распечатываете из массива индекс #0 - но Вы туда сначала что-то положили, прежде чем распечатать?

То есть создали массив, забыли его инициализировать и пытаетесь из массива что-то получить ( а там ведь после создания и без инициализации может быть и мусор, а может быть какое-то осмысленное число - как повезёт)

Если вы об этом, то не поможет.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int PSAR_Signal()
  {
//--
   ArrayInitialize(psar,0.0);
   ArraySetAsSeries(psar,true);
//---
   return (CopyBuffer(PSAR_Handle,0,0,1,psar));
  }
Artyom Trishkin
Модератор
53121
Artyom Trishkin  
Alexander Fedosov:

Если вы об этом, то не поможет.

Что-то копировать в буфер в обработчике OnInit() - нехорошее решение. Готовность данных однозначно нужно проверять и использовать в OnCalculate().

В OnInit() можно лишь обратиться к серийным данным для активизации их подкачки.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий