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

 

Est-il possible de dupliquer un objet Ccanvas?


Je crée un objet avec Ccanvas et dans le processus, je dois créer des doublons. Parfois 10-20 et parfois 100-200.

Une fois, l'objet est définitivement dessiné. Y a-t-il un moyen de le reproduire ?

 
Sergey Likho:

Est-il possible de dupliquer un objet Ccanvas ?


Je crée un objet avec Ccanvas et dans le processus, je dois créer des doublons. Parfois 10-20 et parfois 100-200.

Une fois, l'objet est définitivement dessiné. Y a-t-il un moyen de le reproduire ?

CCanvas *canv = nouveau CCanvas
Mais il ne s'agit pas de dupliquer un existant. Il en crée un nouveau et un pointeur vers lui.
 
Artyom Trishkin:
CCanvas *canv = nouveau CCanvad

Je voulais dire un objet graphique.

   CCanvas obj;
   obj.CreateBitmapLabel(0,1,name,x,y,x_size,y_size,COLOR_FORMAT_ARGB_NORMALIZE);
   obj.FillRectangle(0,0,x_size,y_size,ColorToARGB(Color,Alpha));
   obj.Update(false);


Как сделать 10 копий с измененными координатами?
 
Sergey Likho:

Je voulais dire un objet graphique.

Je t'ai montré. Si vous ne savez pas à l'avance combien d'objets doivent être créés, vous ne pouvez le faire qu'au moyen de new.
Si le nombre est connu, alors
obj1, obj2, obj3,...,objN
 
Igor Makanu:

Je peux me tromper, mais votre lien sera le fil de l'auteur, mais vous devez feuilleter tout le fil, Igor semble avoir posté des codes légèrement bruts, et puis parfois réécrit ce qui avait besoin d'être amélioré, mais encore une fois je peux me tromper - j'ai feuilleté ce fil il y a environ 5-6 ans, je ne me souviens plus.

Vous ne vous trompez pas. J'ai récemment feuilleté l'ensemble du fil de l'auteur. Cela m'a pris environ 2-3 jours. Dans le sujet de l'auteur compte tenu de l'éloignement de l'écriture de certaines de ses caractéristiques ne sont plus pertinentes (ou du moins il m'a semblé).Lu absolument tout et très actuel et non pertinent peu. Et comme vous l'avez remarqué, il y avait des erreurs qui apparaissaient après 2 ou 3 pages, voire plus, lorsque quelqu'un décidait d'utiliser sa fonction, trouvait l'erreur et la corrigeait en disant simplement qu'il y avait une erreur, ou la signalait. Ainsi, même 10 pages plus loin, la même fonction peut réapparaître, soit corrigée, soit améliorée (le temps a passé et il a voulu l'améliorer).

Donc, si quelqu'un n'a sorti que le sujet le plus important et le plus pertinent, vous ne pouvez que lui dire merci et gagner beaucoup de temps.

 
Comment puis-je passer un pointeur vers une fonction (c'est-à-dire écrire une fonction qui prend un pointeur vers une fonction comme argument) comme paramètre ? Je l'ai déjà fait dans mql4, mais j'ai perdu une copie du fichier où se trouvait cet exemple.
 
Seric29:
Comment passer un pointeur vers une fonction (la fonction prend un pointeur vers la fonction comme argument) comme paramètre ? Je l'ai déjà fait avec mql4 mais j'ai perdu une copie du fichier d'exemple.

MQL a-t-il jamais supporté les pointeurs de fonction ? Je ne pense pas. Une solution consiste à envelopper la fonction dans une classe et à passer le pointeur à l'objet.

 
Sergey Popov:

Bonjour à tous !

Je veux écrire une fonction dans mon EA qui interdit le trading dans les 2 premières heures après le début du trading.

Mais je suis confronté au fait que iTime(Symbol(),1440, 0) ne renvoie pas correctement l'heure d'ouverture de la bougie du jour.

Plus précisément : le 26.12.2019, le marché a ouvert à 06:00:00, mais iTime détermine 00:00:00.

Comment calculer exactement l'heure d'ouverture de la journée ?

SymbolInfoSessionTrade m'aidera à trouver l'heure de négociation. Je ne sais pas si cela reflète les changements pour Noël et les autres fêtes.

 
Aleksey Mavrin:

MQL a-t-il jamais supporté les pointeurs de fonction ? Je ne pense pas. Une solution consiste à envelopper la fonction dans une classe et à transmettre un pointeur vers l'objet.

C'est le cas. Ceci est fait en utilisant le spécificateur typedif read help mais le schéma est différent du c++. J'ai trouvé un forum où une personne a écrit ce code mais je n'ai pas enregistré le fichier et j'ai redémarré le système, bien sûr le fichier a été supprimé. Mais l'aide montre un exemple simple et j'avais un exemple sur lequel je posais une question.

 
Aleksey Mavrin:

MQL a-t-il jamais supporté les pointeurs de fonction ? Je ne pense pas. Une solution consiste à envelopper la fonction dans une classe et à passer le pointeur à l'objet.

Vous pouvez, code à reproduire :

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TFuncvoidPTR f_ptr[3];
   f_ptr[0] = f_1;
   f_ptr[1] = f_2;
   f_ptr[2] = f_3;
   for(int i=0;i<ArraySize(f_ptr);i++)
   {
      printf("Вызываю фунцию № %i ",i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() {Print("Это вызов функции : ",__FUNCTION__);}
void f_2() {Print("Это вызов функции : ",__FUNCTION__);}
void f_3() {Print("Это вызов функции : ",__FUNCTION__);}

2019.12.30 18:30:55.518 Script tst EURUSD,H1 : supprimé

2019.12.30 18:30:55.511 tst EURUSD,H1 : uninit reason 0

2019.12.30 18:30:55.511 tst EURUSD,H1 : Ceci est un appel de fonction: f_3

2019.12.30 18:30:55.511 tst EURUSD,H1 : Appel de la fonction numéro 2

2019.12.30 18:30:55.511 tst EURUSD,H1 : C'est l'appel de la fonction : f_2

2019.12.30 18:30:55.511 tst EURUSD,H1 : Appel de la fonction #1

2019.12.30 18:30:55.511 tst EURUSD,H1 : Ceci est l'appel de la fonction : f_1

2019.12.30 18:30:55.511 tst EURUSD,H1 : Appel de la fonction n° 0

2019.12.30 18:30:55.511 tst EURUSD,H1 : initialisé

2019.12.30 18:30:55.496 Script tst EURUSD,H1 : chargé avec succès