MQL5: Validación :-( Ya me he devanado los sesos para saber qué es y cómo se soluciona. - página 2

 
Alexandr Gavrilin:

Llegan otros mensajes sobre la escasez de márgenes.

Intenté como se describe en el error sumar todos los lotes para el instrumento en una dirección determinada teniendo en cuenta las órdenes pendientes y no dar una orden de apertura, si se excede teniendo en cuenta la orden abierta, no sirve.

El error es el mismo, mis mensajes de depuración no se muestran en el registro de informes durante la validación No sé cómo atrapar y depurar este error o cómo emular este error en mi terminal

Error.

 
Alexandr Gavrilin:

....

El error es el mismo, mis mensajes de depuración no aparecen en los registros de los informes durante la validación No sé cómo puedo atrapar y depurar el manejo de esto o cómo simular ese error en mi terminal...

Intente abrir una posición con un volumen muy grande. Vea si su EA detecta este error o no.

 
Alexandr Gavrilin:

Se están preparando otros mensajes sobre la escasez de márgenes.

Intenté como se describe en el error sumar todos los lotes para el instrumento en una dirección determinada teniendo en cuenta las órdenes pendientes y no dar una orden de apertura, si se excede teniendo en cuenta la orden abierta, no sirve.

El error es el mismo, no sé cómo rastrear y depurar este error o cómo emularlo en mi terminal.

Puede comprobar el Nivel de Margen. Digamos que si es menos de 5000% entonces no se ejecutará ninguna operación.

 
Vladimir Karputov:

Error.

Resuelto.

//в функции до открытия ордера.

double max_volume=SymbolInfoDouble(m_name,SYMBOL_VOLUME_LIMIT);

      double current_lots=getAllVolume();

      if(max_volume>0 && max_volume-current_lots-dlot<=0)
        {
         //PrintFormat("%.2f - %.2f",max_volume , dlot);
         return 0;
        }
//...
//функция подсчета объема
double getAllVolume()
     {
      int itotal=PositionsTotal();
      ulong uticket=-1;
      double dVolume=0;

      for(int i=itotal-1;i>=0;i--)
        {
         if(!(uticket=PositionGetTicket(i))) continue;

         if(PositionGetString(POSITION_SYMBOL)==m_symbol.Name())
            dVolume+=PositionGetDouble(POSITION_VOLUME);
        }

      itotal=OrdersTotal();

      for(int i=itotal-1;i>=0;i--)
        {
         if(!(uticket=OrderGetTicket(i))) continue;

         if(OrderGetString(ORDER_SYMBOL)==m_symbol.Name())
            dVolume+=OrderGetDouble(ORDER_VOLUME_CURRENT);
        }

      return dVolume;
     }
El producto pasó entonces los controles con éxito.
 
Alexandr Gavrilin:

Resuelto.

A continuación, el producto se probó con éxito.

:)

 

Por cierto, tenga en cuenta queSYMBOL_VOLUME_LIMIT puede establecerse en "0,0".

Para no quedar atrapado en el cheque:

if(check_volume > SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT))
   return;
 
Vladimir Karputov:

Por cierto, tenga en cuenta en sus cálculos queSYMBOL_VOLUME_LIMIT puede ser "0,0".

Para que no te pille el cheque:

Sobre este mensaje, algo está mal:falló la venta instantánea de3,30 EURUSD a 1,14380 [ Límite devolumen alcanzado].

Tenía una cuenta de compensación y no tenía órdenes limitadas o pendientes. Todos los cheques estaban presentes.

Ahora he comprobadoSYMBOL_VOLUME_LIMIT, independientemente de si hay una orden abierta o no, siempre devuelve 0. Siempre tengo una posición (ya que soy de tipo netting) y este mensaje sólo aparece cuando aumento mi lote y sólo cuando hago auto-loop.

 
Petros Shatakhtsyan:

Sobre este mensaje, algo está mal:falló la venta instantánea de3,30 EURUSD a 1,14380 [ Límite devolumen alcanzado].

Tenía una cuenta de compensación y no tenía órdenes limitadas o pendientes. Todos los cheques estaban presentes.

Ahora he comprobadoSYMBOL_VOLUME_LIMIT, independientemente de si hay una orden abierta o no, siempre devuelve 0. Siempre tengo una posición (ya que soy de tipo neto) y este mensaje aparece sólo cuando aumento mi lote y sólo durante la autovalidación.

Que trabaje en algún servidor no significa que todos los servidores de alrededor tengan la misma configuración :) .

 
Vladimir Karputov:

Si trabaja en un determinado servidor, no significa que todos los servidores de alrededor tengan la misma configuración :) .

Y así lo compruebo en diferentes servidores, unos 5-6, donde hay diferentes tipos de ejecución. En este puesto el tipo de ejecución es Instantánea.

Pero eso no es lo principal. La autovalidación da poca información y dificulta la búsqueda de un error. Y siempre hay una forma de evitarlo.

 
Ayer pasé por la autovalidación en la actualización. En MT5 con medio pique, pero en MT4 se pasó casi toda la tarde con todas las órdenes sin tomar. Ya tuve suficiente, volví al andén después de un par de horas. Me cansé y en un par de horas lo usé sin ningún problema. A veces el problema no está en el Asesor Experto sino en el servicio.
Razón de la queja: