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

 
ANDREY:

Merci pour ces informations précieuses.

Comment stocker dans une variable une expression qui se trouve être vraie ? Pour être plus précis - quel est le minimum calculé dans la fonction par rapport à une bougie de quelle période ? Comment enregistrer l'identifiant de cette période dans une variable ?
Merci.

Il suffit de déclarer des variables bool

bool variant_H4 = Bid-iLow( NULL ,PERIOD_H4,1) >= 0.0030,
     variant_H1 = Bid-iLow(NULL ,PERIOD_H1,1) >= 0.0030,
     variant_M30 = Bid-iLow(NULL ,PERIOD_M30,1) >= 0.0030;
if (variant_H4 || variant_H1 || variant_M30)
 
Alexey Viktorov:

Il suffit de déclarer des variables bool

Merci pour ces informations utiles.

Pourriez-vous me dire comment sauvegarder une valeur à 5 chiffres dans une variable jaune si le test est effectué sur une carte minute ?

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}

Merci.

 
Bonjour ! Pouvez-vous me dire comment lier un texte à une ligne dans mql4, de sorte que lorsque cette dernière est déplacée, l'inscription est également décalée, comme dans les captures d'écran. Je sais qu'il existe deux façons de lier un objet: en pixels au coin de l'écran et en coordonnées temps/prix. Dans le premier cas, j'obtiens un texte statique, et dans le second, ce n'est pas tout à fait ce que je veux. La coordonnée du prix (reliure verticale) est claire - je prends le prix de la ligne et lui ajoute une paire _Point, de sorte que le texte soit un peu plus haut que la ligne. Mais qu'en est-il du temps ? Je ne veux pas me lier à la dernière barre, car les différents déplacements du graphique entraîneront le texte vers la droite ou vers la gauche. Ici, je voudrais faire une fixation horizontale rigide sur le bord droit de l'écran, mais je ne comprends pas comment.
 
Oleksandr Nozemtsev:
Bonjour ! Pouvez-vous me dire comment lier un texte à une ligne dans mql4, de sorte que lorsque cette dernière est déplacée, l'inscription est également décalée, comme dans les captures d'écran. Je sais qu'il existe deux façons de lier un objet : en pixels au coin de l'écran et en coordonnées temps/prix. Dans le premier cas, j'obtiens un texte statique, et dans le second, ce n'est pas tout à fait ce que je veux. La coordonnée du prix (reliure verticale) est claire - je prends le prix de la ligne et lui ajoute une paire _Point, de sorte que le texte soit un peu plus haut que la ligne. Mais qu'en est-il du temps ? Je ne veux pas me lier à la dernière barre, car les différents déplacements du graphique entraîneront le texte vers la droite ou vers la gauche. Ici, je voudrais faire une fixation horizontale rigide sur le bord droit de l'écran, mais je ne comprends pas comment.
Tracez-vous les lignes vous-même ou l'indicateur ?
 
MakarFX:
Tracez-vous les lignes vous-même ou l'indicateur ?

La ligne est créée par l'indicateur lorsqu'il est chargé. Un texte est nécessaire pour afficher les informations sur ce niveau directement au-dessus de la ligne, plutôt que de les afficher dans Alert (Alert fonctionne).

 
Oleksandr Nozemtsev:

La ligne est créée par l'indicateur lorsqu'il est chargé. Un texte est nécessaire pour afficher les informations sur ce niveau directement au-dessus de la ligne, plutôt que de les afficher dans Alert (Alert fonctionne).

Afficher le code de création de la ligne
 
MakarFX:
Afficher le code de création de la ligne

int OnInit()

{

//Créer la ligne "ligne_nom" si elle n'existe pas encore

if(ObjectFind(0, name_line) == -1)

{

//Si le prix n'est pas spécifié, il s'agit du prix d'achat actuel.

if(!price_line)

price_line = SymbolInfoDouble(Symbol(), SYMBOL_ASK) ;

//réinitialisation de la valeur d'erreur

ResetLastError() ;

//créer une ligne

if(!ObjectCreate(0, name_line, OBJ_HLINE, 0, 0, price_line))

Print("Ligne. Erreur ", GetLastError()) ;

//

ObjectSet(name_line, OBJPROP_COLOR, color_line) ; //Couleur de ligne

ObjectSet(name_line, OBJPROP_STYLE, style_line) ; //Style de ligne

ObjectSet(name_line, OBJPROP_WIDTH, width_line) ; //épaisseur de la ligne

ObjectSet(name_line, OBJPROP_BACK, back_line) ; //Front/back

ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//L'objet peut être cliqué avec la souris.

ObjectSet(name_line, OBJPROP_SELECTED, selection_line) ; //L'objet est sélectionné. O n'est pas sélectionné à la création

}

return(INIT_SUCCEEDED) ;

}

 
Oleksandr Nozemtsev:

Attrapez

//+------------------------------------------------------------------+
//|                                                    Line_Text.mq4 |
//|                                           Copyright 2020 MakarFX |
//|                            https://www.mql5.com/ru/users/makarfx |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 MakarFX"
#property link      "https://www.mql5.com/ru/users/makarfx"
#property version   "1.00"
#property strict
#property indicator_chart_window

double buy,sell;
datetime DoTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ObjectsDeleteAll(0,"My_");
   //--- indicator buffers mapping
   if(ObjectFind(0,"My_BuyLine")!=0)
     {
      HLineCreate(0,"My_BuyLine",0,Ask+50*Point,clrTeal,2,1,false,true,false);
     }
   if(ObjectFind(0,"My_SellLine")!=0)
     {
      HLineCreate(0,"My_SellLine",0,Bid-50*Point,clrCrimson,2,1,false,true,false);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"My_");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   DoTime = TimeCurrent()+(Period()*60*7);
   if(ObjectFind(0,"My_BuyLine")==0)
     {
      buy = NormalizeDouble(ObjectGet("My_BuyLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_BuyText",0,DoTime,buy+5*Point,"BuyText","Arial",10,clrTeal,0,0,false,false,false);     
     }
   if(ObjectFind(0,"My_SellLine")==0)
     {
      sell = NormalizeDouble(ObjectGet("My_SellLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_SellText",0,DoTime,sell-5*Point,"SellText","Arial",10,clrCrimson,0,0,false,false,false);     
     }
   if(buy!=ObjectGet("My_BuyLine",OBJPROP_PRICE1)||sell!=ObjectGet("My_SellLine",OBJPROP_PRICE1))
     {
      ObjectMove(0,"My_BuyText",0,DoTime,buy+5*Point);
      ObjectMove(0,"My_SellText",0,DoTime,sell-5*Point);
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает горизонтальную линию                                                                                       | 
//+--------------------------------------------------------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
      { 
      Print(__FUNCTION__, ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства линии 
   ObjectSetInteger (chart_ID, name, OBJPROP_COLOR, clr);
   ObjectSetInteger (chart_ID, name, OBJPROP_STYLE, style);
   ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH, width);
   ObjectSetInteger (chart_ID, name, OBJPROP_BACK, back);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTABLE, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTED, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_HIDDEN, hidden);
   ObjectSetInteger (chart_ID, name, OBJPROP_ZORDER, z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает объект "Текст"                                                                                             | 
//+--------------------------------------------------------------------------------------------------------------------+
bool Create_Text(const long              chart_ID=0,               // ID графика 
                 const string            name="Text",              // имя объекта 
                 const int               sub_window=0,             // номер подокна 
                 datetime                time=0,                   // время точки привязки 
                 double                  price=0,                  // цена точки привязки 
                 const string            text="Text",              // сам текст 
                 const string            font="Arial",             // шрифт 
                 const int               font_size=10,             // размер шрифта 
                 const color             clr=clrRed,               // цвет 
                 const double            angle=0.0,                // наклон текста 
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                 const bool              back=false,               // на заднем плане 
                 const bool              selection=false,          // выделить для перемещений 
                 const bool              hidden=true,              // скрыт в списке объектов 
                 const long              z_order=0)                // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим объект "Текст" 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
      { 
      Print(__FUNCTION__,": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства объектa "Текст" 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+------------------------------------------------------------------+
 
MakarFX:

Attrapez

Wow, c'est beaucoup ! Je pensais que c'était juste quelques lignes de code. Merci ! (rires)

 
Alexey Viktorov:

Il suffit de déclarer des variables bool

Pourriez-vous également me dire comment enregistrer une valeur de 5 chiffres de bleu dans la variable jaune si le test est effectué sur un graphique d'une minute ?

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}
Merci.
Raison: