Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1163

 
Roman:

Se è stato inserito, allora c'è una differenza.
La lettura di una variabile inizializzata è sempre più veloce della lettura di una funzione.

Non c'è differenza. Non riesco a trovare il link ora - ma la risposta è stata data molto tempo fa.

 
Vladimir Karputov:

Non c'è differenza. Non riesco a trovare il link ora - ma la risposta è stata data molto tempo fa.

Per Juan e gli avvertimenti del compilatore, non c'è differenza ))

 
Vladimir Karputov:

Non c'è differenza. Quando si compila tutto, si riunisce tutto in una sola chiamata. Ecco perché è meglio fare tutto attraverso le funzioni.

E iniziamo anche un thread separato su questo e discutiamone come per i pip e i punti... Questo darà alla gente qualcosa da fare...

Voi amate imporre le vostre opinioni a tutti...

 

C'è un MA con qualche spostamento. Sia MA_shift = 5;

Perché è possibile ottenere il giusto valore di MA dalla barra zero del grafico solo se si passa un doppio spostamento negativo a CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] ha ora il valore corretto.

 
RickD:

C'è un MA con qualche spostamento. Sia MA_shift = 5;

Perché è possibile prendere il valore corretto di MA dalla barra zero del grafico, solo se si passa un doppio spostamento negativo in CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] ha ora il valore corretto.

Disegna prima un'immagine e specifica cos'è la "barra zero" per il tuo indicatore con il parametro shift.

 
Roman:

Lettura di una variabile, più veloce di una funzione.

Non proprio, ho controllato quale è più veloce di _Symbol o Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.

il tempo di accesso è lo stesso, l'ottimizzazione del codice in MQL è molto cool, quindi usate quello che vi conviene.

secondo i miei test il tempo di accesso può essere diverso a seconda di dove la variabile è descritta e con quali modificatori, ma c'è un 2-5% di velocità, che in linea di principio può essere attribuito all'implementazione in una particolare build, dipende dal numero di build

 
Potete dirmi il modo più semplice e veloce per ottenere il risultato dell'ultima transazione per il simbolo corrente? Perché dalla documentazione tutto è così complicato. Per ottenere il risultato bisogna prima trovare il biglietto dell'affare richiesto, per trovare il biglietto bisogna trovare l'affare nella storia per il suo indice, l'indice deve essere cercato nella storia, senza contare che bisogna anche filtrare per il simbolo.
 
WinZip:
Potreste consigliarmi come ottenere facilmente e rapidamente il risultato dell'ultimo scambio con il simbolo corrente? Perché la documentazione è molto complessa. Per ottenere il risultato, è necessario trovare prima il biglietto del trade richiesto, per trovare il biglietto è necessario trovare il trade nella storia per il suo indice, l'indice deve essere cercato nella storia, senza contare che dovremmo filtrare il filtro per il simbolo.

Per evitare di andare nella storia del trading ogni volta - basta prendere l'affare inOnTradeTransaction con il tipo

TRADE_TRANSACTION_DEAL_ADD - aggiungere una transazione alla storia


//+------------------------------------------------------------------+
//| 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() - simbolo corrente, InpMagic - identificatore unico dell'Expert Advisor

 
Ciao mi sono registrato sul sito e facebook mail e non riesco a entrare in meta trader 5-4 aiutatemi a ricaricare il mio account
 
Igor Makanu:

non è un fatto, ho controllato che è più veloce di _Symbol o Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905

Cioè il tempo di accesso è uno e lo stesso, l'ottimizzazione del codice in MQL è molto cool, quindi qualunque cosa sia conveniente, usatela.

secondo i miei test il tempo di accesso può essere diverso a seconda di dove la variabile è descritta e con quali modificatori, ma c'è un 2-5% di velocità, che in linea di principio può essere attribuito all'implementazione in una particolare build, dipende dal numero di build

Sono d'accordo che l'ottimizzatore funziona bene, ma affidarsi sempre all'ottimizzatore del compilatore è sbagliato.
Dovete pensare in anticipo a come il codice viene eseguito a livello di memoria, inizializzazione e ritorno di valore.
Cioè, calcola il numero di azioni eseguite per operazione e se ci sono meno azioni, il codice è più veloce. E prendete come pratica quella di scrivere un codice ottimale in una volta sola.
Nei codici brevi forse non c'è differenza, ma quando c'è un progetto con centinaia di file, è allora che appaiono i ritardi,
e ci sarà solo un profiler e riscrivere il codice. Ognuno sceglie il proprio rastrello )).

Anche google per le parole chiave

__inline 
__forceinline
Stranamente, sono in mql come non documentati.