Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 650

 
AlexeyVik:

Si je comprends bien, il doit obtenir les paramètres de l'objet à partir d'une autre carte.

S'il provient d'une autre carte, qu'il utilise la variante de fonction avec l'identifiant de la carte.

pas de problème non plus.

 
sergeev:

S'il s'agit d'un graphique différent, laissez-le utiliser une variante de fonction avec un identifiant de graphique.

pas de problème non plus.

Tout à fait exact, mais je n'ai pas encore eu besoin d'utiliser un identificateur de graphique et je n'en ai qu'une connaissance théorique, c'est pourquoi j'ai proposé l'option de mapper les objets sur le graphique actuel.
 
rov_kvn:



C'est génial ! C'était exactement le but. Merci, cher camarade !
 
sergeev:

S'il s'agit d'un graphique différent, laissez-le utiliser une variante de fonction avec un identifiant de graphique.

pas de problème non plus.


Si je comprends bien, les seules options sont ObjectGetDouble() pour le prix et ObjectGetInteger() pour la date dans mon cas.

J'essaie d'obtenir le prix de la TF actuelle avec chart_id = 0.

double price1 = ObjectGetDouble(0,"Supply",3);

- comme il se doit. J'ai essayé les deux ID et les valeurs d'ici https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes au lieu de 0, mais cela renvoie 0. À quoi devrait ressembler un chart_id "correct" ?

 
.roman.:

Si je comprends bien, les seules options sont ObjectGetDouble() pour le prix et ObjectGetInteger() pour la date dans mon cas.

J'essaie d'obtenir le prix de la TF actuelle avec chart_id = 0.

- comme il se doit. J'ai essayé les deux ID et les valeurs d'ici https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes au lieu de 0, mais cela renvoie 0. À quoi devrait ressembler un chart_id "correct" ?

chart_id = 0 n'est pas le TF, c'est le graphique actuel. Vous devez trouver le chart_id pour le graphique qui a l'objet désiré. C'est ce que je n'ai pas fait parce que c'était temporairement inutile.
 
.roman.:

Si je comprends bien, les seules options sont ObjectGetDouble() pour le prix et ObjectGetInteger() pour la date dans mon cas.

Essayer d'obtenir le prix dans la TF actuelle avec chart_id = 0

double price1 = ObjectGetDouble(0,"Supply",3);


Qu'est-ce que 3?



- La valeur est ce qu'elle devrait être. J'ai essayé les deux ID et les valeurs d'ici https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes au lieu de 0, mais cela renvoie 0. À quoi devrait ressembler un chart_id "correct" ?

Quel est le rapport entre les périodes TF et le chart_id ?


vous avez un trou irréaliste dans votre compréhension de ce qu'il faut utiliser


Décrivez votre problème, ne soyez pas trop obscur et tournez autour du pot.

Pour récupérer les données d'un objet, de quoi ai-je besoin ?

- ObjectGet Pourquoi n'avez-vous pas aimé ?

 
sergeev:

Qu'est-ce que 3?


La valeur du prix de la limite inférieure du rectangle. https://docs.mql4.com/constants/objectconstants/enum_object_property


Quel est le rapport entre les périodes TF et l'ID graphique ?

Je ne sais pas comment. C'est pourquoi j'essaie de le faire moi-même et de demander, puisque j'ai échoué.

sergeev:
décrivez votre tâche, ne vous laissez pas aller à l'obscurité et au tâtonnement. de quoi avez-vous besoin exactement ? obtenir des données d'un objet ? - ObjectGet Qu'est-ce qui ne va pas ?

Vous demandez sérieusement ? J'ai déjà écrit 3 fois que j'ai besoin de récupérer les données des rectangles (2 coordonnées de prix et 2 coordonnées de temps utilisées pour construire les rectangles) à partir de deux autres horizons temporels (H4 et D), tout en étant sur le troisième (H1).

ObjectGet ne convient pas car il ne peut rien recevoir d'une autre période.

L'indicateur dessine des rectangles sur tous les timeframes et j'y ai ajouté du code, il transmettra les coordonnées des rectangles des autres timeframes sans y passer. Je ne sais pas comment l'expliquer autrement.

 
.roman.:

La valeur du prix de la limite inférieure du rectangle. https://docs.mql4.com/constants/objectconstants/enum_object_property



Je ne sais pas comment. C'est pourquoi j'essaie de le faire par intuition et en demandant, parce que ça n'a pas marché.

Vous demandez sérieusement ? J'ai déjà écrit 3 fois que j'ai besoin de récupérer les données des rectangles (2 coordonnées de prix et 2 coordonnées de temps pour construire les rectangles) à partir de deux autres horizons temporels (H4 et D), tout en étant sur le troisième (H1).

ObjectGet ne convient pas parce que je ne peux rien obtenir d'une autre période avec lui.

Il dessine des rectangles sur toutes les périodes et je suis en train de lui ajouter un code qui lui permettra de transmettre les coordonnées des rectangles d'autres périodes sans passer à ces dernières.

Comprenez simplement qu'un autre horizon temporel et un autre graphique ou diagramme sont des concepts différents et donc des approches différentes pour résoudre les problèmes.
 
AlexeyVik:
Comprendre qu'un TF différent et un tableau ou une carte différente sont des concepts différents et donc des approches différentes pour résoudre les problèmes.

Je suis donc tout à fait disposé à comprendre et à accepter toute solution, si j'ai des idées. C'est pourquoi je demande des conseils sur la manière de le mettre en œuvre.
 
Top2n:

Merci ! Bien reçu. Sauf qu'avec l'erreur OrderSelect, on ne sait pas comment s'arrêter sauf pourcontinuer.

Suppression du message tardif, j'ai fait presque la même chose que ce qui est décrit.

Parfois, vous pouvez combiner la valeur de retour et le signe d'erreur. Quand il est logique de prendre une certaine valeur comme un signe d'erreur. Par exemple, un prix moyen égal à 0.

Ensuite, dès que OrderSelect() renvoie un signe d'erreur, notre fonction renverra un signe d'erreur :

#property strict

/******************************************************************************/
double CenaUsrednenija(const int type,const int Magic){
  double nn = 0, bb = 0;

  for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() == Symbol() && OrderType() == type && OrderMagicNumber() == Magic)
      {
        double op = OrderOpenPrice();
        double llot = OrderLots();

        bb += op * llot;
        nn += llot;
        Print("  type = ", type, " Цена открытия = ", op, " Лот = ", llot, " itog = op * llot = ", op * llot, " factb = bb / nn = ", bb / nn);
      }
    } else {
      return 0; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
    }
  }

  return nn != 0 ? NormalizeDouble(bb / nn, _Digits) : 0; // Делить на 0 не следует
}

/******************************************************************************/
void OnStart() {
  Print("CenaUsrednenija(OP_BUY, 536525) = ", CenaUsrednenija(OP_BUY, 536525));
}

Je me débrouille tout seul, je l'ai :

23:32:03 Script 1 EURUSD,H1: loaded successfully
23:32:03 1 EURUSD,H1: initialized
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.36626
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.367785
23:32:03 1 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525) = 1.36779
23:32:03 1 EURUSD,H1: uninit reason 0
23:32:03 Script 1 EURUSD,H1: removed

Il semble que ce soit vrai...

Oui, je n'ai pas utilisé d'expression conditionnelle dans Print() pour éviter une hypothétique division par 0 car ce Print() est un débogage...