Código Morse - página 5

 
Versión del código Morse "1.004": Se ha corregido un error - el patrón se leía al revés.
Archivos adjuntos:
Morse_code.mq5  15 kb
 
Vasiliy Sokolov:

Pregunta: ¿Cuál es la probabilidad de que aparezca en el mercado una combinación que coincida con los 64 dígitos requeridos? Respuesta: (1/2^64)*Cuento de barras. Es decir, con una probabilidad cercana al 100% no se encontrará dicha combinación. Es obvio que un solo número int o long no puede describir completamente el patrón, por lo que necesitamos un parámetro adicional que especifique la longitud del patrón.

Esto es si miramos los 64 bits. Pero es obviamente innecesario.

Cuando realicé estas investigaciones, descubrí que no es razonable tomar la longitud de un patrón de velas más de 5. Además, si distinguimos entre las barras no sólo por los "osos" sino también por sus tamaños, incluso esta longitud es demasiado larga.

Si tenemos un patrón con una gran longitud, es mucho más razonable especificar los "rasgos característicos" y limitar simplemente la longitud mediante valores mínimos y máximos.

 

Todavía no está formado exactamente, pero la idea general es: dos parámetros - longitud y parámetro int de 0 a 3. Dentro del Asesor Experto ya se interpreta este número (representación Pseudobit):

intLongitud (también conocida como máscara)Representación de pseudobits
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Queda por decidir cómo codificar estos parámetros. Una solución sencilla: una estructura en la que cada parámetro int (la primera columna de la tabla) corresponde a una representación Pseudobit (la tercera columna). Si se limita la máscara a sólo cinco caracteres (xxxxxx), la estructura no es muy grande.

Y lo más importante: ¡el optimizador permite reorganizar la estructura!

 

También puede hacer tres parámetros separados para las tres velas en la ventana de propiedades. Se matan dos pájaros a la vez: está claro y optimizado.

Lo mismo puede hacerse con 10 velas.

 
Dmitry Fedoseev:

También puede hacer tres parámetros separados para las tres velas en la ventana de propiedades. Se matan dos pájaros a la vez: está claro y optimizado.

Lo mismo puede hacerse con 10 velas.

Apoyo

input bool svecha1 = true;
input bool svecha2 = false;
input bool svecha3 = true;
input bool svecha4 = false;
input bool svecha5 = true;
 
Vladimir Karputov:

Todavía no está formado exactamente, pero la idea general es: dos parámetros - longitud y parámetro int de 0 a 3. Dentro del Asesor Experto ya se interpreta este número (representación Pseudobit):

intLongitud (también conocida como máscara)Representación de pseudobits
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Queda por decidir cómo codificar estos parámetros. Una solución sencilla: una estructura en la que cada parámetro int (la primera columna de la tabla) corresponde a una representación Pseudobit (la tercera columna). Si la máscara se limita a sólo cinco caracteres (xxxxxx), la estructura no es muy grande.

Y lo más importante: ¡el optimizador permite reorganizar la estructura!


Esta es la enumeración para la máscara de x a xxxx:

//+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_MASK
  {
   _0=B'0',       // 
   _1=B'1',       //  
   _2=B'00',      // 
   _3=B'01',      // 
   _4=B'10',      // 
   _5=B'11',      // 
   _6=B'000',     // 
   _7=B'001',     // 
   _8=B'010',     // 
   _9=B'011',     // 
   _10=B'100',    // 
   _11=B'101',    // 
   _12=B'110',    // 
   _13=B'111',    // 
  };
 

Versión del código Morse "1.005"

Esta es la solución: la máscara se define como una enumeración

//+------------------------------------------------------------------+
//| Enum pattern mask                                                |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_MASK
  {
   _0    =   0    ,   // 0
   _1    =   1    ,   // 1

   _2    =   2    ,   // 00
   _3    =   3    ,   // 01
   _4    =   4    ,   // 10
   _5    =   5    ,   // 11

   _6    =   6    ,   // 000
   _7    =   7    ,   // 001
   _8    =   8    ,   // 010
   _9    =   9    ,   // 011
   _10   =   10   ,   // 100
   _11   =   11   ,   // 101
   _12   =   12   ,   // 110
   _13   =   13   ,   // 111

   _14   =   14   ,   // 0000
   _15   =   15   ,   // 0001
   _16   =   16   ,   // 0010
   _17   =   17   ,   // 0011
   _18   =   18   ,   // 0100
   _19   =   19   ,   // 0101
   _20   =   20   ,   // 0110
   _21   =   21   ,   // 0111
   _22   =   22   ,   // 1000
   _23   =   23   ,   // 1001
   _24   =   24   ,   // 1010
...

en OnInit(), la máscara se traduce en una variable de cadena"sExtMorseCode" (la variable"sExtMorseCode" se declara globalmente) en la función ConvertNumberToString:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ConvertNumberToString(const ENUM_PATTERN_MASK num_mask,string &text)
  {
   bool result=true;
//---
   switch(num_mask)
     {
      case 0:  text="0"; break;
      case 1:  text="1"; break;
      case 2:  text="00"; break;
      case 3:  text="01"; break;
      case 4:  text="10"; break;
      case 5:  text="11"; break;
      case 6:  text="000"; break;
      case 7:  text="001"; break;
      case 8:  text="010"; break;
      case 9:  text="011"; break;
      case 10: text="100"; break;
...
      case 53: text="10111"; break;
      case 54: text="11000"; break;
      case 55: text="11001"; break;
      case 56: text="11010"; break;
      case 57: text="11011"; break;
      case 58: text="11100"; break;
      case 59: text="11101"; break;
      case 60: text="11110"; break;
      case 61: text="11111"; break;
      default: text=""; return(false);
     }
//---
   return(result);
  }

Se han resuelto dos problemas:

1). el usuario ve el patrón como "0101" en los parámetros de entrada:

Vista conveniente del parámetro de entrada

2). El parámetro de entrada está perfectamente optimizado en el probador.

Archivos adjuntos:
Morse_code.mq5  20 kb
 
Vladimir Karputov:

Versión del código Morse "1.005"

Se han resuelto dos problemas:

1). el usuario ve el patrón como "0101" en los parámetros de entrada:

2). El parámetro de entrada está perfectamente optimizado en el probador.

El usuario puede especificar una combinación de velas sin cálculos matemáticos según la idea inicial?

 
Pyxis:

El usuario puede especificar una combinación de velas sin cálculos matemáticos, como se concibió originalmente?


Sí, puede hacerlo sin cálculos matemáticos. Y ahora no es necesario introducir la combinación manualmente: basta con seleccionar la combinación de velas adecuada en la lista desplegable"máscara de patrón".
 
Corrió en el probador (optimización completa) laversión de código Morse "1.005"- los patrones puros (como ahora) no son nada sospechosos :(.
Razón de la queja: