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

 
vladmirad:

Merci pour le conseil, je suis au courant de ces fonctions.

Savez-vous pourquoi tant de gens, vous y compris, répondent à ceux qui connaissent mql comme une hache. Et ils ignorent les conseils de ceux qui savent ? Si vous n'en avez pas, consultez ce conseil :

Le forum sur le trading, les systèmes de trading automatisés et les tests de stratégies.

Toute question des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes

Artyom Trishkin, 2020.06.29 00:03

Bonjour.
Commencez par surveiller l'état du graphique dans OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent
Vous avez besoin de quelques événements :
CHARTEVENT_OBJECT_CREATE Créer un objet graphique
CHARTEVENT_OBJECT_CHANGE Modifier les propriétés de l'objet graphique via la boîte de dialogue des propriétés
CHARTEVENT_OBJECT_DELETE Supprimer l'objet graphique
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
Enregistrer tous les paramètres du gestionnaire OnChartEvent() et voir leurs valeurs lors de l'ajout/modification/suppression d'objets graphiques. Cela vous indiquera où aller.

 
vladmirad:

Merci pour le conseil, je connais ces fonctions.
Mais comment pouvons-nous les utiliser pour trouver automatiquement un objet sur le graphique et lire ses paramètres, si nous ne connaissons pas son nom a priori ?
Lorsque l'on dessine un objet sur un graphique avec la souris, le système lui donne un nom.

Bien sûr, il n'est pas difficile d'organiser la saisie manuelle de toutes les données nécessaires de l'objet à partir de sa table de propriétés, mais alors pourquoi l'automatisation ?
Mais comment donner programmatiquement à une EA le nom d'un objet pour qu'elle puisse utiliser toutes les fonctions que vous avez mentionnées, n'est toujours pas clair pour moi...

Comme indiqué ci-dessus, travaillez avec des événements graphiques :

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool applyObject(const string _objName) {
  if(MessageBox("Сохранить параметры объекта \"" + _objName + "\" для эксперта?", "ObjChange", MB_YESNO) == IDYES) {
    objName = _objName; // Запись имени изменяемого объекта
    // Запись других параметров изменяемого объекта ...
    return true;
  }
  return false;
}

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
) {
//---
  if(id == CHARTEVENT_OBJECT_CREATE || id == CHARTEVENT_OBJECT_DRAG || id == CHARTEVENT_OBJECT_CHANGE) {
    applyObject(sparam);
  }
}
Dossiers :
ObjChange.mq5  5 kb
 
Artyom Trishkin:
Bonjour.
Commencez par suivre l'état du graphique dans OnChartEvent() https://www.mql5.com/ru/docs/event_handlers/onchartevent
Vous avez besoin de quelques événements :
CHARTEVENT_OBJECT_CREATE Créer un objet graphique
CHARTEVENT_OBJECT_CHANGE Modifier les propriétés d'un objet graphique via la boîte de dialogue des propriétés
CHARTEVENT_OBJECT_DELETE Supprimer un objet graphique
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents
Enregistrer tous les paramètres de OnChartEvent() et voir leurs valeurs lorsque vous ajoutez/modifiez/supprimez des objets graphiques. Cela vous indiquera où aller.

Merci beaucoup, j'ai déjà suivi vos conseils !

 
Mihail Matkovskij:

Vous pouvez trouver et enregistrer les objets d'un type donné avec leurs coordonnées comme suit :

Vous pouvez enregistrer n'importe quelle donnée dans un fichier. Et dans l'Expert Advisor, créez un chargeur qui ajoutera les objets appropriés, puis chargera les données du fichier dans ces objets. Mais vous avez au moins esquissé un code source pour votre tâche spécifique et l'avez publié ici.

Merci aussi à vous, Michael, pour votre aide pratique !
 
Mihail Matkovskij:

Comme indiqué ci-dessus, travaillez avec les événements du graphique :

Michael, votre aide et celle de @Artyom Trishkin ont été très utiles !

Nous devons maintenant trouver le point de croisement entre le graphique des prix et l'objet trouvé, dans ce cas, la ligne de tendance.

L'algorithme est le suivant :
1. En utilisant les coordonnées de lecture de la ligne de tendance, nous calculons le coefficient d'augmentation de la tendance pour 1 barre du TF sélectionné.
2. Calcule la coordonnée du prix de la ligne de tendance sur la barre courante et surveille le franchissement par le graphique de ce point pendant la TF sélectionnée.
3. Si c'est le cas, nous procédons au traitement de cet événement, par exemple, l'ouverture d'une commande. Dans le cas contraire, la procédure est répétée pour la mesure suivante.

Mais peut-être que MT4(5), en raison des spécificités de ce système, a une solution beaucoup plus simple ?

 
Alexey Viktorov:

Savez-vous pourquoi tant de gens, vous y compris, répondent à ceux qui connaissent mql comme une hache. Et ils ignorent les conseils de ceux qui savent. Dans votre cas, c'est ce conseil :


Mon cher Alexey, vous avez tout à fait raison concernant ma connaissance de MQL. Cependant, vous vous trompez en disant que je ne prête pas attention aux conseils des initiés, car mon premier contact a été avec@Artyom Trishkin, qui est, je crois, l'un des meilleurs professionnels de MQL et que vous connaissez bien.

Ses conseils m'ont permis de comprendre immédiatement comment résoudre mon problème et m'ont ouvert les yeux pour la suite. Et@Mihail Matkovskij m'a rendu la vie encore plus facile !

 
vladmirad:

Michael, votre aide et celle de @Artyom Trishkin ont été très utiles !

Nous devons maintenant trouver le point de croisement entre le graphique des prix et l'objet trouvé, dans ce cas, la ligne de tendance.

L'algorithme est le suivant :
1. En utilisant les coordonnées de lecture de la ligne de tendance, nous calculons le coefficient d'augmentation de la tendance pour 1 barre du TF sélectionné.
2. Calcule la coordonnée du prix de la ligne de tendance sur la barre courante et surveille le franchissement par le graphique de ce point pendant la TF sélectionnée.
3. Si c'est le cas, nous procédons au traitement de cet événement, par exemple, l'ouverture d'une commande. Dans le cas contraire, la procédure est répétée pour la mesure suivante.

Mais peut-être que MT4(5), en raison des spécificités de ce système, a une solution beaucoup plus simple ?

Comme je l'ai dit plus haut, esquissez un code source pour avoir quelque chose sur quoi commencer. De plus, vous avez déjà quelques connaissances sur la façon d'obtenir les données de l'objet sur le graphique. Personne ne veut tout faire pour vous à partir de zéro. Et de cette façon, ce qui manque pour le travail de l'expert peut être complété...

 
vladmirad:

Michael, votre aide et celle de @Artyom Trishkin ont été très utiles !

Nous devons maintenant trouver le point de croisement entre le graphique des prix et l'objet trouvé, dans ce cas, la ligne de tendance.

L'algorithme est le suivant :
1. En utilisant les coordonnées de lecture de la ligne de tendance, nous calculons le coefficient d'augmentation de la tendance pour 1 barre du TF sélectionné.
2. Calcule la coordonnée du prix de la ligne de tendance sur la barre courante et surveille le franchissement par le graphique de ce point pendant la TF sélectionnée.
3. Si c'est le cas, nous procédons au traitement de cet événement, par exemple, l'ouverture d'une commande. Dans le cas contraire, la procédure est répétée pour la mesure suivante.

Peut-être, tout est beaucoup plus facile dans MT4(5) en raison du caractère spécifique de ce système.

Ce que vous voulez trouver n'est pas très clair. Vous voulez trouver le point de passage de la ligne de tendance par le prix sur une certaine barre ? Pour cela, il existe des fonctions permettant d'obtenir la valeur de la ligne sur une barre. Mais j'utiliserais l'équation de la ligne droite :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

FAQ des débutants MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.05.02 12:27

Utilisez une équation de ligne droite :

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+

Indiquez le numéro de barre et le prix du point de gauche, indiquez le numéro de barre et le prix du point de droite (une ligne virtuelle est tracée sur ces points) et indiquez la barre que vous recherchez.
La fonction renverra le prix de la barre que vous recherchez.


Ne nécessite pas la présence d'un objet réel.
 
Artyom Trishkin:

..... Il existe des fonctions permettant d'obtenir la valeur de la ligne sur la barre. Mais j'utiliserais l'équation de la ligne droite :

.....

Artyom, plus de détails ici, s'il vous plaît.

Soit je n'étais pas très attentif avant, soit la documentation a été retouchée... Je ne sais pas.

Mais j'ai toujours pensé que ObjectGetDouble retournait le prix de la ligne sur une barre particulière (je veux dire le prix exact). Et là, j'ai décidé de faire un petit script pour le vérifier, et qu'ai-je vu ?

1. Il n'y a pas de numéro de barre dans les paramètres, sur lequel la valeur doit être lue.

2. identifiant de la propriété :

OBJPROP_PRICE

Coordination des prix

modifier=numéro du point d'ancrage


ce n'est que le point d'ancrage !

Oui, en gros, si je trace cette ligne dans le code, j'ai déjà ces points ! Pourquoi ai-je besoin de les connaître ? En fait, quel en est l'intérêt ?

Comment puis-je obtenir la valeur du prix de cette ligne ailleurs ?


Il s'avère que c'est

prop_modifier

[Modificateur de la propriété spécifiée. Pour la première option, la valeur par défaut du modificateur est 0. La plupart des propriétés ne nécessitent pas de modificateur. Désigne un nombre de niveau dans lesoutils Fibonacci et dans l'objet graphique Pitchfork d'Andrews. La numérotation des niveaux commence à partir de zéro.

Cela n'a pas de sens du tout ? Cherche-t-il les points d'attache de TOUTES les lignes de ventilation ? C'est absurde. Pardon.

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д.  Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов...
 
Сергей Таболин:

Artyom, pouvez-vous entrer dans un peu plus de détails, s'il vous plaît ?

Soit je n'étais pas très attentif avant, soit la documentation a été retouchée... Je ne sais pas.

Mais j'ai toujours pensé que ObjectGetDouble retournait le prix de la ligne sur une barre particulière (je veux dire le prix). Et là, j'ai décidé de faire un petit script pour le vérifier, et qu'ai-je vu ?

1. Il n'y a pas de numéro de barre dans les paramètres, sur lequel la valeur doit être lue.

2. identifiant de la propriété :

OBJPROP_PRICE

Coordination des prix

modifier=numéro du point d'ancrage


ce n'est que le point d'ancrage !

Oui, en gros, si je trace cette ligne dans le code, j'ai déjà ces points ! Pourquoi ai-je besoin de les connaître ? En fait, quel en est l'intérêt ?

Comment puis-je obtenir la valeur du prix de cette ligne ailleurs ?


Il s'avère que c'est

prop_modifier

[Modificateur de la propriété spécifiée. Pour la première option, la valeur par défaut du modificateur est 0. La plupart des propriétés ne nécessitent pas de modificateur. Désigne un nombre de niveau dans lesoutils Fibonacci et dans l'objet graphique Pitchfork d'Andrews. La numérotation des niveaux commence à partir de zéro.

Cela n'a pas de sens du tout ? Cherche-t-il les points d'attache de TOUTES les lignes de ventilation ? C'est absurde. Excusez-moi.

Je n'ai pas beaucoup travaillé avec de tels objets. Que retournera cette fonction pour la tendance en fonction du temps de barre spécifié ? Je n'ai pas le temps de le vérifier. Même si c'est fait dans un petit script...

ObjectGetValueByTime()

Документация по MQL5: Графические объекты / ObjectGetValueByTime
Документация по MQL5: Графические объекты / ObjectGetValueByTime
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...
Raison: