Comprobación automática del mercado - página 6

 
Evgeniy Scherbina:
XAUUSDcheck no hace pruebas. Pero las pruebas tienen éxito porque ponen a prueba todo lo demás....
¿Te has hecho las pruebas después de todo? Lo he probado esta mañana y ese autotest ha desaparecido por completo y el EA ha pasado directamente al moderador para que lo pruebe, obviando el autotest. Como antes.
 
Es bueno saberlo.
Solving Atomatic Validation Problems
Solving Atomatic Validation Problems
  • 2017.01.11
  • Stanislav Korotky
  • www.mql5.com
If you're distributing some products for MetaTrader 4/5 via the Market, you probably know that a special "welcome" stage of automatic product validation has been added recently by MetaQuotes on the...
 
fxsaber:
Es bueno saberlo.
"Si crees que has esperado lo suficiente y el problema sigue ahí, escribe al servicio técnico y espera más ;-)".
 

y como debe ser con

Error de OrderSend 131

de ninguna manera

No hay error en el probador en la prueba automática

He seguido todas las instrucciones y funciona:

Error deOrderSend 131

¡¡¡¡Uffffff!!!!
 

Creo que la autovalidación es lo primero por lo que tiene que pasar un vendedor.

Yo también he tenido mi cuota de errores, y se debieron a la falta de atención.

Pero, la autovalidación es el primer muro frente a los "tíos" que se descargan el código libre de una base de código e intentan venderlo cambiando el nombre. :-(

Desgraciadamente, debido a esto hay miles de programas en el Mercado de los cuales es difícil encontrar un par de ellos que valgan la pena.

Pondría un código especial en codebase para que Market no lo aceptara para la venta. Porque duele :-( aquí te pasas años, incluso 5 años desarrollando, retocando y mejorando los programas para que los clientes estén satisfechos.

Y alguien descargó el producto terminado, le cambió el nombre, lo lanzó al mercado por un precio de dumping, y eso es todo.... Los clientes piensan: "más barato significa que lo compro".....

Como en China,

Me siento en aliexpress - al menos 5 palos para GOPRO ordenó barato - el resultado - una semana en el mar - el palo oxidado.

Eso no es mi mano sube a comprar el palo original de 100 libras, que no se oxida. Pero no, en China ya han dado 120 libras, y han pedido otro palo el mismo ................. Maldito greed......

 
Stefan Stoyanov:

y como debe ser con

Error de OrderSend 131

de ninguna manera

No hay error en el probador en la prueba automática

Hice todas las recomendaciones y sin embargo :

Error deOrderSend 131

¡¡¡¡Uffffff!!!!
Sólo hay que comprobar el valor mínimo y no es nada difícil
 
Evgeniy Scherbina:
Sólo tienes que comprobar el valor mínimo y no es nada difícil.


Tengo una función de cálculo de lotes que hace esto.

           double LotsOptimized()
    { int     lotDigit=(int)fabs(log10(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)));
            if(!MathIsValidNumber(lotDigit)) lotDigit=0;  
{
double FreeMg =AccountFreeMargin();
double Margin =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Minlot =MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot =MarketInfo(Symbol(),MODE_MAXLOT);
double loty =MathFloor(FreeMg*Risk/100/Margin/Step)*Step;
loty = NormalizeDouble(loty,lotDigit);
if(loty<Minlot) loty=Minlot;
if(loty>MaxLot) loty=MaxLot;  
      Lots=loty;
      Lots=NormalizeDouble(Lots,lotDigit);

      return (Lots);}}
  
//================================================================
 

También hay un ejemplo en el mercado


//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Корректное значение объема";
   return(true);
  }
 

Antes de llamar a OrderSend compruebo mediante

si (CheckVolumeValue(Lots,com) ==false )return(0);

A pesar de todo, el error 131 vuelve a aparecer

 
Stefan Stoyanov:


Tengo una función de cálculo mucho hace esto

           double LotsOptimized()
    { int     lotDigit=(int)fabs(log10(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)));
            if(!MathIsValidNumber(lotDigit)) lotDigit=0;  
{
double FreeMg =AccountFreeMargin();
double Margin =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Minlot =MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot =MarketInfo(Symbol(),MODE_MAXLOT);
double loty =MathFloor(FreeMg*Risk/100/Margin/Step)*Step;
loty = NormalizeDouble(loty,lotDigit);
if(loty<Minlot) loty=Minlot;
if(loty>MaxLot) loty=MaxLot;  
      Lots=loty;
      Lots=NormalizeDouble(Lots,lotDigit);

      return (Lots);}}
  
//================================================================

Tu lotDigit es una tontería que siempre calcula 0. No está en el ejemplo de la documentación. Parece que te gusta tener muchos corchetes.

También esto: FreeMg*Risk/100/Margin/Step... ¿De dónde vienen los 100? Obviamente desde el techo.

Son muchas cuerdas. Es realmente mucho, ¿qué estás calculando?