Les variables sont probablement correctes. Veuillez consulter mon message ci-dessus...
Je ne sais pas, si vous convertissez double en int, il y aura certainement une perte, et si vice versa, il y aura très probablement une erreur lors de la normalisation, puisque la deuxième valeur de la fonction est de type int.
Question aux développeurs concernant les événements "utilisateurs" et plusieurs experts travaillant sur le même terminal.
Je veux savoir si je veux arranger les choses ou pas ?
L'idée est la suivante
Au cours de la pièce, nous devons informer les experts "voisins" de certains des processus en cours.
...
S'il s'agit d'une bonne idée, elle peut être terminée et formatée comme un article. Ou l'ajouter à la section d'aide consacrée aux événements des utilisateurs ?
//+------------------------------------------------------------------+//| ButtonClickExpert.mq5 |//| Copyright 2009, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "2009, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"string buttonID="Button";
string labelID="Info";
int broadcastEventID=5000;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- создадим кнопку, для передачи пользовательских событийObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
ObjectSetInteger(0,buttonID,OBJPROP_COLOR,White);
ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,Gray);
ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
ObjectSetString(0,buttonID,OBJPROP_TEXT,"Кнопка");
ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
//--- создадим метку для вывода информацииObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
ObjectSetInteger(0,labelID,OBJPROP_COLOR,Red);
ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");
ObjectSetString(0,labelID,OBJPROP_TEXT,"Нет информации");
ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---ObjectDelete(0,buttonID);
ObjectDelete(0,labelID);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---
}
//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//--- проверим событие на нажатие кнопки мышкиif(id==CHARTEVENT_OBJECT_CLICK)
{
string clickedChartObject=sparam;
//--- если нажатие на объекте с именем buttonIDif(clickedChartObject==buttonID)
{
//--- состояние кнопки - нажата кнопка или нетbool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
//--- выведем в лог отладочное сообщениеPrint("Кнопка нажата =",selected);
int customEventID; // номер пользовательского события для отправкиstring message; // сообщение для отправки в событии//--- если кнопка нажатаif(selected)
{
message="Кнопка нажата";
customEventID=CHARTEVENT_CUSTOM+1;
}
else// кнопка не нажата
{
message="Кнопка отжата";
customEventID=CHARTEVENT_CUSTOM+999;
}
//--- отправим пользовательское событие "своему"графикуEventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
//--- отправим сообщение всем открытым графикам
BroadcastEvent(ChartID(),0,"Broadcast Message");
//--- отладочное сообщениеPrint("Отправлено событие с ID =",customEventID);
}
ChartRedraw();// принудительно перерисуем все объекты на графике
}
//--- проверим событие на принадлежность к пользовательским событиямif(id>CHARTEVENT_CUSTOM)
{
if(id==broadcastEventID)
{
Print("Получили широковещательное сообщение от графика с id="+lparam);
}
else
{
//--- прочитаем текстовое сообщение в событииstring info=sparam;
Print("Обрабатывается ПОЛЬЗОВАТЕЛЬСКОЕ событие с ID =",id);
//--- выведем сообщение в меткеObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
ChartRedraw();// принудительно перерисуем все объекты на графике
}
}
}
//+------------------------------------------------------------------+//| послать широковещательное сообщение всем открытм графикам |//+------------------------------------------------------------------+void BroadcastEvent(long lparam,double dparam,string sparam)
{
int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
long currChart=ChartFirst();
int i=0;
while(i<CHARTS_MAX) // у нас наверняка не больше CHARTS_MAX открытых графиков
{
EventChartCustom(currChart,eventID,lparam,dparam,sparam);
currChart=ChartNext(currChart); // на основании предыдущего получим новый графикif(currChart==0) break; // достигли конца списка графиков
i++; // не забудем увеличить счетчик
}
}
//+------------------------------------------------------------------+
kirill190982: Je ne sais pas, si nous convertissons double en int, il y aura certainement une perte, mais si c'est l'inverse, il y aura très probablement une erreur lors de la normalisation, car la deuxième valeur de la fonction de type int
Si vous écrivez int en double, tout est traité normalement, le compilateur élimine simplement la partie fractionnaire (selon la règle).
Dans la situation inverse, cependant, le compilateur commence à douter, et donne un avertissement sur les problèmes possibles (comme il lui semble).
Et comme nous sommes tous au courant du fait que, lorsqu'il est nécessaire de CRÉER dans une situation similaire, nous lui "conseillons" de le faire. :)
PS
Peut-être qu'à l'avenir les développeurs désactiveront TOUTES les alertes, et alors, comme dans MQL4, le compilateur arrêtera de crier pour des choses insignifiantes...
Lorsqu'une certaine situation se produit, le conseiller expert génère un message WIDE en utilisant EventChartCustom.
Ce faisant, le conseiller expert écrit dans sparam un commentaire (son nom et le type d'événement, ou d'autres informations) , etlparam son propre identifiant graphique.
Les Expert Advisors des autres graphiques (s'ils peuvent identifier correctement la nature d'un événement) répondront à cet EA spécifique.
PS
Si l'idée est bonne, elle peut être finalisée et transformée en article. Ou l'ajouter à la section d'aide dédiée aux événements personnalisés ?
Et je ne vois pas l'intérêt d'utiliser plusieurs EA à la fois, surtout si vous jouez avec plusieurs outils - vous pouvez facilement faire avec un seul EA, la modification, l'ouverture et la fermeture peuvent aussi être faites par un seul EA, l'analyse d'indicateurs également
Oui, j'ai déjà vu cet exemple (je ne sais même pas depuis combien de temps). Je voulais demander si mon idée est correcte et intéressante en termes de mise en œuvre.
PS
Si cela ne convient pas à l'aide, alors peut-être que quelqu'un acceptera de l'affiner et d'écrire un article sur cette application des événements.
Il serait également intéressant d'utiliser des événements personnalisés sous la forme d'ordres d'un EA à un autre (ou à d'autres). Si vous résumez tout cela, cela donnerait à mon avis un article très intéressant.
Malheureusement, je n'ai pas le temps de m'en occuper...
kirill190982: Et je ne vois pas l'intérêt d'utiliser plusieurs EA à la fois, surtout si vous jouez plusieurs symboles - vous pouvez facilement faire avec un seul EA, la modification, l'ouverture et la fermeture peuvent également être faites par un seul EA, l'analyse des indicateurs, aussi
Il y a toujours un sens, d'autant plus que tous les EA ne sont pas multidevises a priori (d'après l'expérience de MQL4).
Cela signifie qu'il n'est pas facile pour les débutants et pour beaucoup de ceux qui pratiquaient auparavant le trading mécanique d'organiser correctement les multidevises...
Dieu seul sait ce qui se passera si quelqu'un veut exécuter, disons, 2-3 copies de MACD Sample sur un compte.
En plus des situations différentes, d'autres Expert Advisors peuvent jouer un rôle secondaire en recevant des ordres du premier.
En outre, cette variante sera acceptable lorsque d'autres EA ("voisins") ne font pas de transactions, mais se contentent de traiter des données ou d'effectuer certaines tâches.
Des choses similaires peuvent également être mises en œuvre dans la communication entre les indices et les EA (avec une certaine approche).
PS
C'est pourquoi j'ai proposé de travailler sur cette question et si un progammeur expérimenté serait prêt à écrire un article. Je serais particulièrement heureux que les développeurs eux-mêmes consacrent un peu de leur temps à cette question.
Je pense qu'il y a assez de matière pour plus d'un article...
Je regarde vMA et Close[]. Dans wotch, ça compte bien. J'ai aussi essayé comme ça :
Je reçois à nouveau une autre erreur. Il existe peut-être une autre façon de calculer la moyenne mobile simple. Ou prendre le handle iMA et CopyBuffer là où il devrait être ?
1. Dans le wotcha, vous devez spécifier soit le nom du tableau Close (vous ne verrez que des informations générales) soit une valeur spécifique de Close[1], Close[2],..., Close[i].
2. Vous ne pouvez pas voir comment votre code remplit le tableau mrate
3. Consultez la bibliothèque standard MovingAverages.mqh - vous y trouverez un exemple de calcul de MA.
joo: Nous comprenons. On passe trop de temps à commenter tout et n'importe quoi. ....
Il y a aussi suffisamment de temps pour commenter et pour mettre en œuvre certaines idées.
C'est juste que je n'aborderai probablement pas la question assez sérieusement pour couvrir l'ensemble du domaine (et je m'occupe déjà de certaines des applications de l'idée, purement pour moi-même).
Mais de toute façon, je n'écrirai probablement pas d'articles sur ce sujet (pour diverses raisons)...
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Je vais probablement l'ignorer pour l'instant, mais dans MQL4 le compilateur ne produisait pas de telles remarques
Les variables sont probablement correctes. Veuillez consulter mon message ci-dessus...
Question aux développeurs concernant les événements "utilisateurs" et plusieurs experts travaillant sur le même terminal.
Je veux savoir si je veux arranger les choses ou pas ?
L'idée est la suivante
Au cours de la pièce, nous devons informer les experts "voisins" de certains des processus en cours.
...S'il s'agit d'une bonne idée, elle peut être terminée et formatée comme un article. Ou l'ajouter à la section d'aide consacrée aux événements des utilisateurs ?
Il existe un exemple pour la fonction EventChartCustom:
Essayez-le.
Je ne sais pas, si nous convertissons double en int, il y aura certainement une perte, mais si c'est l'inverse, il y aura très probablement une erreur lors de la normalisation, car la deuxième valeur de la fonction de type int
Si vous écrivez int en double, tout est traité normalement, le compilateur élimine simplement la partie fractionnaire (selon la règle).
Dans la situation inverse, cependant, le compilateur commence à douter, et donne un avertissement sur les problèmes possibles (comme il lui semble).
Et comme nous sommes tous au courant du fait que, lorsqu'il est nécessaire de CRÉER dans une situation similaire, nous lui "conseillons" de le faire. :)
PS
Peut-être qu'à l'avenir les développeurs désactiveront TOUTES les alertes, et alors, comme dans MQL4, le compilateur arrêtera de crier pour des choses insignifiantes...
Question aux développeurs concernant les événements "utilisateurs" et plusieurs experts travaillant sur le même terminal.
Donc je veux demander si je veux arranger les choses ou pas ?
Voici une idée.
Au cours de la pièce, nous devons informer les conseillers experts "voisins" de certains processus qui se déroulent.
Par exemple, les processus suivants doivent être surveillés en premier :
1. Verrouillage expert ;
2. Déchargement de l'Expert Advisor ;
3. Fin des opérations commerciales ;
4. Reprendre les opérations commerciales.
Mettre en œuvre
I. Créer 4 identifiants d'événements :
1 - CHARTEVENT_CUSTOM+1//Démarrage du Conseiller Expert
2 - CHARTEVENT_CUSTOM+2// Déchargement de l'Expert Advisor
3 - CHARTEVENT_CUSTOM+3 //Arrêt des opérations de trading
4 - CHARTEVENT_CUSTOM+4//Redémarrage des opérations de trading
II. Suivi des événements
Lorsqu'une certaine situation se produit, le conseiller expert génère un message WIDE en utilisant EventChartCustom.
Ce faisant, le conseiller expert écrit dans sparam un commentaire (son nom et le type d'événement, ou d'autres informations) , etlparam son propre identifiant graphique.
Les Expert Advisors des autres graphiques (s'ils peuvent identifier correctement la nature d'un événement) répondront à cet EA spécifique.
PS
Si l'idée est bonne, elle peut être finalisée et transformée en article. Ou l'ajouter à la section d'aide dédiée aux événements personnalisés ?
Il existe un exemple de la fonction EventChartCustom:
Essayez-le.
Oui, j'ai déjà vu cet exemple (je ne sais même pas depuis combien de temps). Je voulais demander si mon idée est correcte et intéressante en termes de mise en œuvre.
PS
Si cela ne convient pas à l'aide, alors peut-être que quelqu'un acceptera de l'affiner et d'écrire un article sur cette application des événements.
Il serait également intéressant d'utiliser des événements personnalisés sous la forme d'ordres d'un EA à un autre (ou à d'autres). Si vous résumez tout cela, cela donnerait à mon avis un article très intéressant.
Malheureusement, je n'ai pas le temps de m'en occuper...
Et je ne vois pas l'intérêt d'utiliser plusieurs EA à la fois, surtout si vous jouez plusieurs symboles - vous pouvez facilement faire avec un seul EA, la modification, l'ouverture et la fermeture peuvent également être faites par un seul EA, l'analyse des indicateurs, aussi
Il y a toujours un sens, d'autant plus que tous les EA ne sont pas multidevises a priori (d'après l'expérience de MQL4).
Cela signifie qu'il n'est pas facile pour les débutants et pour beaucoup de ceux qui pratiquaient auparavant le trading mécanique d'organiser correctement les multidevises...
Dieu seul sait ce qui se passera si quelqu'un veut exécuter, disons, 2-3 copies de MACD Sample sur un compte.
En plus des situations différentes, d'autres Expert Advisors peuvent jouer un rôle secondaire en recevant des ordres du premier.
En outre, cette variante sera acceptable lorsque d'autres EA ("voisins") ne font pas de transactions, mais se contentent de traiter des données ou d'effectuer certaines tâches.
Des choses similaires peuvent également être mises en œuvre dans la communication entre les indices et les EA (avec une certaine approche).
PS
C'est pourquoi j'ai proposé de travailler sur cette question et si un progammeur expérimenté serait prêt à écrire un article. Je serais particulièrement heureux que les développeurs eux-mêmes consacrent un peu de leur temps à cette question.
Je pense qu'il y a assez de matière pour plus d'un article...
............
Malheureusement, je n'ai pas le temps de le faire...
Je regarde vMA et Close[]. Dans wotch, ça compte bien. J'ai aussi essayé comme ça :
Je reçois à nouveau une autre erreur. Il existe peut-être une autre façon de calculer la moyenne mobile simple. Ou prendre le handle iMA et CopyBuffer là où il devrait être ?
1. Dans le wotcha, vous devez spécifier soit le nom du tableau Close (vous ne verrez que des informations générales) soit une valeur spécifique de Close[1], Close[2],..., Close[i].
2. Vous ne pouvez pas voir comment votre code remplit le tableau mrate
3. Consultez la bibliothèque standard MovingAverages.mqh - vous y trouverez un exemple de calcul de MA.
Nous comprenons. On passe trop de temps à commenter tout et n'importe quoi. ....
Il y a aussi suffisamment de temps pour commenter et pour mettre en œuvre certaines idées.
C'est juste que je n'aborderai probablement pas la question assez sérieusement pour couvrir l'ensemble du domaine (et je m'occupe déjà de certaines des applications de l'idée, purement pour moi-même).
Mais de toute façon, je n'écrirai probablement pas d'articles sur ce sujet (pour diverses raisons)...