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

 
Comment puis-je savoir qu'il n'y a pas deOBJ_RECTANGLE sur N barres ?
 
neverness:

Quelque chose a-t-il vraiment changé dans MT5 ?

Il n'y a rien de tel ni dans mt4 ni dans mt5.

Dans mt5, il y a même un bug avec l'affichage du séparateur dans la période actuelle, sur les fois sur H2.

 
Ghabo:
Comment puis-je savoir qu'il n'y a pas deOBJ_RECTANGLE sur N barres ?
Essayez de cette façon peut-être ?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());
  Print(n);
 
Vitaly Muzichenko:

Il n'y a rien de tel ni dans mt4 ni dans mt5.

Dans mt5 il y a même une erreur avec l'affichage du séparateur dans la période actuelle, sur les temps au-dessus de H2.

J'ai enfin vu la seule "réponse constructive" à ma question dans toute cette "discussion".

Quant aux erreurs, elles sont présentes sur toutes les semaines de séparation dans le cadre actuel (dernier) sur MT4 et MT5.

Partout dans la dernière semaine le séparateur MT4/MT5 dessine le séparateur 7 jours au lieu de 5.

Mais là n'est pas la question. Les erreurs ont toujours été et seront toujours présentes. Tout ceci peut être corrigé s'il existe un code de programme pour dessiner les délimiteurs.

Ce ne sont pas les erreurs qui me surprennent, c'est tout autre chose.

Personne n'a pensé à écrire un programme pour dessiner les délimiteurs dans la zone prédite pendant toute la durée d'existence de MT4/MT5 ?

Après tout, ce programme est le plus simple.

Tout ce que vous devez savoir, c'est la position du dernier diviseur et la "solution" du temps sur l'axe X (c'est-à-dire quel intervalle de temps prend 1 pixel).

Et jusqu'à présent, personne n'a jamais été capable de faire quoi que ce soit.

Ça, ça me surprend vraiment.

Encore une fois, je devrai tout faire moi-même.

 
Igor Makanu:

Ce n'est pas difficile, mais vous ne semblez pas comprendre comment les indicateurs fonctionnent dans MT et quels sont leurs avantages.

Vous avez probablement raison.

Il existe une anecdote mathématique :

On demande à un mathématicien : "Comment faire bouillir de l'eau dans une bouilloire ?

Le mathématicien répond : - Prenez une bouilloire vide, versez-y de l'eau, posez-la sur la cuisinière, allumez la cuisinière et attendez que l'eau bouille.

- OK. Mais que faire si la bouilloire est déjà pleine ? - demande le mathématicien.

- Versez l'eau de la bouilloire et résolvez le problème de la manière décrite ci-dessus. - répond le mathématicien.

Alors voilà.

Cette blague est à propos de toi.

 
neverness:

Cette blague est à propos de toi.

hmm, je ne sais pas si je dois sourire ou .... Si vous connaissez un terminal de trading qui répondra à tous vos caprices, à quoi bon ? je suis satisfait à 100% de MT4/5, je peux tout faire avec, garder l'indicateur qui dessine des périodes D1 sur le graphique, si vous vous intéressez à la programmation, le modifier à votre guise .... Je ne pense pas que vous y arriverez ....

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot line1
#property indicator_label1  "Period"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label2  "Period"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input int      Days=3;
//--- indicator buffers
double         Pmax[],Pmin[];
bool run=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pmax);
   SetIndexBuffer(1,Pmin);
   run=true;
   switch(_Period)
     {
      case PERIOD_M1:   SetIndexShift(0,1440*Days);SetIndexShift(1,1440*Days);   break;
      case PERIOD_M5:   SetIndexShift(0,288*Days); SetIndexShift(1,288*Days);    break;
      case PERIOD_M15:  SetIndexShift(0,96*Days);  SetIndexShift(1,96*Days);     break;
      case PERIOD_M30:  SetIndexShift(0,48*Days);  SetIndexShift(1,48*Days);     break;
      case PERIOD_H1:   SetIndexShift(0,24*Days);  SetIndexShift(1,24*Days);     break;
      case PERIOD_H4:   SetIndexShift(0,6*Days);   SetIndexShift(1,6*Days);      break;
      default: run=false; SetIndexShift(0,0); SetIndexShift(1,0);ArrayInitialize(Pmax,EMPTY_VALUE);ArrayInitialize(Pmin,EMPTY_VALUE); break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if(prev_calculated==0)
     {
      run=true;
      ArrayInitialize(Pmax,EMPTY_VALUE);
      ArrayInitialize(Pmin,EMPTY_VALUE);
     }
   if(run)
     {
      int i=0,lastperiod=TimeDay(time[0]);
      double maxvalue;
      if(!ChartGetDouble(ChartID(),CHART_PRICE_MAX,0,maxvalue)) maxvalue=1000.0;
      maxvalue*=10.0;
      while(i<rates_total)
        {
         if(TimeDay(time[i])!=lastperiod)
           {
            lastperiod=TimeDay(time[i]);
            Pmax[i-1]=maxvalue;
            Pmin[i-1]=0.0;
           }
         else
           {
            Pmax[i]=EMPTY_VALUE;
            Pmin[i]=EMPTY_VALUE;
           }
         i++;
        }
      run=false;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
Graphique EURUSD.e, H1, 2018.11.09 13:11 UTC, RoboForex (CY) Ltd, MetaTrader 4, Demo


j'ai déjà essayé et je ne sais pas pourquoi, je ne sais pas pourquoi, c'est la première fois que je le vois ainsi, il semble que j'initialise les tampons quand je change de temps.

 
neverness:

J'ai enfin vu la seule "réponse constructive" à ma question dans toute cette "discussion".

Quant aux erreurs, elles sont présentes sur toutes les semaines de séparation dans le cadre actuel (dernier) sur MT4 et MT5.

Partout dans la dernière semaine le séparateur MT4/MT5 dessine le séparateur 7 jours au lieu de 5.

Mais là n'est pas la question. Les erreurs ont toujours été et seront toujours présentes. Tout ceci peut être corrigé s'il existe un code de programme pour dessiner les délimiteurs.

Ce ne sont pas les erreurs qui me surprennent, c'est tout autre chose.

Personne n'a pensé à écrire un programme pour dessiner les délimiteurs dans la zone prédite pendant toute la durée d'existence de MT4/MT5 ?

Après tout, ce programme est le plus simple.

Tout ce que vous devez savoir, c'est la position du dernier diviseur et la "solution" du temps sur l'axe X (c'est-à-dire quel intervalle de temps prend 1 pixel).

Et jusqu'à présent, personne n'a jamais été capable de faire quoi que ce soit.

Ça, ça me surprend vraiment.

Une fois encore, vous devrez tout faire vous-même.

Je vous l'ai dit - je l'ai fait plus d'une fois. (et sur le marché, et dans plus d'un indicateur)

et vous avez dit que vous avez déjà écrit le code, allez-vous l'écrire à nouveau ?)

 
Igor Makanu:

hmm, je ne sais pas si je dois sourire ou .... Je suis satisfait à 100% de MT4/5, je peux tout faire avec lui, garder l'indicateur qui dessine des périodes D1 sur le graphique, m'intéresser à la programmation, le modifier pour l'adapter à vos besoins ... Je ne pense pas que vous y arriverez ....


Je ne saurais dire pourquoi, c'est la première fois que je vois un tel bug.

Merci, bien sûr.

Comme je le soupçonnais, les jours incomplets, vos séparateurs de période ne correspondent pas aux séparateurs standard.

Mais ce n'est pas très important, car je ne pense pas qu'il faille essayer de redessiner les séparateurs standard, mais plutôt d'accoler les séparateurs de la zone de prévision aux séparateurs de l'historique.

La position des délimiteurs de jour de l'historique incomplet n'affectera donc pas les délimiteurs de prévision.

Une autre différence importante entre votre indicateur et les délimiteurs standard est que les délimiteurs standard sont mis à jour à chaque événement sur le graphique lui-même, mais votre indicateur est mis à jour à chaque événement OnCalculate(). Je pensais que cela se remarquerait - mais en fait, c'est à peine perceptible.

Bien sûr, cet indicateur devrait être redessiné, mais merci quand même. C'était intéressant à voir.

 
Ghabo:

Il s'agit de l'indice de la barre de l'objet portant le nom spécifié. Il y a plus d'un objet et son nom est "QUADRO "+Time[i+1] Comment puis-je savoir qu'il n'y a pas d'objet de ce type sur dix barres ?

C'est clair avec le tampon, si la valeur est vide rien n'est affiché sur le graphique, mais qu'en est-il de l'objet ?

if (ObjectFind(0,"QUADRO"+Time[10])<0)
        {
        //объекта нет на 10 баре
        }
 
Vitaly Muzichenko:
Je peux l'essayer comme ça ?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());

Merci. Il s'agit de l'indice de la barre (120983) de l'objet portant le nom spécifié. Il y a plus d'un objet et son nom est "QUADRO "+Time[i+1] Comment puis-je savoir qu'il n'y a pas d'objet de ce type sur dix barres ?

J'ai compris pour le tampon, si la valeur est vide, rien n'est affiché sur le graphique, mais qu'en est-il de l'objet ?

Raison: