El error es que no hay operaciones comerciales - página 6

 

Este problema es aún más interesante. Construí un simple EA basado en el código del post anterior. También abre 5 operaciones, cada una de ellas en el mercado durante 5 minutos, y luego las cierra. Aquí está el código:

#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static int test_ticket[2]={0,0};
   if(test_ticket[1]<5 && test_ticket[0]==0) {
      test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"test",33333,0,clrNONE);
      if(test_ticket[0]>0) test_ticket[1]++;
   }   
   if(OrderSelect(test_ticket[0],SELECT_BY_TICKET))
      if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent())
         if(OrderClose(test_ticket[0],OrderLots(),NormalizeDouble(Bid,_Digits),30,clrNONE)) {
            printf("Test order closed, ticket #%d",test_ticket[0]);
            test_ticket[0]=0;
         }   
   
  }
//+------------------------------------------------------------------+

Pasó la validación en el primer intento, pero no hay operaciones en NZDUSD. ¿Por qué?


Incluso si el validador establece un depósito insuficiente para la apertura con un lote mínimo, aparecerá el error 134 como en el mensaje anterior. ¡Pero es que no hay intercambios! ¿Por qué?

¿Quizá el validador funciona mal o hay una explicación razonable?

 
Renat Akhtyamov:

y se pone la respuesta completa del validador aquí primero

¿Y qué te hace pensar que el validador asigna las entradas según el principio que tú has ideado?

para abrir 5 operaciones, hay que contar el número de operaciones abiertas, no molestarse con las entradas

Renat, eso es lo que creo que son las transacciones, fíjate bien. Incluso puedes ejecutar mi código en el probador. Hay una matriz de dos valores: test_ticket[0] - almacena el orden de los tickets, test_ticket[1] - número de intentos.

Cambiando el número de intentos en la primera condición se pueden abrir diferentes números de tratos

if(test_ticket[1]<5 && test_ticket[0]==0) {
 

Esta es la historia de los siguientes intentos con diferentes números de pedidos


Y aquí, en uno de los siguientes intentos, el validador utiliza realmente el lote mínimo, que a sabiendas no puede abrir con un depósito de 1 dólar. La pregunta es, ¿por qué no hubo intercambios en los intentos anteriores? ¿Y por qué esta ejecución utiliza un lote mínimo y un depósito erróneos a sabiendas que inician un error de validación?

Vladimir Karputov:

...

Con todo, el validador ha cumplido hasta ahora con su tarea principal: filtrar el código incompleto del mercado.

Mmm...

Y no es un tiro al azar. Aquí están los tres siguientes intentos.


 

El error en el registro "No hay dinero para abrir tal o cual transacción..." indica que usted envió una orden de comercio, pero no comprobó nada (o no todo) por completo antes. El artículo proporciona un algoritmo claro para la comprobación.


Recuerda: el error "no hay dinero para abrir tal o cual operación..." - es el 99% del error en la lógica del Asesor Experto. Faltan controles (o la ausencia total de ellos). Esto es un signo de comprensión insuficiente de los principios de codificación.


Recuerde: en el mundo real, el depósito puede ser de 1 dólar, y el apalancamiento no siempre es de 1:100, y el lote mínimo puede ser de 0,01 y de 0,02 y de 0,30 y de 1,0, y un montón de cosas más...

 
Vladimir Karputov:

El error en el registro "No hay dinero para abrir tal o cual transacción..." indica que usted envió una orden de comercio, pero no comprobó nada (o no todo) por completo antes. El artículo proporciona un algoritmo claro para la comprobación.


Recuerda: el error "no hay dinero para abrir tal o cual operación..." - es el 99% del error en la lógica del Asesor Experto. Faltan controles (o la ausencia total de ellos). Esto es un signo de comprensión insuficiente de los principios de codificación.


Recuerde: en el mundo real, el depósito puede ser de 1 dólar, y el apalancamiento no siempre es de 1:100, y el lote mínimo puede ser de 0,01 y de 0,02 y de 0,30 y de 1,0, y un montón de cosas más...

Vladimir, te has perdido el elefante. El principal error fue.

Puedo responder en su idioma y darle una conferencia.

 
Vladimir Karputov:

El error en el registro "No hay dinero para abrir tal o cual transacción..." indica que usted envió una orden de comercio, pero no comprobó nada (o no todo) por completo antes. El artículo proporciona un algoritmo claro para la comprobación.


Recuerde: el error "no hay dinero para abrir tal o cual negocio...". - es el 99% del error en la lógica del Asesor Experto. Faltan controles (o la ausencia total de ellos). Esto es un signo de comprensión insuficiente de los principios de codificación.


Recuerde: en el mundo real, el depósito puede ser de 1 dólar, y el apalancamiento no siempre es de 1:100, y el lote mínimo puede ser de 0,01 y de 0,02 y de 0,30 y de 1,0, y un montón de cosas más...

Vladimir, no entiendo si lees los posts en general o sólo eliges las fotos interesantes. Vuelve a leer todo con atención o un par de veces desde el principio de la página, por lo menos. ¡Y lee el código! No quiero ni molestarme en explicártelo todo.

 
Andrey Kaunov:

¡No quiero ni molestarme en explicártelo todo!

Andrew, nadie quiere repetir lo que ya se ha escrito y masticado.

 
Sí, pero el problema es evidente. Tal vez alguien de esta fuerte web intente analizarlo y comprobar el validador. El simple código transparente sin parámetros no realiza el trato en NZDUSD y GBPUSD comprobar a veces. Y si añadimos algunas condiciones y no hay operaciones en el oro también, entonces de nuevo recibiremos un error deno operaciones de comercio y la comprobación perdida.
 
Andrey Kaunov:
Sí, pero el problema está ahí. Tal vez alguien de este fuerte sitio trate de entenderlo igual y compruebe el validador. El simple código transparente sin parámetros no funciona en absoluto para NZDUSD y GBPUSD Check a veces. Y si añadimos algunas condiciones y no hay operaciones en el oro también, entonces de nuevo recibiremos un error deno operaciones de comercio y la comprobación perdida.

No confíe en que el validador devuelva un código de error de la lista de errores del servidor comercial. Registre siempre usted mismo el mensaje de error. Lea cuidadosamente lo que está escrito en el artículo que usted sabe acerca de la imposibilidad de ejecutar la orden y lo que tiene que hacer en este caso.

Es muy posible que la ausencia de un mensaje de error en el registro, por ejemplo el cálculo del tamaño del lote, sea la causa de los errores de validación.

 
Andrey Kaunov:

Esta es la historia de los siguientes intentos con diferentes números de pedidos


Y aquí, en uno de los siguientes intentos, el validador utiliza realmente el lote mínimo, que a sabiendas no puede abrir con un depósito de 1 dólar. La pregunta es, ¿por qué no hubo intercambios en los intentos anteriores? ¿Y por qué esta ejecución utiliza un lote mínimo y un depósito erróneos a sabiendas que inician un error de validación?

Hmmm...

Y no es un tiro al azar. Aquí están los tres siguientes intentos.


Error al enviar una orden comercial 134 ...

¿El probador escribió este error? Si es así, también es una de las causas de los errores de validación. Debe calcular usted mismo la posibilidad de abrir una posición y, si esto es imposible, escribir su propio mensaje sobre la incapacidad de operar con los parámetros establecidos en el diario, en lugar de enviar una orden a sabiendas de que es incorrecta al servidor confiando en que el terminal y el servidor lo hagan todo por usted. Con tales órdenes incorrectas, puedes inundar el servidor y luego ser prohibido con seguridad en el comercio automático. Esto es culpa tuya, no del validador.