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

 
Алексей КоКоКо:

Pouvez-vous me dire comment comprendre la documentation en général ? Je suis vraiment inquiet de voir que dans les exemples, même pour un objet graphique simple comme le texte, ils vous jettent à la figure un échantillon avec un tas de code et nulle part ils n'écrivent quels paramètres sont obligatoires et lesquels ne le sont pas. Donc, pour simplement écrire un texte ou définir une tendance ou même comprendre les tampons d'un indicateur, vous ne comprenez pas quels paramètres minimums doivent être entrés et vous devez copier et coller votre code.

Bonjour, les paramètres obligatoires pour le texte sont l'index de la fenêtre, la référence des coordonnées et le texte lui-même, les autres sont facultatifs.

Vous devez garder à l'esprit qu'il existe deux types d'objets, OBJ_LABEL et OBJ_TEXT. Le premier objet est lié aux pixels de la fenêtre et le second au temps et au prix sur le graphique.

Disons que nous avons besoin d'une étiquette de texte liée à des pixels, alors faites ceci :

   ObjectCreate(0,name,OBJ_LABEL,0,0,0); // создаём объект в текущем (нулевом окне)
   ObjectSetString(0,name,OBJPROP_TEXT,text); // указываем какой текст должен в нём отображаться
   ObjectSetString(0,name,OBJPROP_FONT,fontname); // назначаем шрифт например Verdana или Tahoma
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize); // назначаем размер шрифта
   ObjectSetInteger(0,name,OBJPROP_COLOR, text_color); // назначаем цвет шрифта
   ObjectSetInteger(0,name,OBJPROP_CORNER,text_corner); // указываем от какого угла окна отсчитывать пиксели
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,text_anchor); // указываем как должен быть выровнен текст по центру или какому-то краю
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XOFFSET); // указываем координату по горизонтали
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YOFFSET); // указываем координату по вертикали
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); // указываем можно ли выделять и двигать метку мышкой или нельзя

c'est le code presque minimal qui dessine l'étiquette de texte

la même chose pour l'objet OBJ_TEXT, mais vous devez également spécifier les propriétés prix et heure :

   ObjectSetDouble(0,name,OBJPROP_PRICE,0,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,0,time);



text_corner doit être l'une des valeurs constantes :

ID

Description

COIN_GAUCHE_SUPÉRIEUR

Centre des coordonnées dans le coin supérieur gauche du graphique

COIN_GAUCHE_INFÉRIEUR

Centre des coordonnées dans le coin inférieur gauche du graphique

COIN_DROIT_INFÉRIEUR

Centre des coordonnées dans le coin inférieur droit du graphique

COIN_DROIT_SUPÉRIEUR

Centre des coordonnées dans le coin supérieur droit du graphique


Plus de détails ici : https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner#enum_base_corner




text_corner doit être l'une des valeurs constantes :

Identifiant

Description

ANCRE_GAUCHE_SUPÉRIEURE

Point d'ancrage dans le coin supérieur gauche

ANCRE_GAUCHE

Point d'ancrage à gauche au centre

ANCRE_GAUCHE_INFÉRIEURE

Point d'ancrage dans le coin inférieur gauche

ANCRE_BAS

Point d'ancrage sous le centre

ANCHOR_RIGHT_LOWER

Point d'ancrage dans le coin inférieur droit

ANCHOR_RIGHT

Point d'ancrage à droite au centre

ANCRE_DROITE_SUPÉRIEURE

Point d'ancrage dans le coin supérieur droit

ANCRE_UPPER

Point d'ancrage au centre supérieur

CENTRE D'ANCRE

Point d'ancrage exactement au centre de l'objet


Plus de détails ici: https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner



vous pouvez également connecter la bibliothèque standard #include <ChartObjects\ChartObject.mqh> et utiliser ses classes, mais cela ne fait que vous compliquer la vie à mon avis

 
transcendreamer:

Salutations, les paramètres obligatoires pour le texte sont l'index de la fenêtre, la liaison des coordonnées et le texte lui-même, les autres sont facultatifs.

N'oubliez pas qu'il existe deux types d'objets : OBJ_LABEL et OBJ_TEXT. Le premier est lié aux pixels de la fenêtre et le second au temps et au prix sur le graphique.

Disons que nous avons besoin d'une étiquette de texte liée à des pixels, alors faites ceci :

c'est le code presque minimal qui dessine l'étiquette de texte

la même chose pour l'objet OBJ_TEXT, mais vous ne devez définir que les propriétés de prix et de temps :


Dieu vous bénisse )Ce n'est pas seulement le texte mais beaucoup de choses, même les tampons indicateurs. Qu'y a-t-il dans le panier retiré ?)

 
Алексей КоКоКо:

Dieu vous bénisse )Ce n'est pas seulement le texte, c'est beaucoup de choses, même les tampons des indicateurs. Pourquoi êtes-vous supprimé du chariot ?)

J'ai supprimé du chariot comme d'habitude parce que j'étais paranoïaque et que les Chexistes ne m'ont pas démasqué 😀 Je n'ai aucune idée de ce qu'il faut en faire.

 
Artyom Trishkin:

Et la bonne option est, eh bien, très simple...

Et qu'est-ce que c'est ? Pourquoi ne l'écrivez-vous pas ?

 
Bonjour à tous, J'ai inséré dans un EA "starhour et stophour" pour ouvrir des ordres à une certaine heure, mais je n'ai pas considéré que l'ordre qui a été ouvert par exemple à 22:00 ne sera pas fermé en stophour (23:00).
Puisqu'avant il n'y avait pas d'indicateur de signal pour fermer la position et après 23h00 il est même interdit de prendre une quelconque décision.

Veuillez m'indiquer comment faire pour que l'EA puisse fermer les positions ouvertes après l'heure limite (23h00).
Ou simplement fermer toutes les positions à 23h00, afin de ne pas les garder toute la nuit.


Merci d'avance
 
Eugen8519:
Bonjour à tous, J'ai inséré dans un EA "starhour et stophour" pour ouvrir des ordres à une certaine heure, mais je n'ai pas considéré qu'un ordre qui a été ouvert par exemple à 22:00 ne sera pas fermé en stophour (23:00).
Puisqu'avant il n'y avait pas d'indicateur de signal pour fermer la position et après 23h00 il est même interdit de prendre une quelconque décision.

Veuillez m'indiquer comment faire pour que l'EA puisse fermer les positions ouvertes après l'heure limite (23h00).
Ou simplement fermer toutes les positions à 23h00, afin de ne pas les garder toute la nuit.


Merci d'avance

mettre "starhour et stophour" uniquement sur les ordres ouverts

 
MakarFX:

mettre "starhour et stophour" uniquement sur les ordres d'ouverture

C'est le problème : il n'ouvre et ne ferme que les ordres starthour->stophour.
Et les ordres ouverts ne sont pas fermés après l'heure limite.

Vous ne pouvez pas négocier après l'heure limite



Les paramètres globaux sont définis

bool           UseTimeLimit = true;
int            startHour    = 15;
int            stopHour     = 23;
bool           YesStop=false;
input          ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;



Et dans OnTick

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
 
Eugen8519:
C'est le problème, il n'ouvre et ne ferme que les ordres starthour->stophour.
Et les ordres ouverts ne se ferment pas après l'heure limite.
Afficher la fonction de clôture des ordres
 
Eugen8519:
C'est le problème, il n'ouvre et ne ferme que les ordres starthour->stophour.
Et les ordres ouverts ne se ferment pas après l'heure limite.

quelque chose comme ceci

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
....
if(YesStop==false)
  {
   условие для открытия ордеров
  }
 
MakarFX:

à peu près comme ceci

Voici comment l'ordre se termine



(EMA0[m_bar_current]<WMA0[m_bar_current] && EMA0[m_bar_current+1]>WMA0[m_bar_current+1]) //Buy
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Sell");
     }
//if(color_buffer[m_bar_current+1]<color_buffer[m_bar_current]) //Sell
   if(EMA0[m_bar_current]>WMA0[m_bar_current] && EMA0[m_bar_current+1]<WMA0[m_bar_current+1]) //Sell
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Buy");
     }


void CLOSEORDER(string ord)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
               m_trade.PositionClose(m_position.Ticket());  // Close Buy
            if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
               m_trade.PositionClose(m_position.Ticket()); // Close Sell
           }
  }