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

 
Alexander Antoshkin:

Bonjour Vladimir.

J'ai dû mal formuler ma question.

Je n'ai pas besoin d'une sous-fenêtre, l'indicateur doit être placé sur le graphique des prix comme un graphique standard.

Je le considère comme un exemple et j'essaie de le comprendre.

Je souhaite que l'indicateur monté sur le graphique ait son propre numéro, afin que le nombre nécessaire de copies puisse être créé sur le graphique à l'aide du bouton "Ajouter" ...... Je veux en supprimer un sélectionné par le bouton "croix" ........ (je ne veux pas encore les décrire))

Quand un indicateur doit être ajouté à la fenêtre principale du graphique

sous_fenêtre

[0 signifie fenêtre principale du graphique. Pour ajouter un indicateur à une nouvelle fenêtre, le paramètre doit être supérieur d'une unité à l'indice de la dernière fenêtre existante, c'est-à-dire égal àCHART_WINDOWS_TOTAL. Si la valeur du paramètre dépasseCHART_WINDOWS_TOTAL, une nouvelle fenêtre ne sera pas créée, l'indicateur ne sera pas ajouté.

Vous ne pouvez pas ajouter l'indicateur à OnInit() - puisque l'expert n'a pas encore été formé à ce stade. Mais la fonction - OnTick() est un signe du fonctionnement complet de l'Expert Advisor.

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- variables
int MA_handle=INVALID_HANDLE;
bool first_start=false;
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
   Print(__FUNCTION__,", first_start = ",first_start);
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period,MA_Shift,MA_Method,PRICE_CLOSE);
   if(MA_handle==INVALID_HANDLE)
      return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!first_start)
     {
      if(AddIndicator()) //попробуем добавить индикатор на график 
         first_start=true;
     }
  }
//+------------------------------------------------------------------+ 
//| Функция проверки и добавления индикатора на график               | 
//+------------------------------------------------------------------+ 
bool AddIndicator()
  {
//--- сбросим код ошибки 
   ResetLastError();
//--- накладываем индикатор на график   
   int subwindow=0;
   PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,MA_handle))
     {
      PrintFormat("Не удалось добавить индикатор  на окно %d графика. Код ошибки  %d",
                  subwindow,GetLastError());
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
Et réécrivez la fonction AddIndicator() pour qu'elle renvoie false en cas d'échec de l'ajout d'un indicateur.
 
Alexander Antoshkin:

Bonjour Vladimir.

J'ai dû mal formuler ma question.

Je n'ai pas besoin d'une sous-fenêtre, l'indicateur doit être placé sur le graphique des prix comme un graphique standard.

Je le considère comme un exemple et j'essaie de le comprendre.

Je souhaite que l'indicateur monté sur le graphique ait son propre numéro, afin que le nombre nécessaire de copies puisse être créé sur le graphique à l'aide du bouton "Ajouter" ...... Je veux en supprimer un sélectionné par le bouton "croix" ........ (il y a beaucoup de fantasmes et je ne veux pas encore les décrire))

L'indicateur peut avoir un nom, si vous aimez les chiffres, que ce soit un chiffre. Toutefois, il ne s'agira pas d'un numéro mais d'un texte. Voulez-vous un panneau de contrôle personnalisé qui vous permette d'ajouter n'importe quel numéro d'indicateur parmi un ou plusieurs ?
 
Pouvez-vous m'indiquer comment filtrer par numéro de jour et séparément par numéro de semaine dans un mois ? J'ai fait cela à l'intérieur du jour :


bool TimeStart=false;

int hour=12;


//--Фильтр по ремени открытия бара внутри дня

if (TimeStart==true)

{      

      datetime  Open_timePos=iTime(_Symbol,0,0);

      MqlDateTime str1; 

      TimeToStruct(Open_timePos,str1);

      str1.hour=hour;

      str1.min=0;

      str1.sec=0;


      datetime start_time=StructToTime(str1);

      if (start_time>iTime(_Symbol,0,0))

      {

            BuyPrIMA=false;

            SellPrIMA=false;      

      

      } 

 

 

 
-Aleks-:
Pouvez-vous m'indiquer comment filtrer par numéro de jour et séparément par numéro de semaine dans un mois ? J'ai fait cela à l'intérieur du jour :

int НомерДНЯвМесяце=TimeDay(iTime(_Symbol,0,0));

int НомерДняНедели=TimeDayOfWeek(iTime(_Symbol,0,0)); int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);

 
new-rena:
Il demande la semaine du mois
 
pako:
Il demande la semaine du mois.

J'y ai fait les trois options. Lequel veut-il utiliser comme base, s'il vous plaît ?

Celui-là ?

int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);
 
new-rena:
J'ai fait les trois options là. Veuillez préciser.

Il y a cinq à six semaines dans le mois, aujourd'hui c'est la quatrième semaine du mois.

str.day jour du mois

str.day_of_week day

 
new-rena:
Merci.
 
pako:
Il y a quatre cinq semaines dans un mois, aujourd'hui est la quatrième semaine du mois.
Je vois. Il veut donc comptabiliser les semaines de cette nature le 29 du mois précédent (lundi, par exemple) et jusqu'au 31 du mois en cours (lundi également, par exemple). C'est plus d'un mois. Il n'est pas logique de compter ces semaines. Si ce n'est pas le cas, alors la semaine ne sera pas une semaine entière. Non, pas de point....
 
new-rena:

J'y ai fait les trois options. Lequel veut-il utiliser comme base, s'il vous plaît ?

Celui-là ?

Ça n'ira pas.