Roll, merci pour le conseil, voici une fonctionnalité pour afficher un commentaire dans le coin inférieur gauche du graphique si quelqu'un en a besoin :
Pouvez-vous me dire comment rouvrir un fichier en un seul script : ouvrir le fichier - regarder jusqu'à la fin - fermer le fichier, lorsque l'on essaie de le rouvrir il est dit "fin du fichier" ...
Bonjour, Pouvez-vous m'indiquer si quelqu'un a rencontré le problème suivant : Dans la fenêtre du graphique des devises, il arrive que le graphique lui-même disparaisse, puis il est indiqué de le rafraîchir et tout est restauré. À ce moment-là, il arrive que les conseillers experts commencent à fonctionner de manière incorrecte (ouverture de transactions sans conditions). Aujourd'hui, j'ai même ouvert une transaction avec le lot maximum. Je l'ai remarqué et j'ai fermé avec une perte de 2,5 points. Voici le code pour déterminer le lot. Je pense que cela ne devrait pas être le cas. Je soupçonne que c'est à cause des deux dernières lignes. Mais comment ?
//======================================================================== //определение лота//========================================================================double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
LOT=NormalizeDouble(AccountFreeMargin()*RISK/100000,2);
if (LOT*One_Lot > Free) // Не хватает даже..
{ // ..на минимальн. лот:(Comment("денег нет " );
return(0); // ..и выход
}
elseComment("деньга есть " );
if(LOT<Min_Lot)
LOT=Min_Lot;
if(LOT>Max_Lot)
LOT=Max_Lot;
далее открытие ордера по условиям.
Pouvez-vous me dire s'il est possible d'afficher du texte sur un graphique, comme par exemple
comme une fonction séparée pour qu'elle puisse être appelée comme ceci :
Regardez cette fonction :
//+----------------------------------------------------------------------------+void iPrint(bool print, string mess1, string mess2="", string mess3="", string mess4="",
int sz=9, color cl1=Aqua, color cl2=Aqua, color cl3=Aqua, color cl4=Aqua) {
string NameGrafText, message, nm;
int i, y, k, LenStr, shift, Win_Num=-1, num=0;
color cl;
if (mess1=="") {
Print("Func iPrint: Передана пустая строка, выходим");
return;
}
Win_Num=WindowFind("Win_Inform");
if (print || Win_Num<0) {
message=mess1+mess2+mess3+mess4;
Print(message);
return;
}
k=ArraySize(Mass_Name_Message)-1;
if (StringLen(mess1)>0) num++;
if (StringLen(mess2)>0) num++;
if (StringLen(mess3)>0) num++;
if (StringLen(mess4)>0) num++;
for (i=k; i>=0; i--) {
NameGrafText=Mass_Name_Message[i];
if (StringLen(NameGrafText)>0)
if (ObjectFind(NameGrafText)==Win_Num) {
if (i+num>k) {
ObjectDelete(NameGrafText);
Mass_Name_Message[i]="";
}
elseif (i+num<=k) {
Mass_Name_Message[i+num]=Mass_Name_Message[i];
y=ObjectGet(NameGrafText, OBJPROP_YDISTANCE); // координата YObjectSet (NameGrafText, OBJPROP_YDISTANCE, y+(sz+1)*num); // координата YObjectSet (NameGrafText, OBJPROP_COLOR, LightSeaGreen); // цвет
}
}
}
shift=num;
int v=GetTickCount();
for (i=0; i<num; i++) {
shift--;
NameGrafText=Prefix+"_Graf_Text_"+i+"_"+sy+"_"+v;
int app=0;
while (ObjectFind(NameGrafText)==Win_Num) {
app++;
NameGrafText=Prefix+"_Graf_Text_"+i+"_"+sy+"_"+v+"_"+app;
}
Mass_Name_Message[num-1-i]=NameGrafText;
switch (i) {
case0: message=mess1; cl=cl1; break;
case1: message=mess2; cl=cl2; break;
case2: message=mess3; cl=cl3; break;
case3: message=mess4; cl=cl4; break;
default:message=mess1; cl=cl1; break;
}
ObjectCreate (NameGrafText, OBJ_LABEL, Win_Num, 0, 0);
ObjectSetText(NameGrafText, message, sz, "Courier New", cl);
ObjectSet (NameGrafText, OBJPROP_COLOR, cl); // цветObjectSet (NameGrafText, OBJPROP_CORNER, 2); // уголObjectSet (NameGrafText, OBJPROP_XDISTANCE, 150); // координата ХObjectSet (NameGrafText, OBJPROP_YDISTANCE, 2+(sz+1)*shift); // координата YWindowRedraw();
}
return;
}
//+----------------------------------------------------------------------------+
Il recherche la fenêtre vide de l'indicateur Win_Inform sur le graphique et, si elle est présente, affiche des messages dans celle-ci. Si ce n'est pas le cas, il faut l'éditer avec print.
Utilise le tableau de chaînes Mass_Name_Message[10] déclaré au niveau global. Il s'agit d'un tableau permettant de stocker les noms d'objets. Vous pouvez modifier sa taille en fonction de vos besoins. La variable Prefix stocke les noms des experts afin de leur permettre d'identifier leurs propres objets pour une manipulation correcte des objets graphiques. Il est également déclaré globalement et possède le type chaîne de caractères. Vous pouvez probablement le découvrir...
Il coupe un long message, par exemple si vous essayez de commenter la ligne "Vérifiez les paramètres de votre EA, pour ouvrir la fenêtre des paramètres, appuyez sur F7".
ça laisse juste ça : "Vérifiez les paramètres de votre EA pour ouvrir la fenêtre des paramètres", puis elle est coupée, alors que le texte n'est même pas à la moitié de la fenêtre.
Pouvez-vous me dire s'il existe un moyen de supprimer cette restriction ?
Il coupe un long message, par exemple si vous essayez de commenter la ligne "Vérifiez les paramètres de votre EA, pour ouvrir la fenêtre des paramètres, appuyez sur F7".
ça laisse juste ça : "Vérifiez les paramètres de votre EA pour ouvrir la fenêtre des paramètres", puis elle est coupée, alors que le texte n'est même pas à la moitié de la fenêtre.
Pouvez-vous me dire s'il existe un moyen de supprimer cette restriction ?
Essayez ma fonction. Il se trouve au-dessus de votre message sur cette page. Divise une chaîne de caractères en plusieurs chaînes de manière à ce que chacune d'entre elles ne compte pas plus de 64 caractères. Ma fonction produit ces lignes fractionnées l'une au-dessus de l'autre. Ensuite, lorsque le message suivant s'affiche, il met en niveaux de gris les anciens messages ci-dessus et affiche le nouveau message dans la couleur que vous avez définie lorsque vous avez appelé ma fonction.
J'ai téléchargé l'historique et j'ai découvert par hasard que j'ai un trou dans USDJPY de 2012.01.16 à 2012.03.20. Quand j'ai essayé de le retélécharger, le terminal m'a répondu que j'avais tout l'historique. Comment puis-je combler cette lacune ? Comment puis-je télécharger l'historique sans aucun trou ? Et y a-t-il un moyen de vérifier s'il y a un trou dans l'histoire ?
artmedia70: Essayez ma fonction. Il se trouve au-dessus de votre message sur cette page. Divise une chaîne de caractères en plusieurs chaînes de manière à ce que chacune d'entre elles ne compte pas plus de 64 caractères. Ma fonction produit ces lignes fractionnées l'une au-dessus de l'autre. Ensuite, lorsque le message suivant s'affiche, il met en gris les anciens messages et affiche le nouveau message dans la couleur que vous avez définie lorsque vous avez appelé ma fonction.
Merci, mais c'est un peu compliqué pour moi, et votre fonction sort 4 messages à la fois, alors que j'ai besoin d'un seul. Il s'avère que pas plus de 64 caractères dans une ligne ?
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.
Roll, merci pour le conseil, voici une fonctionnalité pour afficher un commentaire dans le coin inférieur gauche du graphique si quelqu'un en a besoin :
void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}
Bonjour à tous !
Pouvez-vous me dire s'il est possible d'afficher du texte sur un graphique, comme par exemple
comme une fonction séparée pour qu'elle puisse être appelée comme ceci :
Regardez cette fonction :
Il recherche la fenêtre vide de l'indicateur Win_Inform sur le graphique et, si elle est présente, affiche des messages dans celle-ci. Si ce n'est pas le cas, il faut l'éditer avec print.
Exemple d'appel :
Utilise le tableau de chaînes Mass_Name_Message[10] déclaré au niveau global. Il s'agit d'un tableau permettant de stocker les noms d'objets. Vous pouvez modifier sa taille en fonction de vos besoins. La variable Prefix stocke les noms des experts afin de leur permettre d'identifier leurs propres objets pour une manipulation correcte des objets graphiques. Il est également déclaré globalement et possède le type chaîne de caractères. Vous pouvez probablement le découvrir...
La dinde dans une remorque
Confronté à un petit problème avec ma fonction :
void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}
Il coupe un long message, par exemple si vous essayez de commenter la ligne "Vérifiez les paramètres de votre EA, pour ouvrir la fenêtre des paramètres, appuyez sur F7".
ça laisse juste ça : "Vérifiez les paramètres de votre EA pour ouvrir la fenêtre des paramètres", puis elle est coupée, alors que le texte n'est même pas à la moitié de la fenêtre.
Pouvez-vous me dire s'il existe un moyen de supprimer cette restriction ?
Vous ne pouvez pas, la longueur maximale de la ligne dans l'étiquette = 62 caractères.
Formatez le texte en plusieurs lignes (étiquettes), ou utilisez la fonction Commentaire() - il y a 255 caractères.
Voici le code lui-même.
Si vous avez une solution plus simple, je serais heureux de recevoir des commentaires.
Confronté à un petit problème avec ma fonction :
void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}
Il coupe un long message, par exemple si vous essayez de commenter la ligne "Vérifiez les paramètres de votre EA, pour ouvrir la fenêtre des paramètres, appuyez sur F7".
ça laisse juste ça : "Vérifiez les paramètres de votre EA pour ouvrir la fenêtre des paramètres", puis elle est coupée, alors que le texte n'est même pas à la moitié de la fenêtre.
Pouvez-vous me dire s'il existe un moyen de supprimer cette restriction ?
Comment puis-je combler cette lacune ?
Comment puis-je télécharger l'historique sans aucun trou ?
Et y a-t-il un moyen de vérifier s'il y a un trou dans l'histoire ?
Essayez ma fonction. Il se trouve au-dessus de votre message sur cette page. Divise une chaîne de caractères en plusieurs chaînes de manière à ce que chacune d'entre elles ne compte pas plus de 64 caractères. Ma fonction produit ces lignes fractionnées l'une au-dessus de l'autre. Ensuite, lorsque le message suivant s'affiche, il met en gris les anciens messages et affiche le nouveau message dans la couleur que vous avez définie lorsque vous avez appelé ma fonction.