Questions des débutants MQL5 MT5 MetaTrader 5 - page 727

 
Vitaly Muzichenko:

Pouvez-vous me dire comment sélectionner un objet lors de sa création, afin qu'il ne perde pas sa sélection et ne se sélectionne pas lui-même lorsque l'utilisateur le désélectionne. C'était facile dans le quatrième, mais ça ne marche pas dans le cinquième.

C'était le cas avant, et ça marchait très bien :

void SetHLine(...,double p,bool sel) {
  if(ObjectFind(chart_ID,nm)!=0) {
    ObjectCreate(chart_ID,nm,OBJ_HLINE,0,0,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
    ...
  }
   ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,p);
}

Comme vous pouvez le voir, lors de la création, nous pouvons sélectionner ou non l'objet en cours de création à la fois et il ne changera plus et il n'y aura plus de référence à celui-ci, mais cela ne fonctionne pas dans le cinquième, il le crée sans sélection.

Comment faire pour que mql5 permette de sélectionner l'objet à la création puis de le gérer manuellement en cas de besoin - sélectionner/non sélectionner

OBJPROP_SELECTABLE
 

C'est le cas, mais l'icône ne se démarque pas.

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}
 
Vitaly Muzichenko:

C'est le cas, mais l'icône n'est pas mise en évidence.

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}

Tout est mis en évidence :

Mise en évidence

Dossiers :
OBJ_ARROW.mq5  22 kb
 
Vladimir Karputov:

Tout se démarque :

Merde, j'ai réglé une fonction et vérifié une autre, tout fonctionne. Merci ! Je vais me coucher)
 

J'ai remarqué une caractéristique étrange, si vous le paramétrez de cette façon, les lignes ne sont pas mises en évidence lorsque vous créez

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

Mais si c'est l'inverse, il n'y a pas de problème de sélection :

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

Pour une raison quelconque, le remplacement des sommets modifie la somme ?

 
Vitaly Muzichenko:

J'ai remarqué une caractéristique étrange, si vous le configurez de cette façon, les lignes ne sont pas mises en évidence lorsque vous créez

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

Mais si vous faites le contraire, alors il n'y a pas de problème de sélection :

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

Pour une raison quelconque, le remplacement des sommets modifie la somme ?

Apparemment, quand

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel) ;

dernière commande, le graphique est mis à jour

 
Vitaly Muzichenko:

J'ai remarqué une caractéristique étrange, si vous le paramétrez de cette façon, les lignes ne sont pas mises en évidence lorsque vous créez

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

Mais si vous faites le contraire, alors il n'y a pas de problème de sélection :

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

Pour une raison quelconque, le remplacement des sommets modifie la somme ?

Au départ, lorsque vous créez un objet, vous définissez probablement sa propriété par défaut comme non sélectionnable.

Ensuite, vous le sélectionnez (mais l'objet n'est pas sélectionnable), par conséquent, rien n'est sélectionné.

Ensuite, vous le définissez comme sélectionnable. Mais il est "trop tard pour boire le borjomi" ...
 

Voici donc le code complet :

void SetVLine(long chart_ID=0,string nm="nm",datetime tm=0,int wd=1,int st=0,color cl=clrRed,
                                             string tooltxt="",bool sel=false,bool back=false) {
if(ObjectFind(chart_ID,nm)<0) {
    ObjectCreate(chart_ID,nm,OBJ_VLINE,0,tm,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,tm);
    ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,back);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
  // ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetString(chart_ID,nm,OBJPROP_TOOLTIP,tooltxt);
    ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,cl);
    ObjectSetInteger(chart_ID,nm,OBJPROP_WIDTH,wd);
    ObjectSetInteger(chart_ID,nm,OBJPROP_STYLE,st);
   }
}

Oui, j'ai vérifié deux fois sur tous les types d'objets, et vous devez mettre"SELECTABLE" d'abord et ensuite"SELECTED".

Merci pour votre participation et votre aide à la résolution de ce problème !

 
Dans MetaTrader5, il est possible de générer un EA en 3 blocs. 1 bloc donne les signaux d'un indicateur ou de plusieurs indicateurs. Barres arrière de 2 blocs. 3 risques de bloc.

Puis-je suggérer 1. d'ajouter des indicateurs personnalisés dans 1 bloc ? Si oui, comment dois-je m'y prendre ?

2. est-il possible de corriger le code de manière à ce que les transactions soient ouvertes dans les deux sens (actuellement, par exemple, si une transaction d'achat est ouverte, la transaction de vente n'est pas ouverte tant que la transaction d'achat n'est pas fermée) ?
 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".