как создать имя переменной программно? - страница 2

 
Sergey Dzyublik:

В MQL нет eval оператора, это компилируемый язык программирования.
Идея превращения строки в код и его исполнение на лету - не реализуемая идея средствами MQL.

Если необходимо связать сущность с неким значением или текстовой строкой уникально идентифицирующую ее - смотрите в сторону  "Ассоциативных массивов".

Благодарю но как то решал раньше

 
Велосипед для велосипедов, велосипедом погоняющий.
 
Taras Slobodyanik:

double MyBuf[];

struct Buffer
{
double buf[];
};

int OnInit()
  {
//--- indicator buffers mapping
   Buffer   MyBuffer[];
   ArrayCopy(MyBuf,MyBuffer);
   for (int s = 1;s <= SymbolsTotal(false);s++)
      {
         SetIndexBuffer(s,MyBuf[s].buf);
         }
      }
//---
   return(INIT_SUCCEEDED);
  }

ошибка компиляции 'buf' - struct or class type expected    12    36

'Buf' - тип структуры или типа, ожидаемый

как быть?‌

 
Taras Slobodyanik:
покажите код, у вас в сообщении разные имена Buf и buf

 Buf и buf это с переводчика

код вверху‌

 
AT-2000:

int OnInit()

  {
//--- indicator buffers mapping
   Buffer   MyBuffer[];
   ArrayCopy(MyBuf,MyBuffer);
   for (int s = 1;s <= SymbolsTotal(false);s++)
      {
         SetIndexBuffer(s,MyBuf[s].buf);
         }
      }
//---
   return(INIT_SUCCEEDED);
  }

ошибка компиляции 'buf' - struct or class type expected    12    36

'Buf' - тип структуры или типа, ожидаемый

как быть?‌

А-а-а-а-ааааа! Вынос мозга! 

Sergey Dzyublik:
Если необходимо связать сущность с неким значением или текстовой строкой уникально идентифицирующую ее - смотрите в сторону  "Ассоциативных массивов".

‌Не-а. Случай тяжелый. Ассоциативный массив здесь не поможет.

 

да, увидел...

ArrayCopy(MyBuf,MyBuffer);

массивы жеж разные, так нельзя копировать

Buffer   MyBuffer[];

буфер надо объявлять в глобальных переменных, а не в ините... (или он дальше онинита не пойдет?)

вот примерно так

struct Buffer
   {
   double buf[];
   };
Buffer   BIG[];
double   MyBuf[];



//+------------------------------------------------------------------+
int OnInit()
  {

//--- indicator buffers mapping
   
   for (int s = 1;s <= SymbolsTotal(false);s++)
      {
         SetIndexBuffer(s, BIG[s].buf);
         ArrayCopy(MyBuf, BIG[s].buf);
      }
//---
   return(INIT_SUCCEEDED);
  }

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
и про ArraySize забыли
 
AT-2000:

double MyBuf[];

struct Buffer
{
double buf[];
};

int OnInit()
  {
//--- indicator buffers mapping
   Buffer   MyBuffer[];
   ArrayCopy(MyBuf,MyBuffer);
   for (int s = 1;s <= SymbolsTotal(false);s++)
      {
         SetIndexBuffer(s,MyBuf[s].buf);
         }
      }
//---
   return(INIT_SUCCEEDED);
  }

ошибка компиляции 'buf' - struct or class type expected    12    36

'Buf' - тип структуры или типа, ожидаемый

как быть?‌

нашел ошибку

struct Buffer
{
double buf[];
};

Buffer MyBuf[];‌//ошибка исправленна

int OnInit()
  {
//--- indicator buffers mapping
   for (int s = 1;s <= SymbolsTotal(false);s++)
      {
          SetIndexBuffer(s,MyBuf[s].buf);
         }
      }
//---
   return(INIT_SUCCEEDED);
  }

 
Taras Slobodyanik:
и про ArraySize забыли

SetIndexBuffer(s, BIG[s].buf);

‌эта конструкция не работает на этом этапе
2017.03.15 14:24:26.295    Custom indicator  USDCHF,H1: removed

‌Invalid array access (Недопустимый доступ к массиву)

MyBuf[s].buf[] -Expression could not be evaluated (Выражение не может быть оценено)
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

размер массива указан? (перед циклом)

ArrayResize (BIG, SymbolsTotal(false));