Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 367

 
Artyom Trishkin:

Honnêtement, je n'ai jamais utilisé ces ressources SB. Mais qu'est-ce qui vous empêche de regarder dans le SB où là, par quelles méthodes, les couleurs sont fixées. Ce que vous avez montré dans la liste :

- sont des noms d'objets - classes CPanel, CEdit, CBmpButton et CWndClient.

Et vous devez trouver les noms des membres de ces classes où les couleurs sont stockées et par quelles méthodes elles peuvent être initialisées ou modifiées.

Et vous devrez probablement les initialiser d'abord, puis construire l'objet lui-même.

Les couleurs sont définies dans Defines, puis les objets sont colorés par ObjectSetInteger(). Pour l'instant, je peins aussi directement avec cette méthode. Mais j'aimerais l'essayer par le biais d'OOP. Comme je le vois, s'il n'existe pas de méthode publique distincte à modifier, il n'y a aucun moyen d'accéder au membre privé. Je ne suis pas très au fait de l'héritage et des méthodes virtuelles, je suis encore en train de "nager" et d'étudier le sujet. Ok, je vais essayer de demander au service-desk de créer une méthode publique pour la coloration, et si c'est possible de le faire d'une autre manière, peut-être qu'ils me diront comment.
 
LRA:
Cliquez sur le message d'erreur. Le curseur indique le nom de la variable. Il doit être déclaré
Merci !
 
Kedrov:
Merci !

Vous ne devez pas publier de code décompilé sur ce forum. Je comprends que vous n'ayez pas posté de code, juste une image. Mais cela signifie que vous travaillez avec des produits logiciels volés. C'est fortement déconseillé ici - c'est... comment dire... une violation de l'éthique communautaire. Ici, sur le forum et la part du lion des utilisateurs du forum sont des programmeurs - nous écrivons notre propre code ou utilisons les travaux publics de nos collègues. Pendant que vous utilisez et refaites le code volé de quelqu'un d'autre (peut-être celui de quelqu'un d'autre ici aussi). En général, ce n'est pas une bonne idée de commencer vos activités ici.

 
Vasiliy Pushkaryov:
Les couleurs sont définies dans Defines, puis les objets sont colorés à l'aide des fonctions ObjectSetInteger(). En ce moment, je peins aussi directement avec cette méthode. Mais j'aimerais l'essayer par le biais d'OOP. Comme je le vois, s'il n'existe pas de méthode publique distincte à modifier, il n'y a aucun moyen d'accéder au membre privé. Je ne suis pas très au fait de l'héritage et des méthodes virtuelles, je suis encore en train de "nager" et d'étudier le sujet. Ok, je vais essayer de demander au service-desk de créer une méthode publique pour la coloration, et si c'est possible d'une autre manière, peut-être qu'ils me diront comment faire.

Copiez temporairement cette classe dans votre dossier Include\your_folder et mettez-y les variables membres de laclasse dont vous avez besoin pour stocker les couleurs et les méthodes publiques pour les définir et les renvoyer.

De plus, vous pourrez faire ce dont vous avez déjà besoin. Moins - lorsque vous mettez à jour le SB de la classe d'origine, il peut y avoir des raffinements, et vous devrez copier et coller à nouveau les méthodes dont vous avez besoin dans la classe mise à jour.

... C'est étrange qu'il n'y ait pas de possibilité de changer la couleur tranquillement - sans définir ...

 

Comment puis-je obtenir rapidement des informations sur le volume (nombre total de lots) de toutes les positions ouvertes sur tous les instruments ? Veuillez partager la fonction.

 
Aleksey Vyazmikin:

Comment puis-je obtenir rapidement des informations sur le volume (nombre total de lots) de toutes les positions ouvertes sur tous les instruments ? Veuillez partager la fonction.


Fonction GetAmountLotFromOpenPos().

Cette fonction renvoie le nombre de lots des positions ouvertes. Une sélection plus précise des positions de comptage est spécifiée par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions du symbole spécifié. La valeur par défaut -"" signifie tout instrument du marché.NULL signifie l'instrument actuel.
  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut-1 signifie une position quelconque.
  • mn- Identificateur de position, MagicNumber. La valeur par défaut-1 signifie n'importe quel identifiant.

 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Vladimir Zubov:

Merci.

 

Veuillez répondre à la question suivante : Zig-zag par seuil(profondeur(en points, les hauts(bas) sont formés après avoir passé n-points, profondeur=Depth*Point). Il y a une chaîne de points (ArrUp(ArrDn)) qui montre le dessin par addition du zigzag, c'est-à-dire que le dernier point était ArrUp, puis la profondeur est descendue et le premier point ArrDn est formé, après cela une série de points ArrDn, au fur et à mesure que le prix descend (dessin par addition). Nous devons construire l'algorithme de manière à ce qu'il y ait une indentation de profondeur. Peut-être une boucle for, je n'arrive pas à comprendre.

//+------------------------------------------------------------------+
//|                                                       FastZZ.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
//---
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 DodgerBlue
#property indicator_width3 3
#property indicator_width4 3

//--- input parameters
extern int  Depth=10;
//---
double zzH[],zzL[];
double depth;
int last,direction,pbars;
datetime lastbar;
double ArrUp[];
double ArrDn[];
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,zzH);
   SetIndexBuffer(1,zzL);
   SetIndexBuffer(2,ArrUp);
   SetIndexBuffer(3,ArrDn);
   SetIndexStyle(0,DRAW_ZIGZAG);
   SetIndexStyle(1,DRAW_ZIGZAG);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(2,159);
   SetIndexArrow(3,159);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits);
//----
   depth=Depth*Point;
   direction=1;
   last=0;
   pbars=0;
   lastbar=0;
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   int limit=Bars-IndicatorCounted()-1;
   if(lastbar!=Time[0])
     {
      lastbar=Time[0];
      last++;
     }
   if(MathAbs(Bars-pbars)>1) { last=Bars-1; limit=last;}
   pbars=Bars;
//---
   for(int i=limit; i>0; i--)
     {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      ArrUp[i]=EMPTY_VALUE;
      ArrDn[i]=EMPTY_VALUE;
      //---
      if(direction>0)
        {
         if(High[i]>zzH[last])
           {
            zzH[last]=0;
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<High[last]-depth)
              {
               if(Open[i]<Close[i])
                 {
                  zzH[last]=High[last];
                  ArrUp[last]=High[last];
                 }
               else direction=-1;
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            last=i;
            set=true;
           }
         if(Low[i]<zzH[last]-depth && (!set || Open[i]>Close[i]))
           {
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>zzL[i]+depth && Open[i]<Close[i])
              {
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            else direction=-1;
            last=i;
           }
        }
      else //direction<0
        {
         if(Low[i]<zzL[last])
           {
            zzL[last]=0;
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>Low[last]+depth)
              {
               if(Open[i]>Close[i])
                 {
                  zzL[last]=Low[last];
                  ArrDn[last]=Low[last];
                 }
               else direction=1;
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            last=i;
            set=true;
           }
         if(High[i]>zzL[last]+depth && (!set || Open[i]<Close[i]))
           {
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<zzH[i]-depth && Open[i]>Close[i])
              {
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            else direction=1;
            last=i;
           }
        }
     }
//----
   zzH[0]=0;
   zzL[0]=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Bonjour à tous.

Apprenez-moi comment arrêter l'EA et recommencer quand une nouvelle bougie apparaît.

Raison: