Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 724

 
borilunad:
Se ho capito bene il problema.
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;}
Non è chiaro da dove n dovrebbe essere preso...
 
valeryk:
Se ho capito bene il problema, non è chiaro da dove dovrebbe essere preso n...
Grazie per il vostro feedback! Il numero di ordini aperti è uguale a n. Quando il segnale di apertura viene ripetuto, il requisito di avere profitto nelle posizioni già aperte aumenta. Così, evito i drawdown irragionevoli. Si risolve semplicemente nel ciclo, ma non è conveniente inserirlo nelle condizioni di apertura, come con loswitch.Abbiamo bisogno di un "fattoriale", ma sommando uno, non moltiplicando! Formula! Finora sto usando la formula di cui sopra con MathMax.
 
borilunad:
Grazie per il vostro feedback! Il numero di ordini aperti è uguale a n. Quando il segnale di apertura viene ripetuto, il requisito di avere un profitto nelle posizioni già aperte aumenta. Così, evito i drawdown irragionevoli. Si risolve semplicemente nel ciclo, ma non è conveniente inserirlo nelle condizioni di apertura. Ho bisogno di una specie di "fattoriale", ma dovrebbe sommare, non moltiplicare!
Capisco. Beh, ecco come farei se il numero di ordini è limitato a 5. La spazzata in questo caso è il modo più veloce.
 
valeryk:
Capisco. Beh, io farei così se il numero di ordini è limitato a 5. Lo scroll in questo caso è il modo più veloce.

Ouch ;) ?

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

Nn = iN[n];
 
valeryk:
Capisco. Beh, lo farei se il numero di ordini è limitato a 5. Una spazzata è il modo più veloce in questo caso.
Non voglio limitarlo, e quindi sto cercando una formula. Forse, alla fine mi verrà in mente, ma senza una spazzata e un loop!
 
VladislavVG:

Ouch ;) ?

D'accordo. Ma se chiede un valore di indice 7, per esempio? Ha bisogno di essere controllato. Ma in ogni caso non ci sono errori.
 
borilunad:
Non voglio essere restrittivo, quindi sto cercando una specie di formula. Forse mi verrà in tempo, ma senza una spazzata e un loop!
Poi l'esempio sopra, nel ciclo nell'inite per riempire l'array. E ridimensionare da ordini massimi.
 
VladislavVG:

Ouch ;) ?

О! Grazie mille! Questo è più vicino e più facile! Sperimenterò con questo, visto che ho capito l'array. Ma non sarà possibile fare all'infinito con il numero. Oppure potreste se n==2, allora prendere il 2° membro, e se n==6 o più, allora mettere più membri nell'array. Spero di aver capito bene!

 
borilunad:

Sì, l'array può essere reso deliberatamente più grande, per esempio, misurando 100 o più - il numero di ordini che è improbabile ottenere, ma sarà comunque limitato.

Se volete ottenerlo senza limiti, avrete bisogno solo di un ciclo. Fatene una funzione separata, sarà normale chiamarla in qualsiasi posto. Ci sarà una perdita di velocità: purtroppo, non ci sono funzioni in linea in MKL.

 
borilunad:
Mi ha preso))
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);
  }