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

 
Dzmitry Zaitsau:
Bonjour, pouvez-vous me dire pourquoi il y a un (int) avant ChartGetInteger entre parenthèses ?

int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS) ;

ChartGetInteger возвращает значение формата long или bool. Через (int) происходит перевод ChartGetInteger в значение int. 
если int bars, значит и значение должно быть int при присваивании.

1. Непосредственно возвращает значение свойства.
long  ChartGetInteger( 
   long  chart_id,          // идентификатор графика 
   int   prop_id,           // идентификатор свойства 
   int   sub_window=0       // номер подокна, если требуется 
   );
 
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром
bool  ChartGetInteger( 
   long    chart_id,        // идентификатор графика 
   int     prop_id,         // идентификатор свойства 
   int     sub_window,      // номер подокна 
   long&   long_var         // сюда примем значение свойства 
   );
 
 

Bonjour. Veuillez me conseiller.

J'ai un indicateur qui doit dessiner les lignes de haut et bas du jour sur chaque barre d'une plus petite échelle de temps.

Lorsque je le place sur le graphique, il trace simplement les lignes au niveau du haut et du bas du jour (dans l'image, comme il se doit).

#property indicator_chart_window 
#property indicator_buffers 2       
#property indicator_color1 Blue     
#property indicator_color2 Red      

//datetime time=D'2021.03.30 00:00';

string strTime = "0:00";
 
double Buf_0[],Buf_1[];                   
double Sum_H=0;                    
double Sum_L=0;
//--------------------------------------------------------------------
int init()                         
  {
   SetIndexBuffer(0,Buf_0);        
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);
   SetIndexBuffer(1,Buf_1);        
   SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,1);
   return(0);                        
  }
//--------------------------------------------------------------------
int start()                        
  {
   int i, Counted_bars;                    
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); 
   datetime time=StringToTime(strTime);
   int bar_index=iBarShift(Symbol(),PERIOD_CURRENT,time,false); 
   i=Bars-Counted_bars;          
   if (i>bar_index) i=bar_index-1;  
   while(i>=0)                      
     {
      Sum_H=iHigh(Symbol(),PERIOD_D1,0);
      Sum_L=iLow(Symbol(),PERIOD_D1,0);
      Buf_0[i]=Sum_H;
      Buf_1[i]=Sum_L;
      i--;                          
     }
//--------------------------------------------------------------------
   return(0);                        
  }
//--------------------------------------------------------------------
Dossiers :
2.png  31 kb
 
ifitstrue:

Bonjour. Veuillez me conseiller.

J'ai un indicateur qui est censé dessiner les lignes de haut et de bas de la journée sur chaque barre d'un cadre temporel plus petit.

Lorsque je le place sur un graphique, il ne fait que tracer des lignes sur le haut et le bas du jour (dans l'image, comme il se doit).

Voici la réponse

 
Merci.
 
Bonjour, pouvez-vous me dire quel est l'identifiant de la carte ?

bool TrendCreate(const long chart_ID=0, // ID graphique

Par exemple, lorsque vous attachez le script à eur/usd, quel est l'ID du graphique ? Où puis-je le trouver pour le savoir.




 
Dzmitry Zaitsau:
Bonjour, pourriez-vous me dire quel est l'identifiant de la carte ?

bool TrendCreate(const long chart_ID=0, // ID graphique

Par exemple, lorsque vous attachez le script à eur/usd, quel est l'ID du graphique ? Où dois-je creuser, afin de le comprendre.

J'ai l'habitude d'aller à l'aide.

Документация по MQL5: Операции с графиками
Документация по MQL5: Операции с графиками
  • www.mql5.com
Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Veuillez me donner un code pour MT4 et MT5 Expert Advisor pour mettreun stop loss 2-3 points au-dessus du maximum/minimum de la bougie qui vient d'être fermée.

Ou bien où puis-je voir le tutoriel sur ce sujet. Merci d'avance :-)

Dossiers :
izilo2.jpeg  270 kb
 
WindUP:

Veuillez me donner un code pour MT4 et MT5 Expert Advisor pour mettreun stop loss 2-3 points au-dessus du maximum/minimum de la bougie qui vient d'être fermée.

Ou bien où puis-je voir le tutoriel sur ce sujet. Merci d'avance :-)

Vous déclarez un tableau de type MqlRates. Vous copiez l'OHLC et d'autres paramètres d'un chandelier fermé.

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем (начнём с 1)
   int              count,             // сколько копируем (надо всего 1)
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );

puis prenez les valeurs hautes ou basses à partir desquelles vous êtes décalé de 2-3 points et placez-y des stops.

Vous pouvez également utiliser

double  iHigh(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

и

double  iLow(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
 
Alexey Viktorov:

Déclare un tableau de type MqlRates. Copie de l'OHLC et des autres paramètres du chandelier fermé.

puis prenez les valeurs High ou Low dont vous êtes à 2 ou 3 points et placez-y des stops.

Vous pouvez également utiliser

и

Merci, mais pourrions-nous avoir au moins un exemple objectif ? Une vue d'en haut, pour ainsi dire. Je suis complètement novice et je suis sur le sujet depuis deux jours :-)
 
WindUP:
Merci, mais pourriez-vous me donner au moins un exemple objectif ? Une vue d'en haut, pour ainsi dire. Je suis complètement novice et je suis sur le sujet depuis deux jours :-)

J'essaie d'apprendre aussi - je pense que j'arrive à quelque chose.

//+------------------------------------------------------------------+
//|                                                    CopyRates.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inphigh        = 100;  // отступить от high
//---
datetime m_right_time = 0,m_left_Ctime = 0;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,Inpcopiedrates,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0; i<size; i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
         ObjectDelete(0,"CopyRateshigh");
         m_left_Ctime=rates[i].time;
         m_right_time=TimeCurrent();
         TrendCreate(0,"CopyRateshigh",clrBlue,STYLE_DASHDOTDOT,1);
         TrendPointChange(0,"CopyRateshigh",0,m_left_Ctime,rates[i].high+Inphigh/100);
         TrendPointChange(0,"CopyRateshigh",1,m_right_time,rates[i].high+Inphigh/100);
        }
     }
   else
      Print("Не удалось получить исторические данные по символу ",Symbol());
  }
//+------------------------------------------------------------------+
//| Create a trend line by the given coordinates                     |
//+------------------------------------------------------------------+
bool TrendCreate(const long            chart_ID=0,        // chart's ID
                 const string          name="TrendLine",  // line name
                 const color           clr=clrRed,        // line color
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
                 const int             width=1,           // line width
                 const int             sub_window=0,      // subwindow index
                 datetime              time1=0,           // first point time
                 double                price1=0,          // first point price
                 datetime              time2=0,           // second point time
                 double                price2=0,          // second point price
                 const bool            back=false,        // in the background
                 const bool            selection=false,   // highlight to move
                 const bool            ray_left=false,    // line's continuation to the left
                 const bool            ray_right=true,    // line's continuation to the right
                 const bool            hidden=true,       // hidden in the object list
                 const long            z_order=0)         // priority for mouse click
  {
//--- set anchor points' coordinates if they are not set
   ChangeTrendEmptyPoints(time1,price1,time2,price2);
//--- reset the error value
   ResetLastError();
//--- create a trend line by the given coordinates
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))
     {
      Print(__FUNCTION__,
            ": failed to create a trend line! Error code = ",GetLastError());
      return(false);
     }
//--- set line color
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display style
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line width
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the left
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the right
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- set the text
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,name);
//--- successful execution
   return(true);
  }
//+------------------------------------------------------------------+
//| Move trend line anchor point                                     |
//+------------------------------------------------------------------+
bool TrendPointChange(const long   chart_ID=0,       // chart's ID
                      const string name="TrendLine", // line name
                      const int    point_index=0,    // anchor point index
                      datetime     time=0,           // anchor point time coordinate
                      double       price=0)          // anchor point price coordinate
  {
//--- if point position is not set, move it to the current bar having Bid price
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error value
   ResetLastError();
//--- move trend line's anchor point
   if(!ObjectMove(chart_ID,name,point_index,time,price))
     {
      Print(__FUNCTION__,
            ": failed to move the anchor point! Error code = ",GetLastError());
      return(false);
     }
//--- successful execution
   return(true);
  }
//+------------------------------------------------------------------+
//| Check the values of trend line's anchor points and set default   |
//| values for empty ones                                            |
//+------------------------------------------------------------------+
void ChangeTrendEmptyPoints(datetime &time1,double &price1,
                            datetime &time2,double &price2)
  {
//--- if the first point's time is not set, it will be on the current bar
   if(!time1)
      time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid value
   if(!price1)
      price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second one
   if(!time2)
     {
      //--- array for receiving the open time of the last 10 bars
      datetime temp[10];
      CopyTime(Symbol(),Period(),time1,10,temp);
      //--- set the second point 9 bars left from the first one
      time2=temp[0];
     }
//--- if the second point's price is not set, it is equal to the first point's one
   if(!price2)
      price2=price1;
  }
//+------------------------------------------------------------------+

CopyRates