Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 724

 
borilunad:
 
Если правильно понял задачу.
int n,Nn;
switch(n)
  {case 1:Nn=1;break;case 2:Nn=3;break;case 3:Nn=6;break;case 4:Nn=10;break;case 5:Nn=15;break;default :Nn=0;}
Неясно, откуда n нужно брать...
 
valeryk:
Если правильно понял задачу.Неясно, откуда n нужно брать...
Спасибо за отклик! Количество открытых ордеров равно n. При повторении сигнала на открытие повышается требование на наличие профита в уже открытых позициях. Тем самым избегаю неоправданных просадок. В цикле решается просто, но неудобно вставлять в условия открытия, как и со switch'ем. Нужен как бы "факториал", но суммирующий, а не переумножающий! Формула! Пока использую приведённую выше формулу с MathMax'ом.
 
borilunad:
Спасибо за отклик! Количество открытых ордеров равно n. При повторении сигнала на открытие повышается требование на наличие профита в уже открытых позициях. Тем самым избегаю неоправданных просадок. В цикле решается просто, но неудобно вставлять в условия открытия. Нужен как бы "факториал", но суммирующий, а не переумножающий!
Ясно. Ну, я бы так и решал, если кол-во ордеров ограничено 5. Свичь в данном случае самый скорострельный способ.
 
valeryk:
Ясно. Ну, я бы так и решал, если кол-во ордеров ограничено 5. Свичь в данном случае самый скорострельный способ.

Ой ли ;) ?

 

const int iN[] = {1,3,6,10,15};

Nn = iN[n];
 
valeryk:
Ясно. Ну, я бы так и решал, если кол-во ордеров ограничено 5. Свичь в данном случае самый скорострельный способ.
Как раз не хочу ограничивать, потому ищу какую-нибудь формулу. Может, осенит со временем, но без свича и цикла!
 
VladislavVG:

Ой ли ;) ?

 

 

Согласен. Но если затребует значение 7 индекса, например? Нужно проверку делать. А так в любом случае без ошибок.
 
borilunad:
Как раз не хочу ограничивать, потому ищу какую-нибудь формулу. Может, осенит со временем, но без свича и цикла!
Тогда пример выше, в цикле в ините заполнить массив. И ресайз от макс. ордеров.
 
VladislavVG:

Ой ли ;) ?

 

 О! Спасибо большое! Это ближе и проще! Буду экспериментировать с этим, как понимаю, массивом. Но нельзя будет делать неопределённо с количеством. Или можно, если n== 2, тогда берётся 2-й член, а если n==6 и больше, тогда поставлю больше членов в массив. Надеюсь, правильно я понял?!

 
borilunad:

Да, массив можно сделать заведомо бОльшим, например, размерностью 100 или еще большим - такого количества ордеров, какое Вы вряд ли получите, но он все равно будет ограничен.

Если надо без ограничений, то только цикл. Оформите отдельной функцией ее нормально будет вызывать в любом месте. Будет потеря скорости: к сожалению, в МКЛ нет инлайновых Функций.

 
borilunad:
Во зацепило))
input int MaxOrders = 5;  // внешняя

int Nn[];  // глобальная

int OnInit()
  {
   string txt="";
   int i=0,temp=0;
   ArrayResize(Nn,MaxOrders+1);
   for(i=1;i<=MaxOrders;i++) 
     {
      temp+=int(MathMax(i-1,0));
      Nn[i]=temp;
      txt=StringConcatenate(txt,"\n",temp);
     }
   Comment(txt);
   return(INIT_SUCCEEDED);
  }
Причина обращения: