Verificação automática no mercado - página 6

 
Evgeniy Scherbina:
O XAUUSDcheck não testa. Mas os testes são bem sucedidos porque testa tudo o resto....
Afinal de contas, você já fez testes? Eu tentei esta manhã e aquele autoteste desapareceu completamente e a EA foi diretamente ao moderador para testes, contornando o autoteste. Como era antes.
 
É bom saber.
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:
É bom saber.
"Se você acha que esperou o suficiente e o problema ainda está lá, escreva para o balcão de serviço, e espere mais ;-)".
 

e como deve ser com

PedidoEnviar erro 131

de jeito nenhum

Não há erro no testador no teste automático

Eu segui todas as instruções e está funcionando:

PedidoEnviar erro 131

Uffffffff!!!!
 

Eu acho que a autovalidação é a primeira coisa que um vendedor tem que passar.

Também eu tive minha cota de erros, e eles foram devidos à falta de atenção.

Mas, a autovalidação é a primeira parede na frente dos "caras" que baixam o código gratuito de uma base de código e tentam vendê-lo mudando o nome. :-(

Infelizmente, por causa disso, existem milhares de programas no mercado dos quais é difícil encontrar um par de programas dignos.

Eu colocaria um código especial na base de código para que o Mercado não o aceitasse para venda. Porque dói :-( aqui você passa anos, mesmo 5 anos desenvolvendo, ajustando e melhorando programas para deixar os clientes satisfeitos.

E alguém baixou o produto acabado mudou o nome - jogou-o no mercado a um preço de dumping, e é isso.... Os clientes pensam: "mais barato significa que eu o compro".....

Como na China,

Sento-me em aliexpress - pelo menos 5 paus para o GOPRO encomendado barato - o resultado - uma semana no mar - o pau enferrujado.

Essa não é a minha mão que sobe para comprar o bastão original por 100 libras, que não enferruja. Mas não, na China já deram 120 libras, e pediram outro pau o mesmo ................. Maldita ganância......

 
Stefan Stoyanov:

e como deve ser com

PedidoEnviar erro 131

de jeito nenhum

Não há erro no testador no teste automático

Eu fiz todas as recomendações e ainda :

PedidoEnviar erro 131

Uffffffff!!!!
Você só precisa verificar o valor mínimo e não é nada difícil
 
Evgeniy Scherbina:
Você só precisa verificar o valor mínimo e não é nada difícil.


Tenho muitas funções de cálculo que fazem isso.

           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);}}
  
//================================================================
 

Há também um exemplo no 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 ligar para OrderSend I verifique via

se (CheckVolumeValue(Lots,com) ==falso)retorno(0);

Apesar de tudo, o erro 131 aparece novamente

 
Stefan Stoyanov:


Eu tenho uma função de cálculo muito grande, ela faz isso

           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);}}
  
//================================================================

Seu LotDigit é um tolo complicado que sempre calcula 0. Não está no exemplo da documentação. Aparentemente, você gosta de muitos parênteses?

Também isto: FreeMg*Risk/100/Margin/Step... De onde veio o 100? Obviamente do teto.

Isso é um monte de fios. É realmente muito, o que você está calculando?