Fonctions utiles de KimIV - page 33

 

La fonction SetVLine().

Cette fonction définit la ligne verticale de l'objet OBJ_VLINE sur le graphique courant.

  • cl - Couleur de l'objet VERTICAL LINE. Paramètre obligatoire.
  • 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 d'objet.
  • t1 - Temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la barre actuelle.
  • 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Exemples d'utilisation de SetVLine().

  1. Ligne verticale bleue pleine sur la barre actuelle.
    SetVLine(Aqua);
  2. Ligne épaisse lilas sur la huitième barre.
    SetVLine(Magenta, "", Time[8], STYLE_SOLID, 3);
  3. Grille de lignes pointillées sur les barres 14:00.
    for (int i=0; i<7; i++) {
      datetime dt=StrToTime((TimeToStr(TimeCurrent()-i*1440*60, TIME_DATE))+" 14:00");
      int nb=iBarShift(NULL, 0, dt, True);
      SetVLine(Coral, "VLine"+i, Time[nb], STYLE_DOT);
    }

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

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

EXECUTIF. >> JE VAIS LE FAIRE.

Montre-moi une photo, essayons d'en faire une.

 
TheXpert писал (а) >>

Montrez-le dans la figure, essayons de le faire.

Une fonction personnalisée qui calcule les zones décrites par l'indicateur, par exemple le RSI et la ligne médiane.

L'espace délimité par la courbe sous la ligne médiane et la ligne médiane elle-même est l'aire -S1, et au-dessus de la ligne médiane est +S2.

Posté à https://www.mql5.com/ru/forum/109590 pour ne pas interférer.

 

La fonction SetTLine().

Cette fonction définit l'objet ligne de tendance OBJ_TREND sur le graphique en cours.

  • cl - Couleur de l'objet TREND LINE. Il s'agit d'un paramètre obligatoire.
  • 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. Valeur par défaut - 0 - barre actuelle basse.
  • ry - Indicateur de la propriété BLEU. 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_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=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 (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
 

Exemples d'utilisation de SetTLine().

  1. Ligne solide orange passant par les minima de la 15ème barre et de la barre actuelle.
    SetTLine(Orange, "", Time[15], Low[15], 0, Low[0], True);
  2. Ligne de tendance rouge passant par les sommets des 35ème et 10ème barres.
    SetTLine(Red, "", Time[35], High[35], Time[10], High[10]);
  3. Rayon lilas épais à travers les sommets des deux jours précédents.
    datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
    datetime d1=TimeCurrent()-24*60*60;
    while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
    d1=StrToTime(TimeToStr(d1, TIME_DATE));
    datetime d2=d1-24*60*60;
    while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
    d2=StrToTime(TimeToStr(d2, TIME_DATE));
    int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
    int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
    int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
    int n2=iHighest(NULL, 0, MODE_HIGH, b2-b1-1, b1);
    int n1=iHighest(NULL, 0, MODE_HIGH, b1-b0-1, b0);
    datetime t1=Time[n2];
    double   p1=High[n2];
    datetime t2=Time[n1];
    double   p2=High[n1];
    SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);

HH. Vous trouverez ci-joint un script pour tester la fonction SetTLine().

Dossiers :
 

Igor, je m'adresse à vous en tant que codeur MQL4 plus expérimenté.

J'ai commencé à écrire une bibliothèque pour le réseau de Kohonen.

Je veux le rendre aussi flexible et pratique que possible, mais j'ai été confronté à un moment que je ne peux pas encore surmonter.

Exemple1 :

int& value; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue(int& newValue)
{
   value = newValue;
}
 
void SetValue(int newValue)
{
   value = newValue;
}
 
int init()
{
   int someValue = 5;
   AssignValue(someValue);
   SetValue(10);
   Print(someValue); // очень хочется, чтобы вывелось 10
}

Est-il possible de faire cela en utilisant MQL4, et comment, si oui ?



Exemple2 :

void SetSize(double& matrix[][], int inSize, int outSize)
{
    // требуется установить размеры матрицы, не осилил
}
 
void Init(double& matrix[][])
{
    // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

Encore une fois, si c'est possible, veuillez me donner le code. Cet exemple me semble réalisable.



Merci d'avance.

 
TheXpert писал (а) >>
Je veux le rendre le plus flexible et le plus pratique possible, mais j'ai fait face à un moment que je ne peux pas encore surmonter.
>> Exemple1 :
Est-il possible de le faire avec les outils MQL4 et comment, si oui ?

Je comprends que vous voulez organiser le travail avec des pointeurs. Pour qu'une variable pointe vers une autre... Ou peut-être que je me trompe ? Essayez d'expliquer avec des mots ce dont vous avez besoin.

TheXpert a écrit >>
Exemple2 :
Encore une fois, s'il est possible de faire une telle chose, veuillez me donner le code. Cet exemple me semble pouvoir être mis en œuvre.
void start()
{
  double arr[3][2];
  Init(arr);
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<2; j++)
    {
      Print("arr[",i,"][",j,"]=",arr[i][j]);
    }
  }
}
void Init(double& matrix[][])
{
  ArrayInitialize(matrix, 1);
}
 
KimIV писал (а) >>

Je comprends que vous voulez organiser le travail avec des pointeurs. Pour qu'une variable pointe vers une autre... Ou peut-être que je me trompe ? Essayez d'expliquer avec des mots ce dont vous avez besoin.

Oui, en quelque sorte.


A propos de la seconde -- pourquoi ne pas initialiser avec des valeurs aléatoires ?

Oui, j'ai aussi besoin de tableaux dynamiques.

 
TheXpert писал (а) >>
Oui, en quelque sorte.

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.

TheXpert a écrit (a) >>
A propos de la seconde -- qu'en est-il de l'initialisation avec des valeurs aléatoires ?

MathRand()

TheXpert a écrit (a) >>
Oui, j'ai aussi besoin de tableaux dynamiques.
Seule la première dimension du tableau peut être modifiée de manière programmatique. La fonction ArrayResize(). Les deuxième, troisième et quatrième dimensions doivent être fixées de manière rigide.