Fonctions utiles de KimIV - page 34

 
KimIV писал (а) >>

Les pointeurs dans MQL4 sont délicats. Il n'y a pas de soutien direct. Quelqu'un ici sur le forum a essayé de le faire avec des tableaux, je crois. Je ne peux pas être plus précis. Cherchez-le vous-même.

MathRand()

Vous ne pouvez modifier que la première dimension du tableau de manière programmatique. La fonction ArrayResize(). Les deuxième, troisième et quatrième dimensions doivent être fixées de manière rigide.

Eh bien, oublions aussi les pointeurs et les tableaux dynamiques...

J'attends avec impatience la 5e version de la langue...

Merci pour l'aide...



Il est facile de travailler avec une seule grille.

Ce qui est amusant, c'est que pour mon idée, un seul réseau n'était pas suffisant, et je voulais faire un algorithme pour passer d'un réseau à l'autre, avec des pointeurs ce n'est pas difficile.

Mais non... ...nous devrons le coder en dur.

 

La fonction SetTLineByAngle().

Cette fonction définit l'objet OBJ_TRENDBYANGLE de la ligne de tendance par l'angle de pente sur le graphique courant.

  • cl - Couleur de l'objet TRENDBYANGLE. 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.
  • p1 - Première coordonnée de l'objet fixant le prix. Valeur par défaut - 0 - minimum de la dixième barre.
  • t2 - Deuxième coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la barre actuelle.
  • p2 - Deuxième coordonnée du prix de l'objet. Ce paramètre est une sorte de commutateur. Sa valeur non nulle assimile cette fonction à SetTLine(), c'est-à-dire qu'une ligne de tendance sera dessinée en utilisant le couple de coordonnées temps/prix, tandis que la valeur de l'angle de pente de la ligne de tendance sera ignorée. Valeur par défaut - 0 - la ligne de tendance sera dessinée par l'angle de pente.
  • an - Angle de pente en degrés. Valeur par défaut - 0 - Ligne horizontale.
  • 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_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Exemples d'utilisation de SetTLineByAngle().

  1. Faisceau plein orange à un angle de 45° par rapport au minimum de la 5ème barre.
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. Un éventail de rayons en pointillés rouges à partir du minimum de la 13ème barre.
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

ZY. Vous trouverez ci-joint un script pour tester SetTLineByAngle().

Dossiers :
 

La fonction SetArrow().

Cette fonction définit l'icône de l'objet OBJ_ARROW sur le graphique actuel.

  • cd - code de l'icône. Paramètre requis.
  • cl - Couleur de l'icône. Paramètre requis.
  • nm - Nom de l'objet. Si la valeur par défaut est transféré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 barre actuelle.
  • p1 - Première coordonnée de l'objet fixant le prix. Valeur par défaut - 0 - prix d'offre actuel.
  • sz - Taille de l'icône. Valeur par défaut - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

Exemples d'utilisation de SetArrow().

  • Le marqueur de prix gauche doré au sommet de la 9ème barre.
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • Marque rouge du prix de droite au maximum de la 2ème barre.
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3. Flèche bleue au-dessus du maximum de la 2ème barre.
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

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

Dossiers :
 
Merci beaucoup pour ce que vous faites. Cela vous dérange-t-il si je rassemble les caractéristiques de ce fil de discussion et que je les publie sur mon site web, dans une section séparée avec un lien vers le forum et vers votre site ?
 

En général, il serait cool d'avoir une "Table des matières" sur la première page de ce post. Un tableau avec une liste de fonctions, des descriptions et des liens vers des pages. Vous pouvez aussi conserver une archive mise à jour sur la première page, et les descriptions se trouvent sur les autres pages.

Donc, si xrust fait sa suggestion, il serait bon de la répéter ici. Pour le bien de la systématisation de ce qui a été durement gagné :))

 
xrust писал (а) >>
...cela vous dérange-t-il si je rassemble des éléments de ce fil de discussion et que je les publie sur mon site web, dans une section séparée avec un lien vers le forum et vers votre site ?

Non, je ne le ferai pas...

 
xrust писал (а) >>
Merci beaucoup pour ce que vous faites, cela vous dérangerait-il que je rassemble les fonctions de cette branche et que je les mette sur mon site, dans une section séparée avec une référence au forum et à votre site ?

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. Pour que chacun dans chaque EA ne doive pas réinventer la roue.

:)

 
Merci encore, je suis juste un peu paresseux, je veux tout rassembler à portée de main. Autre question, cela vous dérangerait-il que j'utilise la même syntaxe et les mêmes noms de variables que vous dans mes fonctions, afin de les normaliser, pour ainsi dire.