[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 98

 

Bonjour ! Veuillez m'aider avec la fonction ArrayMo (elle renvoie le maximum de la courbe de densité).

double ArrayMo(double& x[], int d=4) {
  double e, s=0;
  double m[][2];             // временный массив:
                             //  столбец 1 - количество значений
                             //  столбец 2 - значения
  int    i, k=ArraySize(x);
  int    n;                  // номер строки временного массива m
  int    r;                  // количество строк во временном массиве m

  if (k>0) {
    for (i=0; i<k; i++) {
      e=NormalizeDouble(x[i], d);
      n=ArraySearchDouble(m, e);
      if (n<0) {
        r=ArrayRange(m, 0);
        ArrayResize(m, r+1);
        m[r][0]++;
        m[r][1]=e;
      } else m[n][0]++;
    }
    ArraySort(m, WHOLE_ARRAY, 0, MODE_DESCEND);
    s=m[0][1];
  } else Print("ArrayMo(): Массив пуст!");

  return(s);
}

Les questions suivantes ont été soulevées :

Quel est l'objectif de la création d'un tableau temporaire ?

m[][2]

2) On ne sait pas très bien d'où proviendront les valeurs du tableau temporaire, et donc on ne sait pas très bien comment ce tableau peut être interrogé :

n=ArraySearchDouble(m, e)

3. Et puis généralement pour moi la vérité est profondément cachée))))). Une fois que nous avons constaté qu'il n'y a pas de valeur, nous commençons à déterminer la taille du tableau des "valeurs incompréhensibles".

J'apprécierais vraiment un rayon de lumière dans cette histoire)))).


 
Foxy, qu'en est-il du code de la fonction ArraySearchDouble, est-il présent ? Sans elle, il serait beaucoup plus difficile de comprendre ce que fait le programme).
 

Bonjour ! Voici la fonction de trailing stop, vérifiez si elle est correcte. Comme mon code va changer radicalement, il sera difficile de gérer les erreurs lorsque je commencerai à le modifier.

void TrailStop(int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
    if (TStop>0)
      {
       OrderSelect(ticket, SELECT_BY_TICKET);
       if(OrderType()==OP_BUY)
         {
          if(Bid - OrderOpenPrice()>Point*TStop)
            {
             if(OrderStopLoss()<Bid-Point*TStop)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Bid-Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
            else{ }
         }
       else if (OrderType()==OP_SELL)
         {
          if(OrderOpenPrice() - Ask>Point*TStop)
            {
             if(OrderStopLoss()>Ask + TStop*Point)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Ask+Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
          else { }
         }
       else { }
      }
    else { }
    }
 
gogent:

Bonjour ! Voici la fonction de trailing stop, vérifiez si elle est correcte. Je vais changer mon code de façon radicale, il sera difficile de gérer les erreurs lorsque je commencerai à le modifier.

Vous ne prenez pas en compte le Stoplevel, donc si vous n'avez pas ECN/NDD, vous pouvez obtenir l'erreur "wrong stops".

Et en général, après OrderModify, il est préférable de traiter toutes les erreurs, juste au cas où.

 
alsu:
Foxy, qu'en est-il du code de la fonction ArraySearchDouble, est-il présent ? Sans elle, il serait beaucoup plus difficile de comprendre ce que fait le programme).


Ce sont toutes des fonctions de KimIV, et c'est ce que j'essaie de comprendre. Voici le code :


Cette fonction recherche un élément d'un tableau en utilisant une valeur de type double et renvoie l'index de l'élément trouvé ou -1. La fonction ne trouve qu'un seul élément et arrête la recherche si le résultat est positif.

  • m - Le tableau dans lequel l'élément est recherché.
  • e - La valeur de type double à trouver dans le tableau m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
 
Professionnels, qu'est-ce que je fais mal ? Je dois redessiner la fenêtre de l'indicateur lorsqu'une nouvelle barre apparaît. If (Bars != Prebars) WindowRedraw() ;
ne fonctionne pas. PreBars est égal au nombre de barres du tick précédent. Peut-être l'ai-je mis au mauvais endroit ou dans la mauvaise fonction ?
 
kon12:
Professionnels, qu'est-ce que je fais mal ? Je dois redessiner la fenêtre de l'indicateur lorsqu'une nouvelle barre apparaît. si (Bars != Prebars) WindowRedraw() ;
cela n'aboutit à rien. Peut-être que je l'ai mis au mauvais endroit ou que quelque chose ne va pas ?

Vous devez d'abord le dessiner pour pouvoir redessiner quelque chose.
 
sergeev:

Pour redessiner quelque chose, vous devez d'abord le dessiner.


Tout est dessiné parfaitement, l'indicateur est basé sur un zigzag, mais lorsque de nouvelles barres apparaissent, la courbe devrait être redessinée entièrement, mais il ajoute seulement la valeur de l'indicateur dans une nouvelle barre...

int init() {
SetIndexBuffer(0,ZZ) ;
SetIndexStyle(0,DRAW_SECTION) ;
SetIndexEmptyValue(0,0.0) ;

 
kon12:


Tout est bien dessiné, l'indicateur est basé sur un zigzag, mais lorsque de nouvelles barres apparaissent, la courbe devrait être redessinée entièrement, mais elle ajoute seulement la valeur de l'indicateur dans la nouvelle barre...

int init() {
SetIndexBuffer(0,ZZ) ;
SetIndexStyle(0,DRAW_SECTION) ;
SetIndexEmptyValue(0,0.0) ;

WindowRedraw() redessine les objets graphiques. Cela n'a rien à voir avec les tampons.
 
Zhunko:
WindowRedraw() redessine les objets graphiques. Cela n'a rien à voir avec les tampons.

Je l'ai... Si une autre façon de redessiner ?