Caratteristiche utili da KimIV - pagina 66

 
borisych писал(а) >>

...

3. Qui, la regressione si riferisce a un'equazione di regressione lineare e al suo grafico.

Hai chiesto la pendenza dell'equazione di regressione. Ti ho mostrato che può essere calcolato in modo diverso. Se vuoi quello che dici al punto 3. Vedi 'Funzioni utili da KimIV' ci sono 2 tipi di funzioni, se hai bisogno di un polinomio di potenza superiore allora usa questo algoritmo 'Random Flow Theory and FOREX'.

 

La funzione StrTran().

Questa funzione sostituisce una sottostringa. Tutte le sue occorrenze vengono sostituite. Per esempio, potete sostituire tutte le virgole con punti o viceversa in un colpo solo. La funzione StrSplit() restituisce la stringa risultante e accetta i seguenti parametri obbligatori:

  • str - La stringa in cui la sottostringa strFrom viene sostituita.
  • strFrom - sottostringa sostituita. Se la sottostringa strFrom si trova nella stringa str, sarà sostituita dalla sottostringa strTo.
  • strTo - Sottostringa sostituita.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  описание : Замена подстроки                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    str     - текстовая строка, в которой производится замена               |
//|    strFrom - заменяемая подстрока                                          |
//|    strTo   - заменяющая подстрока                                          |
//+----------------------------------------------------------------------------+
string StrTran(string str, string strFrom, string strTo) {
  int    n;
  string strOut="", strTemp;

  for ( n=0; n<StringLen( str); n++) {
    strTemp=StringSubstr( str, n, StringLen( strFrom));
    if ( strTemp== strFrom) {
      strOut=StringConcatenate( strOut, strTo);
      n= n+StringLen( strFrom)-1;
    } else strOut=StringConcatenate( strOut, StringSubstr( str, n, 1));
  }
  return( strOut);
}
 

Esempi di come usare la funzione StrTran().

  1. Sostituzione di un punto decimale con una virgola:
    string s=DoubleToStr(Close[1], Digits);
    Print( s);
    s= StrTran( s, ".", ",");
    Print( s);
  2. Rimozione degli spazi
    string s="1 2 3 4 5 6 7 8";
    Print( s, " ", StrToInteger( s));
    s= StrTran( s, " ", "");
    Print( s, " ", StrToInteger( s));
  3. Sostituzione di parole
    string s="листья жёлтые весной";
    Print( s);
    s= StrTran( s, "весной", "осенью");
    Print( s);

Risultati dell'esecuzione degli esempi:

ZY. In allegato c'è uno script per testare la funzione StrTran().

File:
 

Elenco aggiornato delle funzioni:

File:
f_kimiv.rar  12 kb
 
zhuki писал(а) >>
..
Se posso, vorrei suggerire una funzione che mostra qualsiasi cosa nel collegamento della barra delle applicazioni.
Lo uso per monitorare gli EA al lavoro senza aprire il terminale (molti occhi indiscreti).

A questo scopo ho fatto un programma separato per il mio tempo - http://www.miraxem.com/rqids.htm


Il calcolatore del trader di Forex calcola automaticamente il profitto/perdita attuale sulle posizioni aperte e il profitto/perdita sulla chiusura parziale o sul ribaltamento di una posizione.

Quotazioni e grafici in tempo reale per 12 coppie di valute

Viene visualizzata come una barra in cima a tutte le finestre e mostra la quotazione corrente per le coppie di valute selezionate, punti di profitto/perdita e un calendario di notizie con un timer che dà un segnale prima di eventi importanti.

 
KimIV писал(а) >>
ah... Beh, se in linea di principio, si potrebbe usare un array passato per riferimento. Allora il numero di parametri restituiti sarebbe limitato dalla dimensione dell'array.

Ahh... Com'è?

"Gli argomenti(parametri formali) sono passati per valore, cioè ogni espressione xl, . . ., xn è calcolata e il valore è passato alla funzione...."
Esempio dalla guida

int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a= linfunc( some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return ( a* x[0] + b);
  }
E se provate ad assegnare x[0]=999 a una funzione, si bloccherà durante la compilazione, se ricordo bene.
'x' - l'elemento dell'array non può essere assegnato

 
KimIV писал(а) >>
[...]
Queste sono operazioni commerciali OP_BUY e OP_SELL, mentre gli ordini sono operazioni commerciali OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT e OP_SELLSTOP come li capisco. Apro posizioni e imposto ordini. E cosa si apre? La funzione NumberOfOrders() è progettata per lavorare con gli ordini.

In realtà non dovrebbe fare differenza. Dovrebbe funzionare anche con le posizioni.
La funzione confronta ot=OrderType
();

e OrderType()
"Restituisce il tipo di operazione dell'ordine attualmente selezionato. Può essere uno dei seguenti valori:
OP_BUY - posizione di acquisto,
OP_SELL - posizione di vendita,
...

 
diakin писал(а) >>
Ahh... Com'è?

Intendevo letteralmente quanto segue:

void start()
{
  double some_array[];
  string st="";
  linfunc( some_array);
  for (int i=0; i<ArraySize( some_array); i++)
  {
    st=StringConcatenate( st, "some_array[", i, "]=", some_array[ i], "\n");
  }
  Comment( st);
}
void linfunc(double& x[])
{
  ArrayResize( x, 7);
  for (int i=0; i<ArraySize( x); i++)
  {
    x[ i]=0.7*( i+0.1);
  }
}

diakin ha scritto >>.
x' - elemento dell'array non può essere assegnato

invece di:

double linfunc(double x[], double a, double b)

devi

double linfunc(double& x[], double a, double b)
 
diakin писал(а) >>
In realtà non dovrebbe fare differenza. Dovrebbe funzionare anche con le posizioni.

La divisione in posizioni e ordini è artificiale. È stato inventato da me per la mia comodità personale. Si basa sulle seguenti differenze:

1. Il prezzo di apertura/impostazione di un ordine può essere cambiato (OrderOpenPrice()), mentre la posizione non può essere cambiata.

Un ordine deve essere cancellato (OrderDelete()), mentre una posizione deve essere chiusa (OrderClose()).

3. Puoi cambiare la dimensione del lotto dell'ordine (commento, numero magico) senza influenzare il deposito. Cancellare il vecchio ordine e impostarne uno nuovo con la nuova dimensione del lotto (commento, numero magico). Se fai lo stesso con la posizione, ci sarà una perdita pari allo spread moltiplicato per la dimensione del lotto e il valore del punto.

4. Un ordine ha una durata, ma una posizione no.

 
KimIV писал(а) >>

Intendevo letteralmente quanto segue:

invece di:

.

Grazie! Ora saprò che si può fare anche per riferimento...

Perché l'helper MQLQL dovrebbe scrivere in una sezione che i parametri sono passati per valore e in un'altra che "è possibile passarli per riferimento" ....?

omg!

Per quanto riguarda gli ordini, ho letto ulteriormente qual è il problema (>1 && <6), cioè OP_BUY, OP_SELL non appartengono a questo posto.

A proposito, il numero magico non può essere cambiato tramite OrderModify(). O forse mi è sfuggito di nuovo qualcosa? ;-()