Errores, fallos, preguntas - página 343

 
Kairoser:

¡Buenas tardes!

Después de actualizar a la versión 420 empecé a probar mi EA y noté que empezó a "perder" por alguna razón. Analicé mis operaciones y me di cuenta de que el stop loss se activa a precios inexistentes. Por ejemplo, puse el stop loss en 1.06520 en EURUSD, pero funciona, aunque el precio máximo es 1.05920. Cuando miro más allá, veo muchas ofertas de este tipo. El Take Profit se activa por el mismo principio (a precios no existentes) - la delta es la misma - 600 puntos. En el probador del gráfico las flechas de subida y bajada "cuelgan" en el aire, lejos de las barras.

Se adjunta una captura de pantalla.

Haz pruebas con MetaQuotes-Demo, por favor. Alpari tiene un historial gráfico descaradamente erróneo (en los spreads).
 
Renat:
Haz pruebas con MetaQuotes-Demo, por favor. Alpari tiene un historial gráfico descaradamente erróneo (en los spreads).
Sí, efectivamente, todo funciona bien en el servidor MetaQuotes-Demo. Gracias por la ayuda.
 

Hay un par de preguntas de interés.

1. Si se utilizan indicadores en el comprobador de estrategias, ¿cómo funciona el sistema? ¿Primero, todos los indicadores para los que se calculan las asas y sólo entonces se lanza OnTick?

2. Si es así, sería bueno iniciar primero OnTick y luego ejecutar un comando para calcular los indicadores adjuntos. Así, por ejemplo, no necesito calcular los indicadores en cada tic de cinco dígitos, sino sólo en los de cuatro. Cuando inicio OnTick, compruebo el precio actual y el anterior y decido si inicio el cálculo de los indicadores o no.

Porque si hay muchos y son bastante "pesados", consumen recursos en modo de optimización...

Aunque, puede intentar crear manejadores en ontick y borrar los indicadores al final y en el siguiente inicio de ontick (si es necesario) crear manejadores de nuevo - y no está claro si mejorará el rendimiento...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish:

Hay un par de preguntas de interés.

1. Si se utilizan indicadores en el comprobador de estrategias, ¿cómo funciona el sistema? ¿Primero se calculan todos los indicadores para los que se calculan las asas y sólo entonces se ejecuta OnTick?

Sí. La respuesta más general - todos los valores de los indicadores se calculan antes de cada llamada del manejador de eventos:

  • OnTick
  • OnTimer
  • OnChartEvent y así sucesivamente
 
olyakish:
2. Si es así, sería muy útil ejecutar primero OnTick y luego ejecutar el cálculo de los indicadores adjuntos con este comando. Por ejemplo, no necesito calcular los indicadores en cada tic de cinco dígitos, sino sólo en los de cuatro. Cuando inicio OnTick compruebo el precio actual y el anterior y decido si inicio el cálculo de los indicadores o no.

Porque si hay muchos y son bastante "pesados", se comen los recursos en el modo de optimización...

No puedes hacer eso. Puede utilizar modos de generación de ticks más rápidos para las pruebas:

  1. Precios OHLC en barras de minutos
  2. Sólo los precios abiertos del período que se está comprobando
 
Rosh:

No puedes hacerlo así. Puede utilizar modos de generación de ticks más rápidos para las pruebas:

  1. Precios OHLC en barras de minutos
  2. Sólo los precios de apertura del periodo examinado
Conozco esos modos y sus peculiaridades. Sólo quería acelerar la optimización de una manera razonable (probablemente óptima).
 

Ayuda, las funciones de conversión de datos no quieren funcionar, escribí un simple script para probarlo. Compilación 420, sistema operativo de 64 bits.

void OnStart()
  {
//---
   int i=0;
   bool res=false;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double   buf2;
   double   buf3;
   double   buf4;
   double   buf5;
   
   int filehandle=FileOpen("56451.csv",FILE_READ|FILE_CSV|FILE_ANSI,',',CP_UTF8);

   if(filehandle==INVALID_HANDLE)Print("Ошибка № - ",GetLastError());
   else
     {

      while(!res)
        {
         stroka1 = FileReadString(filehandle);
         stroka2 = FileReadString(filehandle);
         stroka3 = FileReadString(filehandle);
         stroka4 = FileReadString(filehandle);
         stroka5 = FileReadString(filehandle);

         buf1 = StringToTime(stroka1);
         buf2 = StringToDouble(stroka2);
         buf3 = StringToDouble(stroka3);
         buf4 = StringToDouble(stroka4);
         buf5 = StringToDouble(stroka5);

         res=FileIsEnding(filehandle);
         i++;
        }
      FileClose(filehandle);
     }
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
56451.zip  16 kb
 
sergey1294:

Ayuda, las funciones de conversión de datos no quieren funcionar, escribí un simple script para probarlo. Compilación 420, sistema operativo de 64 bits.


Deshazte de las comillas en cualquier etapa....
 
AlexSTAL:
Eliminar las comillas en cualquier etapa....
¿Cómo se hace eso?
 
sergey1294:
¿Cómo se hace esto?

Asegúrese de que no están inicialmente en el archivo, o aplique una función adicional al leer, por ejemplo:

string StringWithoutQuotes(string Value)
{
   StringTrimLeft(Value);
   StringTrimRight(Value);
   return(StringSubstr(Value, 1, StringLen(Value) - 2));
}

..........

         stroka1 = StringWithoutQuotes(FileReadString(filehandle));
         stroka2 = StringWithoutQuotes(FileReadString(filehandle));