Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1163

 
Roman:

Si se ha introducido, entonces hay una diferencia.
La lectura de una variable inicializada es siempre más rápida que la de una función.

No hay ninguna diferencia. No puedo encontrar el enlace ahora, pero la respuesta se dio hace mucho tiempo.

 
Vladimir Karputov:

No hay ninguna diferencia. No puedo encontrar el enlace ahora - pero la respuesta se dio hace mucho tiempo.

Para Juan y las advertencias del compilador, no hay diferencia ))

 
Vladimir Karputov:

No hay ninguna diferencia. Cuando se compila todo, todo se reúne en una sola llamada. Por eso es mejor hacerlo todo a través de funciones.

Iniciemos un hilo aparte sobre esto también y discutamos sobre ello como sobre los pips y los puntos... Eso le dará a la gente algo que hacer...

Os encanta imponer vuestras opiniones a todo el mundo...

 

Hay un MA con algún desplazamiento. Sea MA_shift = 5;

¿Por qué es posible obtener el valor correcto de MA de la barra cero del gráfico sólo si se pasa un doble desplazamiento negativo al CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] tiene ahora el valor correcto.

 
RickD:

Hay un MA con algún desplazamiento. Sea MA_shift = 5;

¿Por qué es posible tomar el valor correcto de MA de la barra cero del gráfico, sólo si se pasa un doble desplazamiento negativo en CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] tiene ahora el valor correcto.

Dibuje primero un cuadro y especifique qué es la "barra cero" para su indicador con el parámetro de desplazamiento.

 
Roman:

Leer una variable, más rápido que una función.

En realidad no, he comprobado que es más rápido que _Symbol o Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.

el tiempo de acceso es el mismo, la optimización del código en MQL es muy buena, así que usa lo que sea conveniente.

según mis pruebas el tiempo de acceso puede ser diferente dependiendo de dónde se describa la variable y con qué modificadores, pero hay un 2-5% de velocidad, que en principio se puede achacar a la implementación en una determinada build, depende del número de build

 
¿Pueden decirme cuál es la forma más fácil y rápida de obtener el resultado de la última transacción para el símbolo actual? Porque desde la documentación todo es muy complicado. Para obtener el resultado primero hay que encontrar el ticket de la operación requerida, para encontrar el ticket hay que encontrar la operación en el historial por su índice, el índice debe buscarse en el historial, sin olvidar que también hay que filtrar por el símbolo.
 
WinZip:
¿Podría aconsejar cómo obtener fácil y rápidamente el resultado de la última operación con el símbolo actual? Ya que la documentación es bastante complicada. Para obtener el resultado, primero hay que encontrar el ticket de la operación requerida, para encontrar el ticket hay que encontrar la operación en el historial por su índice, el índice hay que buscarlo en el historial, sin olvidar que hay que filtrar por el símbolo.

Para evitar ir al historial de operaciones cada vez, basta con capturar la operación enOnTradeTransaction con el tipo

TRADE_TRANSACTION_DEAL_ADD - añadir una operación al historial


//+------------------------------------------------------------------+
//| 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() - símbolo actual, InpMagic - identificador único del Asesor Experto

 
Hola me registre en el sitio y en el correo de facebook y no puedo entrar en meta trader 5-4 ayudenme a reponer mi cuenta
 
Igor Makanu:

no es un hecho, he comprobado que es más rápido que _Symbol o Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905

Es decir, el tiempo de acceso es uno y el mismo, la optimización del código en MQL es muy chula, así que lo que sea conveniente, úsalo.

según mis pruebas el tiempo de acceso puede ser diferente dependiendo de dónde se describa la variable y con qué modificadores, pero hay un 2-5% de velocidad, que en principio se puede achacar a la implementación en una determinada build, depende del número de build

Estoy de acuerdo en que el optimizador funciona bien, pero confiar siempre en el optimizador del compilador es un error.
Hay que pensar con antelación en cómo se ejecuta el código a nivel de memoria, inicialización y devolución de valores.
Es decir, calcular el número de acciones ejecutadas por operación y si hay menos acciones, el código es más rápido. Y toma como práctica escribir un código óptimo de una vez.
En los códigos cortos quizás no haya diferencia, pero cuando hay un proyecto con cientos de archivos, es cuando aparecen los retrasos,
y sólo habrá un perfilador y reescribir el código. Cada uno elige su propio rastrillo )).

También busque en Google las palabras clave

__inline 
__forceinline
Curiosamente, están en mql como indocumentados.
Razón de la queja: