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

 
Vladimir Karputov:

Lors du débogage, passez en revue et vérifiez dans quels cas votre condition tiendra ?


Rates_total - prev_calculs est très efficace.

  • Si elle est égale à zéro - cela signifie que le calcul sera effectué sur la barre actuelle par un tick.
  • S'il est égal à 1 - cela signifie qu'il y a une nouvelle barre et que deux barres seront calculées - la précédente et l'actuelle.
  • S'il est supérieur à 1, cela signifie qu'il s'agit de la première exécution ou d'un changement dans les données historiques.
Nous calculons la limite. Et dans la boucle de la limite à plus grand ou égal à zéro, nous calculons les données de l'indicateur. Et vous calculez vous-même ce à quoi la limite est égale en calculant limite = taux_total - prev_calculs.
 
Artyom Trishkin:

rates_total - prev_calculates est une construction très efficace.

  • S'il est égal à zéro, cela signifie que le calcul est effectué sur la barre courante par le tick.
  • S'il est égal à 1, cela signifie qu'il y a une nouvelle barre et que deux barres seront calculées - la précédente et l'actuelle.
  • S'il est supérieur à 1, cela signifie qu'il s'agit de la première exécution ou d'un changement dans les données historiques.
Nous calculons la limite. Et dans la boucle de la limite à plus grand ou égal à zéro, nous calculons les données de l'indicateur. Et vous calculez vous-même quelle est la limite en calculant limite = taux_total - prev_calculs.

Regardez le code.

Puis donnez vos commentaires.

 
Vladimir Karputov:

Regardez le code.

Alors commentez-la.

Pourquoi cette impolitesse ? Je n'étais pas impoli.

J'ai répondu quand la ligne que vous avez citée et son état tiendront :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie

FAQ des débutants MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2020.08.06 13:03

Lors du débogage, vérifiez dans quels cas votre condition sera remplie.


J'ai même ajouté une réponse à trois conditions possibles et ce qui est fait dans un tel cas :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

FAQ des débutants MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates est un algorithme très efficace.

  • S'il est égal à zéro, cela signifie un calcul sur la barre actuelle par le tick.
  • S'il est égal à 1, cela signifie qu'il y a une nouvelle barre et deux barres seront calculées - la précédente et l'actuelle.
  • S'il est supérieur à 1, cela signifie qu'il s'agit de la première exécution ou d'un changement dans les données historiques.
Nous calculons la limite. Et dans la boucle de la limite à plus grand ou égal à zéro, nous calculons les données de l'indicateur. Et calculez ce qu'est la limite en calculant la limite = rates_total - prev_calculates.

Vous n'avez rien à faire pour le traitement - ce calcul même lancera le cycle à partir de la valeur nécessaire dans chacun des trois états.

 
Artyom Trishkin:

Pourquoi être impoli ? Je n'étais pas impoli.

J'ai répondu dans quels cas la ligne que vous avez citée et sa condition seront remplies :

Et j'ai même complété la réponse avec trois états possibles, et ce qui est fait dans un tel cas :

Vous n'avez rien à faire pour le traiter vous-même - ce calcul exact lancera une boucle à partir de la valeur souhaitée dans chacun des trois états.

Prenez le code et passez par le débogage. Ensuite, vous pouvez le faire vous-même - mais maintenant, allez jusqu'au bout et expliquez au moins trois erreurs.

 
Vladimir Karputov:

Prenez le code et passez par le débogage. Faites le reste par vous-même - mais allez jusqu'au bout et expliquez au moins trois erreurs.

Non. Je n'ai pas le temps. Je n'ai répondu qu'à la ligne que vous avez citée - il n'y a pas d'erreur à cet endroit. Et à partir de là (j'ai jeté un coup d'œil au code du coin de l'œil), laissez-le essayer de comprendre par lui-même (il y a des erreurs, et elles sont à la surface).

Il y a beaucoup d'exemples de telles constructions ici sur le forum et ses services.

Victor Nikolaev l'a toujours utilisé (ou le fait encore s'il n'est pas paresseux), et me l'a appris il y a longtemps.

Victor Nikolaev
Victor Nikolaev
  • www.mql5.com
Профиль трейдера
 
Artyom Trishkin:

Non. Je n'ai pas le temps. Je n'ai répondu qu'à la ligne que vous avez citée - il n'y a aucune erreur. Et en plus (j'ai jeté un coup d'œil au code du coin de l'œil), laissez-le essayer de le comprendre lui-même (il y a des erreurs, et elles sont à la surface).

Il y a beaucoup d'exemples de telles constructions ici sur le forum et ses services.

Victor Nikolaev l'a toujours utilisé (ou l'utilise encore s'il n'est pas paresseux), et me l'a appris il y a longtemps.

Il vaut mieux lire le forum non pas depuis un téléphone portable, mais depuis un ordinateur. Et lisez TOUS les messages, pas les favoris. Si vous ne voulez pas aider, ne participez pas du tout à la conversation.

 
Сергей Таболин:


Voici un exemple : en fonction de DRAW_COLOR_CANDLES, si la taille de la bougie est inférieure à celle définie - la bougie n'est pas dessinée.

Remarque : il s'agit d'un indicateur remanié - à l'origine, il dessinait les chandeliers par High et Low. Et pas encore de ticks - juste un exemple de travail avec DRAW_COLOR_CANDLES, si la taille de la bougie est plus petite que celle définie - la bougie n'est pas dessinée.

//+------------------------------------------------------------------+
//|                                             High Low Candles.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots   1
//--- plot HLC_
#property indicator_label1  "High Low Candles"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrLimeGreen,clrLavender
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input uint     InpMinSize     = 150;            // Candles: min size
//--- indicator buffers
double   OpenBuffer[];  // open
double   HighBuffer[];  // high
double   LowBuffer[];   // low
double   CloseBuffer[]; // close
double   Colors[];
//---
double   m_min_size           = 0.0;            // Candles: min size          -> double
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,Colors,INDICATOR_COLOR_INDEX);
//--- an empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- set the display of the symbol
   string symbol=Symbol();
   PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");
   IndicatorSetString(INDICATOR_SHORTNAME,"HLC ("+symbol+")");
//---
   m_min_size=InpMinSize*Point();
//---
   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[])
  {
//---
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      HighBuffer[i]=high[i];
      LowBuffer[i]=low[i];
      if(open[i]<close[i])
        {
         if(close[i]-open[i]>m_min_size)
           {
            OpenBuffer[i]=low[i];
            CloseBuffer[i]=high[i];
            Colors[i]=1.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
      else
        {
         if(open[i]-close[i]>m_min_size)
           {
            OpenBuffer[i]=high[i];
            CloseBuffer[i]=low[i];
            Colors[i]=0.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Résultat :


Dossiers :
 
Vladimir Karputov:

Vous devriez lire le forum depuis votre ordinateur plutôt que depuis votre téléphone portable. Et lisez TOUS les messages, pas les préférés. Si vous ne voulez pas aider, ne participez pas du tout à la conversation.

Vous êtes malade ? :)


 

Les gars, Artyom et Vladimir, ne vous disputez pas, il n'y a vraiment pas de quoi se disputer... )))

Maintenant, les erreurs. J'ai commencé à écrire cet indicateur simplement pour visualiser ce que j'ai lu dans cet article. Et j'ai commencé à l'écrire après avoir été envoyé aux bains il y a un mois. C'est parce que j'ai eu le temps de trouver mes propres erreurs. Je ne les trouvais pas, c'est pourquoi je suis venu chercher de l'aide ici.

Je vous ai demandé de me montrer où je me trompe (dans le code). Et pourquoi ?

Je ne peux pas utiliser le débogueur. Je ne sais pas comment. Aucune variable n'est ajoutée à "watchable" (j'ai écrit à ce sujet sur le forum il y a assez longtemps...).

Dites-moi juste où se trouve l'attelage ?

Дискретизация ценового ряда, случайная составляющая и "шумы"
Дискретизация ценового ряда, случайная составляющая и "шумы"
  • www.mql5.com
Классический способ представления ценовых движений в виде временных отрезков возник на заре становления финансовых рынков, когда еще не было компьютеров и вся торговля шла на реальных рынках, реальными товарами. Хранить каждое изменение цены в течении дня было трудно, да и не имело смысла, цены менялись не так быстро. Поэтому представлялось...
 
Сергей Таболин:

Dites-moi juste où se trouve l'attelage ?

Le problème réside dans l'organisation du code. J'ai essayé de le regarder, mais il est écrit d'une telle manière que mon cerveau ne peut pas le comprendre. Je ne sais pas comment expliquer ce qui ne va pas.

Je ne peux que vous conseiller de commencer par le début et dans l'ordre.

  1. Commencez par isoler chaque bougie N.
  2. Définissez ensuite une condition pour choisir la bougie à mettre en évidence.
Et enfin, apprenez à utiliser le débogueur.
Raison: