Fonctions utiles de KimIV - page 66

 
borisych писал(а) >>

...

3. Ici, la régression fait référence à une équation de régression linéaire et à son graphique.

Vous avez demandé la pente de l'équation de régression. Je vous ai montré qu'il peut être calculé différemment. Si vous voulez ce que vous dites au point 3. Vous voyez 'Fonctions utiles de KimIV', il y a 2 types de fonctions, si vous avez besoin d'un polynôme d'une puissance supérieure, utilisez cet algorithme 'Random Flow Theory and FOREX'.

 

La fonction StrTran().

Cette fonction remplace une sous-chaîne. Toutes les occurrences sont remplacées. Par exemple, vous pouvez remplacer toutes les virgules par des points ou vice versa d'un seul coup. La fonction StrSplit() renvoie la chaîne de caractères résultante et accepte les paramètres obligatoires suivants :

  • str - La chaîne dans laquelle la sous-chaîne strFrom est remplacée.
  • strFrom - sous-chaîne substituée. Si la sous-chaîne strFrom est trouvée dans la chaîne str, elle sera remplacée par la sous-chaîne strTo.
  • strTo - Sous-chaîne substituée.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

Exemples d'utilisation de la fonction StrTran().

  1. Remplacement d'un point décimal par une virgule :
    string s=DoubleToStr(Close[1], Digits);
    Print( s);
    s= StrTran( s, ".", ",");
    Print( s);
  2. Suppression des espaces
    string s="1 2 3 4 5 6 7 8";
    Print( s, " ", StrToInteger( s));
    s= StrTran( s, " ", "");
    Print( s, " ", StrToInteger( s));
  3. Remplacement de mots
    string s="листья жёлтые весной";
    Print( s);
    s= StrTran( s, "весной", "осенью");
    Print( s);

Résultats de l'exécution des exemples :

ZY. Vous trouverez ci-joint un script pour tester la fonction StrTran().

Dossiers :
 

Mise à jour de la liste des fonctions :

Dossiers :
f_kimiv.rar  12 kb
 
zhuki писал(а) >>
..
Si vous me permettez de suggérer une fonction qui montre n'importe quoi dans le raccourci de la barre des tâches .
Je l'utilise pour surveiller les EAs au travail sans ouvrir le terminal (beaucoup de regards indiscrets).

À cette fin, j'ai créé un programme distinct pour mon temps - http://www.miraxem.com/rqids.htm.


La calculatrice du trader Forex calcule automatiquement les profits/pertes actuels sur les positions ouvertes et les profits/pertes sur la fermeture partielle ou le renversement d'une position.

Cotations et graphiques en temps réel pour 12 paires de devises

Il s'affiche sous la forme d'une barre en haut de toutes les fenêtres et montre la cotation actuelle des paires de devises sélectionnées, les points de profit/perte et un calendrier des actualités avec une minuterie qui donne un signal avant les événements importants.

 
KimIV писал(а) >>
ah... En principe, vous pourriez utiliser un tableau passé par référence. Le nombre de paramètres renvoyés serait alors limité par la taille du tableau.

Ahh... Comment ça ?

"Les arguments(paramètres formels) sont passés par valeur, c'est-à-dire que chaque expression xl, . . ., xn est calculée et la valeur est passée à la fonction...."
Exemple tiré de l'aide

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);
  }
Et si vous essayez d'assigner x[0]=999 à une fonction, elle se plantera à la compilation si je me souviens bien.
'x' - array item cannot be assigned

 
KimIV писал(а) >>
[...]
Il s'agit des opérations OP_BUY et OP_SELL, tandis que les ordres sont les opérations OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT et OP_SELLSTOP telles que je les comprends. J'ouvre des positions et je passe des ordres. Et qu'est-ce que vous ouvrez ? La fonction NumberOfOrders() est conçue pour fonctionner avec des commandes.

En fait, cela ne devrait pas faire de différence. Elle devrait également fonctionner avec les positions.
La fonction compare ot=OrderType
();

et OrderType()
"Renvoie le type d'opération de l'ordre actuellement sélectionné. Il peut prendre l'une des valeurs suivantes :
OP_BUY - position d'achat,
OP_SELL - position de vente,
...

 
diakin писал(а) >>
Ahh... Comment ça ?

Je voulais dire littéralement ce qui suit :

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 a écrit >>
x' - l'élément du tableau ne peut pas être assigné

au lieu de :

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

vous devez

double linfunc(double& x[], double a, double b)
 
diakin писал(а) >>
En fait, ça ne devrait pas faire de différence. Cela devrait également fonctionner avec des positions.

La division en positions et en ordres est artificielle. Il a été inventé par moi pour mon confort personnel. Elle est basée sur les différences suivantes :

1. Le prix d'ouverture/de fixation d'un ordre peut être modifié (OrderOpenPrice()), alors que la position ne peut pas être modifiée.

Un ordre doit être supprimé (OrderDelete()), tandis qu'une position doit être fermée (OrderClose()).

3. Vous pouvez modifier la taille du lot de l'ordre (commentaire, nombre magique) sans affecter le dépôt. Supprimez l'ancien ordre et créez-en un nouveau avec la nouvelle taille de lot (commentaire, numéro magique). Si vous faites de même avec la position, il y aura une perte égale au spread multiplié par la taille du lot et la valeur du point.

4. Un ordre a une durée de vie, mais pas un poste.

 
KimIV писал(а) >>

Je voulais dire littéralement ce qui suit :

au lieu de :

.

Merci ! Maintenant je sais que vous pouvez le faire par référence aussi...

Pourquoi l'aide MQLQL doit-elle écrire dans une section que les paramètres sont passés par valeur et dans une autre qu'"il est possible de les passer par référence" .... ?

omg !

En ce qui concerne les ordres, j'ai lu plus avant ce qui pose problème (>1 && <6), c'est-à-dire que OP_BUY, OP_SELL n'ont pas leur place ici.

À propos, le nombre magique ne peut pas être modifié via OrderModify(). Ou peut-être que j'ai encore raté quelque chose ? ;-()