Controllo automatico del mercato - pagina 6

 
Evgeniy Scherbina:
XAUUSDcheck non fa il test. Ma i test hanno successo perché testano tutto il resto....
Hai fatto dei test alla fine? Ho provato questa mattina e l'autotest è scomparso del tutto e l'EA è andato direttamente al moderatore per il test, bypassando l'autotest. Come era prima.
 
Buono a sapersi.
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:
Buono a sapersi.
"Se pensi di aver aspettato abbastanza e il problema è ancora lì, scrivi al service desk, e aspetta ancora ;-)".
 

e come dovrebbe essere con

Errore OrderSend 131

nessun modo

Non c'è nessun errore nel tester sul test automatico

Ho seguito tutte le istruzioni e ha funzionato:

ErroreOrderSend 131

Uffffffff!!!!
 

Credo che l'autovalidazione sia la prima cosa che un venditore deve fare.

Anch'io ho avuto la mia parte di errori, ed erano dovuti alla disattenzione.

Ma, l'autovalidazione è il primo muro di fronte a "tizi" che scaricano codice gratuito da un codebase e cercano di venderlo cambiando il nome. :-(

Purtroppo a causa di questo ci sono migliaia di programmi nel mercato da cui è difficile trovare un paio di programmi degni.

Metterei un codice speciale in codebase in modo che Market non lo accetti per la vendita. Perché fa male :-( qui si passano anni, anche 5 anni a sviluppare, modificare e migliorare i programmi per rendere i clienti soddisfatti.

E qualcuno ha scaricato il prodotto finito ha cambiato il nome - l'ha scaricato sul mercato per un prezzo di dumping, e questo è tutto.... I clienti pensano: "più economico significa che lo compro".....

Come in Cina,

Mi siedo su aliexpress - almeno 5 bastoni per GOPRO ordinato a buon mercato - il risultato - una settimana in mare - il bastone arrugginito.

Questo non è la mia mano sale a comprare il bastone originale per 100 sterline, che non arrugginisce. Ma no, in Cina hanno già dato 120 sterline, e ordinato un altro bastone lo stesso ................. Fottuto greed......

 
Stefan Stoyanov:

e come dovrebbe essere con

Errore OrderSend 131

nessun modo

Non c'è nessun errore nel tester sul test automatico

Ho fatto tutte le raccomandazioni e ancora :

ErroreOrderSend 131

Uffffffff!!!!
Devi solo controllare il valore minimo e non è affatto difficile
 
Evgeniy Scherbina:
Dovete solo controllare il valore minimo e non è affatto difficile.


Ho una funzione di calcolo del lotto che fa questo.

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

C'è anche un esempio sul mercato


//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
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);
  }
 

Prima di chiamare OrderSend controllo tramite

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

Nonostante tutto, l'errore 131 si ripresenta

 
Stefan Stoyanov:


Ho una funzione di calcolo molto che fa questo

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

Il vostro lotDigit è un ingannevole idiota che calcola sempre 0. Non è nell'esempio della documentazione. A quanto pare ti piacciono molte parentesi?

Anche questo: FreeMg*Risk/100/Margin/Step... Da dove vengono 100? Ovviamente dal soffitto.

Sono un sacco di corde. È davvero molto, cosa stai calcolando?