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

 
Arkadii Zagorulko:

Exactamente MT5...

Dicen que el problema es sólo el MT4.

Tal vez sea un sabotaje para cambiar a MT5...

 

Por si le sirve a alguien, aquí está cómo pasé la validación. EA sin stops y modificaciones de órdenes pero en todos los plazos.

El validador dio el error 131 (lote equivocado) y no hubo operaciones. Este es mi primer EA, así que probablemente todos los errores que he cometido.

Primero he añadido todos los comentarios en inglés para comprobar las funciones de comercio, es decir, si el EA no comercia, debería dar error en Print().

También añadí la comprobación del margen libre y eliminé ExpertRemove() pero no ayudó, los errores seguían siendo los mismos.

void buy()
  {
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0)
     {
      if(OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,SLb,0,comment,Magic,0,Green)<1)
         Print(" Buy ​​order error !"+ IntegerToString(_Period,0) +" Error code = " + IntegerToString(GetLastError(),0));
     }
   else
      Print("Not enough money!" +" Error code = " + IntegerToString(GetLastError(),0));
      /// ExpertRemove();
   return;   
  }

Hice varios cambios más a la vez, y no sé cuál de ellos ayudó.

He reiniciado los errores al principio y al final del Asesor Experto, he comprobado las cotizaciones de todos los TFs

int OnInit()
  {
    ResetLastError();   

      for(int cycle=1; cycle<=5; cycle++)
     {
      switch(cycle)
        {
         case 1:
            TF = PERIOD_D1;
            break;
         case 2:
            TF = PERIOD_H4;
            break;
         case 3:
            TF = PERIOD_H1;
            break;
         case 4:
            TF = PERIOD_M15;
            break;
         case 5:
            TF = PERIOD_M5;
            break;
        }
   if(iTime(_Symbol,TF,Limit)<1)
     Print("Missing quotes! " + IntegerToString(TF,0) + " Timeframe"+" Error = " + IntegerToString(GetLastError(),0));            
     }      
   return(INIT_SUCCEEDED);
  }
//****************************
void OnDeinit(const int reason)
  {  
   Alert("Error = "+ IntegerToString(GetLastError(),0));
   ResetLastError();
  }

y el cálculo del lote se recalcula para todos los casos, si el paso es (0,1), (0,01) e incluso (0,001)

double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);

   Lots = NormalizeDouble(AccountEquity()/10000*Lot_for_10K,3);
   if(lotstep>0.001)
   Lots = (MathRound(Lots/lotstep))*lotstep;    
   Lots = MathMax(Lots,MarketInfo(Symbol(),MODE_MINLOT));
   Lots = MathMin(Lots,MarketInfo(Symbol(),MODE_MAXLOT));

como resultado puedo decir que conseguí arreglar todo rápidamente, sólo 2 días y unos 10 intentos

 
Voy a describir mis experimentos con "no hay operaciones comerciales":

1. Después de recompilar el viejo EA desde Market e intentar subirlo al sitio, apareció el error "no hay operaciones de trading":
test on EURUSD,H1
there are no trading operations
test on NZDUSD,H1
there are no trading operations
test on GBPUSDcheck,M30
there are no trading operations
test on XAUUSDcheck,Daily
there are no trading operations
2. La comprobación de la disponibilidad de las cotizaciones para todos los TF no mostró ningún error (utilicé la división por 0).
3. Entonces empecé a comprobar el volumen de las operaciones comerciales, pero al mismo tiempo recibí el error "no hay operaciones comerciales".
4. Luego cambió el número de lotes en todos los OrderSend a SYMBOL_VOLUME_MIN - "no hay operaciones de comercio"
5. Está claro que algo falla en el comprobador del validador. Y trató de añadir la apertura de la posición en OnInit():
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
int ticket1=OpenPosition(NULL,OP_SELL,min_volume,0,0,magic);

y esto es lo que he obtenido (por cierto, es la primera vez que lo veo tan detallado en el validador):

 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134


El error "no hay operaciones comerciales" ya está claro aquí. Si tenemos un saldo de 1,00, obviamente no podemos abrir una orden con 0,20 (SYMBOL_VOLUME_MIN). Y la comprobación del saldo en el código cumple su propósito y no permite realizar dicha orden y muestra una impresión en el diario sobre el saldo insuficiente (sólo que no se muestra en el validador).

¿Cómo crees que el validador está bien?


Esperaremos a que se arregle el validador.

 
La margarina gratis no me molesta, porque estoy harto de Honduras.
 
Алексей Тарабанов #:
El margen libre no me molesta, estoy harto de Honduras.

¿Difícil? Me refiero a la expresión.

 
Sí, me refiero a los parámetros de prueba
 
Limpia tu memoria de todo tipo.
 

He encontrado el problema, por defecto tengo un límite en el lote máximo de posiciones en los parámetros de entrada.

input double MaxLots=0.1;
...
lots = MathMin(lots, MaxLots);

Por eso no permite abrir posiciones si SYMBOL_VOLUME_MIN en el validador es 0,20. No se puede establecer un límite tan pequeño en el lote máximo de posiciones por defecto para el validador.