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

 
Roman:

Si elle a été saisie, alors il y a une différence.
La lecture d'une variable initialisée est toujours plus rapide que celle d'une fonction.

Il n'y a pas de différence. Je ne trouve pas le lien maintenant - mais la réponse a été donnée il y a longtemps.

 
Vladimir Karputov:

Il n'y a pas de différence. Je ne trouve pas le lien maintenant - mais la réponse a été donnée il y a longtemps.

Pour Juan et les avertissements du compilateur, il n'y a pas de différence ;))

 
Vladimir Karputov:

Il n'y a pas de différence. Lors de la compilation, tout est regroupé en un seul appel. C'est pourquoi il est préférable de tout faire par le biais de fonctions.

Et commençons un fil séparé à ce sujet aussi et discutons-en comme pour les pips et les points... Ça donnera aux gens quelque chose à faire...

Vous aimez imposer vos opinions à tout le monde...

 

Il y a un MA avec un certain décalage. Soit MA_shift = 5 ;

Pourquoi est-il possible d'obtenir la bonne valeur de MA à partir de la barre zéro du graphique uniquement si un double décalage négatif est passé à CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf) ;

MA_Buf[0] a maintenant la valeur correcte.

 
RickD:

Il y a un MA avec un certain décalage. Soit MA_shift = 5 ;

Pourquoi est-il possible de prendre la valeur correcte de MA à partir de la barre zéro du graphique, uniquement si vous passez un double décalage négatif dans CopyBuffer ?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf) ;

MA_Buf[0] a maintenant la valeur correcte.

Faites d'abord un dessin et précisez ce qu'est la "barre de zéro" pour votre indicateur avec le paramètre shift.

 
Roman:

Lecture d'une variable, plus rapide qu'une fonction.

Pas vraiment, j'ai vérifié ce qui est plus rapide que _Symbol ou Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.

le temps d'accès est le même, l'optimisation du code dans MQL est très cool, donc utilisez ce qui vous convient.

d'après mes tests, le temps d'accès peut être différent selon l'endroit où la variable est décrite et avec quels modificateurs, mais il y a une vitesse de 2-5%, qui peut en principe être imputée à l'implémentation dans un build particulier, cela dépend du numéro du build

 
Pouvez-vous m'indiquer le moyen le plus simple et le plus rapide d'obtenir le résultat de la dernière transaction pour le symbole actuel ? Parce que dans la documentation, tout est si compliqué. Pour obtenir le résultat, il faut d'abord trouver le ticket de l'offre requise, pour trouver le ticket il faut trouver l'offre dans l'historique par son index, l'index doit être recherché dans l'historique, sans oublier qu'il faut aussi filtrer par le symbole.
 
WinZip:
Pourriez-vous m'indiquer comment obtenir facilement et rapidement le résultat de la dernière transaction avec le symbole actuel ? Parce que la documentation est très complexe. Pour obtenir le résultat, il faut d'abord trouver le ticket du trade recherché, pour trouver le ticket il faut trouver le trade dans l'historique par son index, l'index doit être recherché dans l'historique, sans oublier qu'il faut filtrer par le symbole.

Pour éviter de consulter l'historique des transactions à chaque fois, il suffit d'attraper la transaction dansOnTradeTransaction avec le type

TRADE_TRANSACTION_DEAL_ADD - ajout de la transaction à l'historique


//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - symbole actuel, InpMagic - identifiant unique de l'Expert Advisor

 
Bonjour, je me suis inscrit sur le site et le mail facebook et je n'arrive pas à accéder à meta trader 5-4 aidez-moi à réapprovisionner mon compte
 
Igor Makanu:

ce n'est pas un fait, j'ai vérifié lequel est le plus rapide que _Symbol ou Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905

Par exemple, le temps d'accès est le même, l'optimisation du code dans MQL est très cool, donc tout ce qui est pratique, utilisez-le.

d'après mes tests, le temps d'accès peut être différent selon l'endroit où la variable est décrite et avec quels modificateurs, mais il y a 2-5% de vitesse, ce qui en principe peut être imputé à l'implémentation dans un build particulier, cela dépend du numéro du build

Je suis d'accord pour dire que l'optimiseur fonctionne bien, mais se reposer toujours sur l'optimiseur du compilateur est une erreur.
Vous devez réfléchir à l'avance à la manière dont le code est exécuté au niveau de la mémoire, de l'initialisation et du retour des valeurs.
C'est-à-dire calculer le nombre d'actions exécutées par opération et s'il y a moins d'actions, le code est plus rapide. Et prenez l'habitude d'écrire un code optimal en une seule fois.
Dans les codes courts, il n'y a peut-être pas de différence, mais lorsqu'il y a un projet avec des centaines de fichiers, c'est là que les retards apparaissent,
et il n'y aura qu'un profileur et une réécriture du code. Chacun choisit son propre râteau ;)).

Cherchez aussi des mots-clés sur Google

__inline 
__forceinline
Curieusement, ils sont dans mql comme non documentés.