Errores, fallos, preguntas - página 2603

 
Cuando se cambian los nombres de los símbolos en el broker (se añaden sufijos) se pierden todas las configuraciones de los gráficos con los antiguos símbolos (que ya no existen y deben ser transferidos a los nuevos nombres). Irremediablemente, junto con los indicadores expertos. Mentira.
 

En el 2204, el perfil con EAs se carga sin ellos.

Tampoco se ha solucionado la lentitud en la carga de los EA. Cierto, ahora el terminal no se cuelga, solo que el EA se va por mucho tiempo.

 
Necesito ayuda aquí. Necesito la combinación de teclas CTRL+C y CTRL+V en la ventana inactiva del Probador en la pestaña Opciones. Sólo he encontrado lo siguiente

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Me pueden decir como iniciar el script programáticamente cuando los terminales cambian de TF o abren

Egor, 2008.11.16 09:28

La secuencia de comandos puede ejecutarse actualizando adicionalmente la "tabla de estados de entrada del teclado" en el hilo requerido.

Tengo que probarlo en MQL, tal vez pueda ayudarme:

    if ( h != NULL)
    {
        HWND child = :: FindWindowEx( h,NULL,"Edit", NULL);

        UINT lparam_Ctrl1 = :: MapVirtualKey( VK_CONTROL, 0) << 16 | 1 ;
        UINT lparam_A1 = :: MapVirtualKey((int)'A', 0) << 16 | 1 ;

        UINT lparam_A2 = 1 << 31 | 1 << 30 | :: MapVirtualKey((int)'A', 0) << 16 | 1 ;
        UINT lparam_Ctrl2 = 1 << 31 | 1 << 30 | :: MapVirtualKey( VK_CONTROL, 0) << 16 | 1 ;

        DWORD pid;
        DWORD tid = GetWindowThreadProcessId( child, & pid);
        HANDLE hProc = OpenProcess( PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid);
        //Ctrl + A

        AttachThreadInput( GetCurrentThreadId(), tid, TRUE);

        LRESULT pl1_Ctrl = :: PostMessage( child, WM_KEYDOWN, VK_CONTROL, lparam_Ctrl1 );
        WaitForInputIdle( hProc, INFINITE);

        BYTE state[256];
        GetKeyboardState( state);
        state[ VK_CONTROL] = 0x80;
        SetKeyboardState( state);

        LRESULT pl1_A = :: PostMessage( child, WM_KEYDOWN, (int)'A', lparam_A1 );
        WaitForInputIdle( hProc, INFINITE);

        LRESULT pl2_A = :: PostMessage( child, WM_KEYUP, (int)'A', lparam_A2);
        WaitForInputIdle( hProc, INFINITE);

        LRESULT pl2_Ctrl = :: PostMessage( child, WM_KEYUP, VK_CONTROL, lparam_Ctrl2);        
        WaitForInputIdle( hProc, INFINITE);
/*
        GetKeyboardState(state);
        state[VK_CONTROL] = 0x0;
        SetKeyboardState(state);
*/

        AttachThreadInput( GetCurrentThreadId(), tid, FALSE);

    }

No he podido ponerlo en práctica. Realmente lo necesito para una prueba múltiple.

 
fxsaber:
Por favor, ayuda. Necesito enviar combinaciones de teclas CTRL+C y CTRL+V en la ventana inactiva del Probador en la pestaña Configuración. Sólo he encontrado lo siguiente

No ha sido posible aplicarlo. Se necesita con urgencia para un multitester.

No se puede enviar un comando de copiar y pegar a una ventana inactiva. En primer lugar, abra la ventana del comprobador y active la pestaña de ajustes
 

Hay algo que no funciona en las puntas. Archivo EA:

Alt+G envía aquí:


Editor 2200

 
Slava:
Es imposible enviar un comando de copiar y pegar a una ventana inactiva. En primer lugar, debe abrir la ventana del comprobador y activar la pestaña de ajustes

Todas las acciones para automatizar el probador se pueden hacer a través de PostMessage, lo que es una gran comodidad. Como el probador se puede minimizar, etc.

Pero la obtención e importación de configuraciones es una excepción a esta comodidad. ¿Es posible organizar algún mecanismo que ayude a automatizar el trabajo con los ajustes de su parte?

 

¿Me puede decir de qué manera detener el probador o el optimizador de código?

Por ejemplo, el probador debe cargar un archivo externo. Si no se encuentra el archivo, muestra un mensaje de que se han olvidado del archivo y hace que el probador o el optimizador dejen de funcionar sin más.

 
Igor Makanu: MT4 construir 1220 fue muy probablemente la última actualización de MT4, que antes de los administradores escribió que ME para los terminales 4/5 son los mismos, lo que significa que no habrá más nuevos 32 bits ME

Y si se encuentran nuevos fallos, ¿se quedarán así?

 
. ... Rick D. ... .:

Y si se encuentran nuevos fallos, ¿se quedarán así?

Arreglar errores y desarrollar son cosas diferentes.
 
. ... Rick D. ... .:

¿Algún consejo sobre cómo detener el probador o el optimizador del código?

Por ejemplo, el Asesor Experto necesita descargar un archivo externo. Si no se encuentra el archivo, el probador o el optimizador serán informados de que se han olvidado del archivo y dejarán de funcionar en vacío.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2019.11.06 16:57

A veces, en la optimización genética, los primeros miles de pases son suficientes para entender más o menos el resultado.

Cuando se ejecutan automáticamente muchas optimizaciones, se quiere que todo funcione más rápido. Por eso necesitaremos un mecanismo para interrumpir la optimización.

#include <fxsaber\MultiTester\MTTester.mqh>  // https://www.mql5.com/ru/code/26132

// Выключает Оптимизацию ( и одиночный проход)
bool OptimizationStop( void )
{
  return(!MTTESTER::IsReady() && MTTESTER::ClickStart(false));
}


Aplicación.

// Демонстрация прерывания Оптимизации.

sinput int inAmountPasses = 20; // Через сколько проходов закончить
input int Range = 0; // 0..10000

double OnTester()
{
  int Data[];
  
  return(FrameAdd(NULL, 0, 0, Data)); // Сгенерировали TesterPass
}

void OnTesterPass()
{
  static int Amount = 0;
  
  ulong Pass;
  string Name;
  long ID;
  double Value;
  int Data[];

  while (FrameNext(Pass, Name, ID, Value, Data))
    if (++Amount > inAmountPasses)
    {
      OptimizationStop(); // Как достигли нужного количества проходов, выключили оптимизатор.
      
      break;
    }
}