Можно ли сократить код

 
Сейчас код такой:

ArrayResize(ihS01,12);
ArrayResize(ihS02,12);
ArrayResize(ihS03,12);
ArrayResize(ihS04,12);
ArrayResize(ihS05,12);
ArrayResize(ihS06,12);
ArrayResize(ihS07,12);

Хотелось бы чтото вроде такого:

for(i=1; i<7; i++)
{ArrayResize(ihS0+i,12); }

Возможно ли что нибудь подобное. Если да, напишите пару примеров. Спасибо.

 
Массив структур, одно из полей которых - массив. К сожалению, без примера.
 
struct PriceData
  {
   double            open[12];
  };

PriceData pdata[7];


 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Подскажите пожалуйста, как перебирать с помощью цикла динамические массивы?

Aleksei Stepanenko, 2020.10.28 00:00

Можно так, как Дмитрий говорил: 

struct My
   {
   double ma[];
   int handle;
   } my[100];
   
for(int i=0; i<100; i++)
   {
   SetIndexBuffer(i, my[i].ma, INDICATOR_DATA);
   }

for(int i=0; i<100; i++)
   {
   my[i].handle = iMA(Symbol(), PERIOD_CURRENT, i+1, 0, MODE_SMA, PRICE_CLOSE);
   }

for(int i=0; i<100; i++)
   {
   CopyBuffer(my[i].handle, 0, 0, rates_total, my[i].ma);
   }

 

Спасибо, однако вообще не понял как работает и как применить. У меня в коде множество повторений отличие только в переменных, которые было бы удобно перебирать, тогда и код сократься и гибкость кода будет лучше.

Каждая переменная производная от символа, которые мне приходиться прописывать явно, но я хотел бы чтобы они счтитывались с обзора рынка, например 2 символа или 30. Соотвественно переменные динимачески меняются.

Вот еще пример из кода:

            if(PositionGetString(POSITION_SYMBOL)==S01)
              {aMinStop=msS01; bTicket=S01BBOT; sTicket=S01SBOT;}
            if(PositionGetString(POSITION_SYMBOL)==S02)
              {aMinStop=msS02; bTicket=S02BBOT; sTicket=S02SBOT;}
            if(PositionGetString(POSITION_SYMBOL)==S03)
              {aMinStop=msS03; bTicket=S03BBOT; sTicket=S03SBOT;}
            if(PositionGetString(POSITION_SYMBOL)==S04)
              {aMinStop=msS04; bTicket=S04BBOT; sTicket=S04SBOT;}
            if(PositionGetString(POSITION_SYMBOL)==S05)
              {aMinStop=msS05; bTicket=S05BBOT; sTicket=S05SBOT;}
            if(PositionGetString(POSITION_SYMBOL)==S06)
              {aMinStop=msS06; bTicket=S06BBOT; sTicket=S06SBOT;}
            if(PositionGetString(POSITION_SYMBOL)==S07)
              {aMinStop=msS07; bTicket=S07BBOT; sTicket=S07SBOT;}

А хотелось бы так:

for(i=1; i<7; i++)
{
if(PositionGetString(POSITION_SYMBOL)==S0+i)
              {aMinStop=msS0+i; bTicket=S0+i+BBOT; sTicket=S0+i+SBOT;}
}
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
Yury Lemeshev:

Спасибо, однако вообще не понял как работает и как применить.

Вот так:

struct SymbolProperty
{
   string sSymbolName;
   int    aMinStop;
   string bTicket;
   string sTicket;
}

SymbolProperty arrstSymbolProperty[7];

for (i = 0; i < 7; ++i)
   if (PositionGetString(POSITION_SYMBOL) == arrstSymbolProperty[i].sSymbolName)
   {
      arrstSymbolProperty[i].aMinStop = msS0+i; 
      arrstSymbolProperty[i].bTicket = S0 + i + BBOT; 
      arrstSymbolProperty[i].sTicket = S0 + i + SBOT;
   }
 
Ihor Herasko:

Вот так:

Спасибо, так выглядет для меня читаемым. Буду пробовать применять.

 
Ihor Herasko:

Вот так:

Не интегрируется, ошибки. Вернусь к вопросу позже.

 

Вопрос актуален до сих пор.

Возможно ли такое?

CORE=3;
for(i=0; i<CORE; i++)
{
int iCORE0+1;
}

Тоесть по завершению получаем int iCORE01, iCORE02, iCORE03;
 
Yury Lemeshev:

Вопрос актуален до сих пор.

Возможно ли такое?

CORE=3;
for(i=0; i<CORE; i++)
{
int iCORE0+1;
}

Тоесть по завершению получаем int iCORE01, iCORE02, iCORE03;

Нечто подобное я делал, когда программировал на языке Clipper

 
Yury Lemeshev:

Вопрос актуален до сих пор.

Возможно ли такое?

CORE=3;
for(i=0; i<CORE; i++)
{
int iCORE0+1;
}

Тоесть по завершению получаем int iCORE01, iCORE02, iCORE03;

Нельзя так. Используйте динамический массив.

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