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);
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.
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 |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(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);
}
elsereturn;
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
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 )).
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.
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 ))
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.
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.
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
¿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
m_symbol.Name() - símbolo actual, InpMagic - identificador único del Asesor Experto
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.
Curiosamente, están en mql como indocumentados.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