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

 
vladzeit:

***

1. Demande le prix actuel de l'instrument en cours.

***

2.1 Si le prix actuel est Point >= 100 pips, nous ouvrons une position.

***

Vous voulez rattraper un écart ?

 
Vladimir Karputov:

Vous voulez rattraper un écart ?

Vladimir, à ma grande honte, je ne suis pas sûr de comprendre ce qu'est un Gap)

Je veux mettre en place un algorithme simple, dans lequel un changement de prix d'un certain nombre de pips sera une condition pour entrer sur le marché, pour acheter ou vendre.... n'a pas d'importance.

Par conséquent, je veux apprendre comment obtenir le prix actuel du symbole, l'enregistrer dans une variable locale ou globale et le récupérer à partir de là lors d'un événement, et le remettre à zéro.

Je veux l'utiliser principalement pour trouver des points d'entrée sur le marché.

Je viens de commencer à apprendre mql5, principalement grâce à vos exemples d'Expert Advisors, que vous écrivez beaucoup, merci).

Je suis capable d'élaborer mes propres algorithmes à partir de vos exemples, mais je ne comprends pas comment obtenir le prix actuel et l'enregistrer dans une variable.

 
vladzeit:

***

Je veux mettre en place un algorithme simple dans lequel un changement de prix d'un certain nombre de pips serait une condition pour entrer sur le marché, pour acheter ou vendre.... n'a pas d'importance.

***

Vous devez comprendre que si vous fixez un prix sur le tick actuel, sur le tick suivant ce prix peut soit ne pas changer du tout, soit changer d'un très petit nombre de points.

Vous devez donc être plus précis sur ce que vous voulez faire :

  • par exemple, obtenir le prix actuel une fois dans N-secondes.
  • obtenir le prix actuel uniquement lors de la formation de nouvelles barres.
  • ...
  • et seulement ensuite comparer ce prix avec la valeur stockée précédente.

 
Vladimir Karputov:

Il faut comprendre que si vous mémorisez un prix sur le tick actuel, alors sur le tick suivant ce prix peut soit ne pas changer du tout, soit changer d'un très petit nombre de points.

Vous devez donc être plus précis sur ce que vous voulez faire :

  • par exemple, obtenir le prix actuel une fois dans N-secondes.
  • obtenir le prix actuel uniquement lors de la formation de nouvelles barres.
  • ...
  • et seulement ensuite comparer ce prix avec la valeur précédente mémorisée.

Hmmm... Je n'ai pas pensé à ces fonctionnalités)

  • Pour obtenir le prix actuel uniquement au moment où une nouvelle barre est née.
Cet exemple me serait plus utile.
 
vladzeit:

Mmm... Ce sont des fonctionnalités auxquelles je n'avais pas pensé)

  • Obtenez le prix actuel uniquement lorsqu'une nouvelle barre est née.
Cet exemple me sera plus utile.

Je vais essayer de montrer un exemple ce soir (tard).

 

Bonjour !
J'essaie d'accélérer l'indicateur. J'essaie d'accélérer l'indicateur car j'ai un tableau de temps qui doit être comparé aux indices des barres et je vois une certaine lenteur ici. J'ai déjà vérifié, si j'ai préparé un tableau avec des index et que je l'ai comparé aux index des barres, j'obtiens 40K éléments en 7 secondes, mais si j'ai un tableau temporel, cela prend 140 secondes. Existe-t-il des astuces pour accélérer l'indicateur ?

   bool FindArr(int Bar)
     {
      int Size=CheckSizeTime;
      for(int i=restBars; i<Size; i++)
        {
         datetime BarTime=iTime(NULL,PERIOD_CURRENT,Bar);
         if(BarTime==ArrCol.BarTimeArray[i])
           {
            restBars++;
            return(true);
           }
        }
      return(false);
     }
if(prev_calculated==0)         
        for(int i=0;i<rates_total;i++)
           {
            if(Arr.FindArr(i))
              {
               ColorSectionBuffer[i]=low[i];
               ColorSectionColors[i]=0;
              }
            else
              {
               ColorSectionBuffer[i]=0;
               ColorSectionColors[i]=EMPTY_VALUE;
              }
           }
 
vladzeit:

Mmm... Ce sont des fonctionnalités auxquelles je n'avais pas pensé)

  • Obtenez le prix actuel uniquement lorsqu'une nouvelle barre est née.
Cet exemple me sera plus utile.
Vladimir Karputov:

Je vais essayer de montrer un exemple ce soir (tard).

Je faisais un exemple pour que quelqu'un obtienne les prix sur chaque tick:

//+------------------------------------------------------------------+
//|                                               Display prices.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   Comment("Ask: ",DoubleToString(m_symbol.Ask(),m_symbol.Digits()),"\n",
           "Bid: ",DoubleToString(m_symbol.Bid(),m_symbol.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Les explications seront données demain, je dors déjà ce soir.

Demain, il y aura également un exemple de nouveau bar.

Dossiers :
 
Vladimir Karputov:

Voici un exemple d'obtention de prix sur chaque tick pour quelqu'un d'autre :

Je t'expliquerai demain, je suis déjà au lit ce soir.

Demain, il y aura également un exemple de nouveau bar.

Vladimir, merci.Je me suis un peu familiarisé avec la fonctionRefreshRates de la classeCSymbolInfo .Je l'ai vu dans vos rapports et lu dans un livre d'introduction.

L'appel de cette fonction dansOnTick et la sortie des valeurs de prix dansComment sont également clairs pour moi dans l'exemple. La procédure dansOnInit pour vérifier le symbole actuel est également claire pour moi.

En attendant l'exemple avec la nouvelle barre, je vais essayer de mettre en pratique votre exemple, je ne l'ai pas utilisé en pratique. Je vais l'essayer.


 
fxsaber:

Merci, je l'ai corrigé.

Merci - maintenant il semble donner les répertoires seulement correctement.

Cependant, je me suis rendu compte que les sous-répertoires sont séparés par un seul "\", alors que la norme MQL prévoit deux barres obliques "\\". C'est-à-dire que le code est nécessaire pour générer des chemins de fichiers et à cause d'une barre oblique, il est impossible de le faire sans post-traitement supplémentaire, y a-t-il une option pour obtenir deux barres obliques à la fois ?

 
Aleksey Vyazmikin:

Merci - maintenant seuls les répertoires semblent être corrects.

Cependant, je me suis rendu compte que les sous-répertoires sont séparés par un seul "\", alors que la norme MQL prévoit deux barres obliques "\\". C'est-à-dire que le code est nécessaire pour générer des chemins de fichiers et à cause d'une barre oblique, il est impossible de le faire sans post-traitement supplémentaire, y a-t-il une option pour obtenir deux barres obliques à la fois ?

Print("\\");
Raison: