Fonctions utiles de KimIV - page 35

 
xrust писал (а) >>
Autre question, cela vous dérangerait-il que j'utilise votre syntaxe et vos noms de variables dans mes fonctions, pour ainsi dire, afin de les standardiser.

Faites ce que vous pensez être juste.

 

La fonction SetLabel().

Cette fonction définit l'objet d'étiquette de texte OBJ_LABEL dans le graphique courant.

  • nm - Nom de l'objet. Paramètre requis.
  • tx - Texte. Paramètre requis.
  • cl - Couleur du marqueur. Paramètre requis.
  • xd - Coordonnée X en pixels par rapport à l'angle de référence. Paramètre requis.
  • yd - Coordonnée Y en pixels par rapport à l'angle du point de référence. Paramètre obligatoire.
  • cr - Numéro de l'angle de référence. Valeurs valides : 0 haut-gauche, 1 haut-droit, 2 bas-gauche, 3 bas-droit. La valeur par défaut est 0.
  • fs - Taille de la police. La valeur par défaut est 9.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
 

Exemples d'utilisation de SetLabel().

  • Trois étiquettes de texte bleues dans le coin supérieur gauche, police 9.
    SetLabel("Label1", "Текстовая метка", Blue, 5, 15);
    SetLabel("Label2", "Ещё одна текстовая метка", Blue, 5, 30);
    SetLabel("Label3", "Параметр cr=0", Blue, 5, 45);

  • Trois étiquettes de texte violettes dans le coin supérieur droit, police 12.
    SetLabel("Label1", "Текстовая метка", Magenta, 5, 15, 1, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Magenta, 5, 30, 1, 12);
    SetLabel("Label3", "Параметр cr=1", Magenta, 5, 45, 1, 12);

  • Trois étiquettes de texte vertes dans le coin inférieur droit, police 12.
    SetLabel("Label1", "Текстовая метка", Green, 5, 15, 3, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Green, 5, 30, 3, 12);
    SetLabel("Label3", "Параметр cr=3", Green, 5, 45, 3, 12);


ZS. Vous trouverez ci-joint un script pour tester la fonction SetLabel().

Dossiers :
 
SergNF писал (а) >>

Créer un fichier "inluder" (mqh) (probablement 2 - "trade" et "other"), se mettre d'accord sur son nom et forcer les "développeurs" à l'inclure dans la distribution.

On ne peut pas tuer l'idée, ça a été une longue période de consolidation. Mon rêve, en tant que non-professionnel, est de laisser à l'utilisateur ordinaire la seule prise de décision, en le libérant des complexités du logiciel.

Les développements d'Igor (stupéfiants par leur cohérence et leurs détails) s'en rapprochent le plus possible. De plus, l'auteur ne se contente pas de programmer, mais il garde constamment à l'esprit que l'on ne peut pas se passer de ses connaissances.

Les conseillers dans les transactions réelles, ce qui augmente la valeur pratique du code.

Il serait intéressant de connaître l'opinion d'Igor sur la possibilité de mqh-framing de ses développements et sur les avantages et inconvénients d'une telle implémentation.

 
granit77 писал (а) >>
J'aimerais connaître l'opinion d'Igor sur la possibilité d'une conception mqh de ses développements, les avantages et les inconvénients d'une telle mise en œuvre.

A propos des possibilités...

J'ai fait faire les fichiers MQH depuis un moment maintenant... Je ne les affiche pas encore... J'ai un atout dans ma manche... L'accord final sera... Je vais afficher toutes les fonctionnalités et résumer le tout en affichant les fichiers mqh.

Le pour et le contre...

Les fichiers MQH sont pratiques. Vous pouvez les utiliser dans différents Expert Advisors. Le code d'une EA spécifique est considérablement réduit. Il ne reste que la logique pure et quelques autres choses, et tous les gadgets et emballages sont dehors.

Cependant, j'utilise rarement les fichiers mqh, en général, un seul. C'est stdlib.mqh. J'ai copié toutes les fonctions nécessaires dans le fichier d'Expert Advisor. C'est plus pratique pour moi. J'ai pris cette habitude lorsque je travaillais beaucoup sur des commandes et que j'oubliais souvent d'envoyer l'un ou l'autre fichier mqh au demandeur. En outre, je veux copier un fichier EA dans différents dossiers du terminal au lieu de faire glisser tout le tas d'inludes après lui.

 
Ce n'est pas qu'un plaisir ! C'est délicieux ! Le jour n'est pas loin où une distribution sans une telle bibliothèque sera considérée comme incomplète.
 

Peut-être avez-vous un script aux fonctions utiles qui pourrait faire l'ouverture des ordres décrite dans l'article http://www.kroufr.ru/content/view/1027/124/.

Sinon, dites-moi où en trouver un. .

 

La fonction CrossPointOfLines().

Cette fonction calcule les coordonnées du point d'intersection de deux lignes. Chaque ligne est définie par une paire de coordonnées de ses points. Trois tableaux sont passés à la fonction comme paramètres :

  • x - Tableau d'abscisses. Il doit contenir quatre éléments : x[0], x[1] - l'abscisse de la première ligne, x[2], x[3] - l'abscisse de la deuxième ligne.
  • y - Tableau d'ordonnées. Doit contenir quatre éléments : y[0], y[1] - les ordonnées de la première ligne, y[0], y[1] - les ordonnées de la deuxième ligne.
  • t - Tableau de coordonnées du point d'intersection des deux lignes. Après l'exécution normale de la fonction, ce tableau contiendra deux éléments : t[0] est l'abscisse du point d'intersection recherché des deux droites et t[1] est l'ordonnée du même point.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}
 

Un exemple d'utilisation de la fonction CrossPointOfLines().

Comme exemple d'utilisation de la fonction CrossPointOfLines(), je vous propose traditionnellement mon script (voir pièce jointe). Pour que le script fonctionne correctement, vous devez dessiner deux lignes qui se croisent sur le graphique actuel, de l'un des types suivants : verticale, horizontale ou tendance. Ensuite, le script doit être attaché au graphique. Le script aura pour résultat de marquer le prix de gauche au point d'intersection des deux lignes.

SZY. Vous trouverez ci-joint un script pour tester la fonction CrossPointOfLines().

Dossiers :
 

La fonction SetRegression().

Cette fonction définit l'objet OBJ_REGRESSION du canal de régression linéaire sur le graphique actuel.

  • cl - Couleur de l'objet. Paramètre requis.
  • nm - Nom de l'objet. Lorsque la valeur par défaut est passée - "", l'heure d'ouverture de la barre actuelle est utilisée comme nom.
  • t1 - Première coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la dixième mesure.
  • t2 - Deuxième coordonnée du temps de réglage de l'objet. La valeur par défaut est 0 - le temps d'ouverture de la barre actuelle.
  • ry - Indicateur de la propriété BOW. La valeur par défaut est False.
  • st - Style de ligne. Les valeurs valides sont STYLE_SOLID (par défaut), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Largeur de la ligne. La valeur par défaut est 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0,
                    bool ry=False, int st=STYLE_SOLID, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_TIME2, t2);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
Raison: