Errores, fallos, preguntas - página 3155

 
murziks #:


¿Puedes decirme qué más puede leer Metatrader en lugar de csv?

Los archivos binarios pueden leer y escribir. Variables, estructuras, arrays. Todo esto se escribe en archivos y se lee de nuevo.

 

Estimados desarrolladores de terminales móviles, por favor, arreglen ya el manejo de los correos electrónicos en la pestaña "Correo".

Antes de la última compilación del terminal móvil (Android), al conectarse a una cuenta, la pestaña "Correo" está llena de correos electrónicos que han sido borrados muchas veces antes.

En cuanto me vuelvo a conectar a la cuenta, veo un lío de correos electrónicos eliminados y no eliminados previamente en la pestaña de Correo. ¿Qué tengo que hacer para deshacerme de él?

 

Por favor, explique qué cambia en el terminal para el PC "Herramientas > Configuración > Mostrar historial de operaciones", si en cualquier valor de la casilla de verificación se puede activar/desactivar la visualización del historial de operaciones a través de "PCM > Historial de operaciones" y "F8 > Mostrar historial de operaciones".

Es decir, puedo desactivar la visualización del historial de operaciones en los ajustes generales del terminal, para que no interfiera con él, mientras que sí se mostrará en cualquier gráfico si se activa en los ajustes del gráfico o utilizando el PCM. No entiendo la lógica.

 

Estimados desarrolladores del terminal PC. Desde hace tiempo, cuando se trabaja con perfiles de gráficos (no con plantillas, sino sólo con perfiles) existe una extraña lógica que consiste en que cualquier cambio en un perfil hace que se guarde automáticamente sin necesidad de indicarlo manualmente.

Errores en la personalización del perfil por parte del usuario o fallos en el terminal convierten un espacio de trabajo difícil de configurar en una calabaza.

¿Por qué no podemos hacer que hasta que el usuario no guarde manualmente el perfil, los cambios realizados en el mismo no se guarden (que se guarden en un archivo de perfil temporal y no en el último perfil de trabajo)?

Llevamos muchos años esperando cambios en la interfaz incorporada a la TradingView, probablemente no es difícil para usted, y es muy conveniente para los usuarios.

 

¿Por qué hay tanta diferencia, por ejemplo, una prueba con la casilla de verificación "beneficio en pips para acelerar los cálculos" una reducción del 15%, y sin esta casilla una reducción del 93%?

¿Qué resultado es más correcto?

El número de operaciones es el mismo

En este caso, un beneficio de 2 libras en el primer caso y 20 libras en el segundo con el mismo lote.

Al igual que es visible si se cambia el lote también es una diferencia de 10 dólares.

 
Gracias. No querrás txt
 
Las criptomonedas han desaparecido de los servidores de MQ. Degradación, tristeza y frustración.
 

Errores en Generic/Queue.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

[POSIBLE ERROR] Clase de contenedor CQueue

Loris De Marchi, 2022.02.14 13:00

¡¡¡Hola a todos!!!

Sospecho que al menos en los métodos CQueue::Contains(T item) y CQueue::Remove(T item) hay un error.

La cola se gestiona mediante el clásico sistema circular cabeza-cola, por lo que este código debe estar equivocado:

 //+------------------------------------------------------------------+
//| Removes all values from the CQueue<T>.                           |
//+------------------------------------------------------------------+
template < typename T>
bool CQueue::Contains(T item)
  {
   int count=m_size;
//--- try to find item in array
   while (count--> 0 )
     {
       //--- use default equality function
       if (::Equals(m_array[count],item))
         return ( true );
     }
   return ( false );
  }

También la descripción incorrecta del método anterior me hace pensar que se pueden haber cometido algunos errores al escribir esta clase.


El método Remove falla claramente al ejecutar este sencillo código, por ejemplo:

   CQueue< ulong > foo;
   foo.Enqueue( 1 );
   foo.Remove( 1 );
   foo.Enqueue( 2 );
   printf (foo.Contains( 2 ));

Imprime "false" cuando el elemento está claramente en la cola...


Avísenme si esta clase está arreglada o si debo usar una de las mías.

Gracias.


 

Hola. Sabemos que las matrices en MQL pueden estar indexadas tanto hacia adelante como hacia atrás (series). Por eso tengo una pregunta, ¿cuál es la mejor forma de trabajar con arrays en MQL, si se necesita una indexación en serie o inversa? La primera variante para obtener el valor por índice de la serie puede ser la siguiente.

double arrayValue(const double array[], conct int shift) {
  int len = (int)array.Size();
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  return array[len - shift - 1];
}

La segunda forma es utilizarArraySetAsSeries.

double arrayValue(double &array[], conct int shift) {
  int len = (int)array.Size();
  double ret;
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  if (!ArraySetAsSeries(array, true))
    return WRONG_VALUE;
  ret = array[shift];
  ArraySetAsSeries(array, false);
  return ret;
}

Por supuesto, no estoy afirmando nada, pero creo que porque ArraySetAsSeries simplemente activar la serie de la bandera de la matriz y al acceder a un valor por el índice se produce como en el primer ejemplo.

double arrayValue(const double array[], conct int shift) {
  int len = (int)array.Size();
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  return array[len - shift - 1];
}

Y así es como se maneja el direccionamiento del valor por el índice.

¿Tiene sentido incluir las series para arrays en el manejador del indicador OnCalculate cada vez, o sería mejor abordar la barra baja usando la longitud de arrays rates_total?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) 
{
  Print(price[rates_total-1]); // получение цены на младшем баре без использования серии
  return(rates_total);
}

¿Son estos dos métodos iguales en velocidad o estoy equivocado en mi razonamiento?

 

El terminal no devuelve el beneficio acumulado de las posiciones cerradas. ¿Puede decirme dónde puede estar el problema?

double GetClosedPositionsInstrumentProfit(string symbol, datetime from) 
{
   HistorySelect(from, TimeCurrent());

   double profitSum = 0;

      for (int i = HistoryDealsTotal()-1; i >= 0; i--) 
    {   
      ulong ticket = HistoryDealGetTicket(i);
      if (ticket < 0) continue; 
      long magic = HistoryDealGetInteger(ticket, DEAL_MAGIC);
      if (magic != EXPERT_MAGIC) continue; 
      string positionSymbol = HistoryDealGetString(ticket, DEAL_SYMBOL);
      if (symbol != positionSymbol) continue; 
      
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT) + HistoryDealGetDouble(ticket, DEAL_SWAP)+ HistoryDealGetDouble(ticket, DEAL_COMMISSION);
      profitSum += profit; 
         
      Print ("Profit " + DoubleToString(profitSum,2));              
    }         
   return profitSum;
}
Razón de la queja: