Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 724

 
borilunad:
Wenn ich das Problem richtig verstehe.
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;}
Es ist unklar, woher n genommen werden sollte...
 
valeryk:
Wenn ich das Problem richtig verstehe, ist nicht klar, woher n genommen werden soll...
Vielen Dank für Ihr Feedback! Die Anzahl der offenen Aufträge ist gleich n. Wenn das Eröffnungssignal wiederholt wird, steigt die Anforderung, dass die bereits eröffneten Positionen einen Gewinn aufweisen müssen. So vermeide ich unangemessene Drawdowns. Sie wird einfach in der Schleife gelöst, aber es ist nicht bequem, sie in die Öffnungsbedingungen einzufügen, wie beimSchalter.Wir brauchen eine "Fakultät", aber eine Summierung, keine Multiplikation! Formel! Bislang verwende ich die obige Formel mit MathMax.
 
borilunad:
Vielen Dank für Ihr Feedback! Die Anzahl der offenen Aufträge ist gleich n. Wenn das Eröffnungssignal wiederholt wird, steigt die Anforderung, einen Gewinn in bereits offenen Positionen zu erzielen. So vermeide ich unangemessene Drawdowns. Die Schleife ist einfach gelöst, aber es ist nicht bequem, sie in die Eröffnungsbedingungen einzufügen. Ich brauche eine Art "Fakultät", aber es sollte summiert und nicht multipliziert werden!
Verstehe. So würde ich es machen, wenn die Anzahl der Aufträge auf 5 begrenzt ist. Sweep ist in diesem Fall der schnellste Weg.
 
valeryk:
Ich verstehe. Nun, ich würde es so machen, wenn die Anzahl der Aufträge auf 5 begrenzt ist. Die Schriftrolle ist in diesem Fall der schnellste Weg.

Autsch ;) ?

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

Nn = iN[n];
 
valeryk:
Ich verstehe. Nun, ich würde es so machen, wenn die Anzahl der Aufträge auf 5 begrenzt ist. Ein Sweep ist in diesem Fall der schnellste Weg.
Ich möchte sie nicht einschränken und suche deshalb nach einer Formel. Vielleicht fällt es mir irgendwann wieder ein, aber ohne Fegen und Schleifen!
 
VladislavVG:

Autsch ;) ?

Einverstanden. Aber wenn sie zum Beispiel nach einem Wert von Index 7 fragt? Sie muss überprüft werden. Aber auf jeden Fall gibt es keine Fehler.
 
borilunad:
Ich möchte mich nicht einschränken, deshalb suche ich nach einer Formel. Vielleicht fällt es mir noch rechtzeitig ein, aber ohne Fegen und Schleifen!
Dann das Beispiel oben, in der Schleife in der inite, um das Array zu füllen. Und ändern Sie die Größe von maximalen Aufträgen.
 
VladislavVG:

Autsch ;) ?

О! Herzlichen Dank! Das ist näher und einfacher! Ich werde damit experimentieren, da ich die Anordnung verstehe. Aber es wird nicht möglich sein, die Zahl unbegrenzt zu halten. Oder man könnte, wenn n==2, das 2. Glied nehmen, und wenn n==6 oder mehr, dann mehr Glieder in das Array aufnehmen. Ich hoffe, ich habe es richtig verstanden!

 
borilunad:

Ja, das Feld kann absichtlich größer gemacht werden, z. B. 100 oder mehr - die Anzahl der Bestellungen, die Sie wahrscheinlich nicht bekommen werden, aber es wird immer noch begrenzt sein.

Wenn Sie es ohne Einschränkungen bekommen wollen, brauchen Sie nur eine Schleife. Machen Sie sie zu einer separaten Funktion, die an jeder beliebigen Stelle aufgerufen werden kann. Es wird einen Geschwindigkeitsverlust geben: leider gibt es keine Inline-Funktionen in MKL.

 
borilunad:
Es hat mich erwischt))
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);
  }