Errores, fallos, preguntas - página 932

 
notused:

Los agentes remotos han estado abandonando regularmente (un par de veces a la semana) durante varios meses debido a la falta de espacio:

o

y los registros del agente están limpios o:

y en realidad hay mucho espacio:

Aparece cuando se prueba algo pesado (me refiero a una vista múltiple de 10 herramientas durante un período de un año o dos). Parece que en algún momento el agente quiere crear un megafichero (aunque no hay impresiones ni trabajo con ficheros en el EA). En definitiva, se ha vuelto realmente difícil trabajar

Recuento: un año de historial de ticks (todos los ticks en modo M1) requiere aproximadamente 3Gb de espacio en disco para archivos temporales (observe la carpeta "...\tester\Agent-0.0.0-xxxxx\temp", cuando se ejecuta un trabajo pesado). Multiplique por el número de agentes. 17 Gb ya está al borde (y si tienes 8 agentes, lo superas).

Curioso nombre para un Asesor Experto. ;)

PS. elprobador (743) se queda atascado por los límites sin nombre...

 

Ayuda, por favor. ¿Por qué no encuentra el comercio (error 4755)?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistoryDealSelect(trans.deal)) {
      long DealMagic;
      if (HistoryDealGetInteger(trans.deal, DEAL_MAGIC, DealMagic)) {
        //
      }
      else Print("HistoryDealGetInteger(" + (string)trans.deal + ", DEAL_MAGIC, DealMagic) = false! GetLastError() = ", GetLastError());
    }
    else Print("HistoryDealSelect(" + (string)trans.deal + ") = false! GetLastError() = ", GetLastError());
  }
}

Listado de terminales:

2013.02.07 10:31:52   instant sell 0.01 EURUSD at 1.35354 (1.35354 / 1.35364 / 1.35354)
2013.02.07 10:31:52   deal #1028 sell 0.01 EURUSD at 1.35354 done (based on order #1028)
2013.02.07 10:31:52   deal performed [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   order performed sell 0.01 at 1.35354 [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   HistoryDealGetInteger(1028, DEAL_MAGIC, DealMagic) = false! GetLastError() = 4755
 
Ashes:

Haga las cuentas: un año de historial de ticks (con todos los ticks en M1) requiere unos 3 Gb de espacio en disco para archivos temporales (observe la carpeta "...\tester\Agent-0.0.0-xxxxx\temp" cuando tenga un trabajo pesado). Multiplique por el número de agentes. 17 Gb ya está al borde (y si tienes 8 agentes, lo superas).

Curioso nombre para un Asesor Experto. ;)

Gracias. No podría haber adivinado que 16 GB podrían no ser suficientes. Transferiré los agentes a otra unidad - 650GB serán, con suerte, suficientes.

Yo también solía ver esto, especialmente cuando mi ordenador está ocupado. Pero últimamente, cuando se carga el ordenador, la ejecución de una sola prueba simplemente mata al terminal (no es por falta de espacio - el terminal se encuentra donde hay 650 GB de espacio libre). Pero si matas todos los procesos posibles, todo va bien.
 
voix_kas:

Ayuda, por favor. ¿Por qué no encuentra una operación (error 4755)?

Puede haber un problema con HistoryDealSelect si el código fue probado en el probador de estrategias.

enlace


 
sion:

Puede haber un problema con HistoryDealSelect si el código fue probado en el probador de estrategias.

ping


Si uso una construcción con HistorySelect(), todo funciona bien.

No funciona con OnTradeTransaction. Este acontecimiento probablemente se produce antes de que la información sobre la operación se introduzca en alguna base de datos. A pesar de la indicación explícita en la documentación:

TRADE_TRANSACTION_DEAL_ADD -adición de una operación al historial. Se realiza como resultado de la ejecución de una orden o de operaciones de saldo de cuenta.

 
voix_kas:

Si utilizo HistorySelect(), todo funciona bien.

OnTradeTransaction no funciona. Probablemente, este evento ocurre antes de que la información sobre la transacción se almacene en alguna base de datos. A pesar de la indicación explícita en la documentación:

TRADE_TRANSACTION_DEAL_ADD -adición de una operación al historial. Se realiza como resultado de la ejecución de una orden o de la realización de una operación en el saldo de la cuenta.

Aquí probamos que funcionaba a través de HistorySelect(), la misma petición a través de HistoryDealSelect ya falla. En este ejemplo, la velocidad de colocación en la base de datos no tuvo ningún efecto.

Entonces, en el probador de estrategias, ¿se comprueba? En lo real, lo más probable es que funcione bien.

 
sion:

Aquí probamos, funcionó a través de HistorySelect(), la misma petición a través de HistoryDealSelect ya falla. En este ejemplo, la velocidad de colocación en la base de datos no tuvo ningún efecto.

Entonces, en el probador de estrategias, ¿se comprueba? En el real, es probable que funcione bien.

Confirmo, este código con castellana como HistorySelect() funciona bien:

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistorySelect(0, TimeTradeServer())) {
      for (int i = 0; i < HistoryDealsTotal(); i++) {
        ulong Ticket = HistoryDealGetTicket(i);
        if (trans.deal == HistoryDealGetInteger(Ticket, DEAL_ORDER)) {
          Print(HistoryDealGetInteger(Ticket, DEAL_MAGIC));
          break;
        }
      }
    }
    else Log("HistorySelect(0, TimeTradeServer() = false! GetLastError() = ", GetLastError());
  }
}

Queda por esperar cuándo el desarrollador arreglará el evidente error.

 
Sí, lo compruebo en el probador de estrategias. No hay ningún problema en tiempo real.
 
voix_kas:
Sí, lo compruebo en el probador de estrategias. No hay problema en tiempo real.
Younz. Podría ser útil, probablemente tampoco ha cambiado nada.
 
sion:
Yountz. Puede ser útil, probablemente tampoco ha cambiado nada.

De todos modos, encontré una solución para mi necesidad. SinOnTradeTransaction.

Hay una pregunta adicional sobre la funciónHistoryDealGetTicket().

La documentación dice que devuelve el número de ticket de la transacción. Sin embargo, los casos de devolución de errores no se describen explícitamente, por ejemplo, ¿se debe comprobar que el valor devuelto sea ">0"?

De manera similar con HistoryOrderGetTicket(). Sin embargo, este último ejemplo contiene la comprobación del valor positivo devuelto.

Una búsqueda en el foro muestra que la gente comprueba el valor de retorno tanto en el caso de un pedido como en el caso de una transacción.

Lo más probable es que esta comprobación se realice, por ejemplo, en el caso de una solicitud de transacción con un número de orden mayor que HistoryDealTotal()-1. Pero agradecí a los desarrolladores la claridad de la documentación del lenguaje MQL5.