Le code morse - page 5

 
Morse version "1.004" : Correction d'un bug - le motif était lu à l'envers.
Dossiers :
Morse_code.mq5  15 kb
 
Vasiliy Sokolov:

Question : Quelle est la probabilité d'apparition sur le marché d'une combinaison correspondant aux 64 chiffres requis ? Réponse : (1/2^64)*BarsCount. C'est-à-dire qu'avec une probabilité proche de 100%, une telle combinaison ne sera pas trouvée. Il est donc évident que seul le nombre int ou long ne peut pas décrire complètement le motif, nous avons donc besoin d'un paramètre supplémentaire spécifiant la longueur du motif.

Et ce, si l'on considère l'ensemble des 64 bits. Mais c'est manifestement inutile.

Lorsque j'ai effectué de telles recherches, j'ai découvert qu'il n'est pas raisonnable de prendre la longueur d'une figure de chandelier supérieure à 5. De plus, si l'on distingue les barreaux non seulement par les "bull-bear" mais aussi par leurs tailles, même cette longueur est trop importante.

Si nous avons un motif de grande longueur, il est beaucoup plus raisonnable de spécifier des "éléments caractéristiques" et de limiter simplement la longueur par des valeurs minimales et maximales.

 

Pas encore exactement formé, mais l'idée générale est : deux paramètres - longueur et paramètre int de 0 à 3. L'Expert Advisor interprète déjà ce nombre à l'intérieur (représentation Pseudobit) :

intLongueur (alias masque)Représentation pseudobit
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Il reste à décider comment coder ces paramètres. Une solution simple : une structure dans laquelle chaque paramètre int (la première colonne du tableau) correspond à une représentation Pseudobit (la troisième colonne). Si le masque est limité à cinq caractères (xxxxxx), la structure n'est pas très grande.

Et le plus important : l'optimiseur vous permet de réorganiser la structure !

 

Vous pouvez également définir trois paramètres distincts pour les trois bougies dans la fenêtre des propriétés. Deux oiseaux sont tués d'un coup - c'est à la fois clair et optimisé.

On peut faire de même pour 10 chandeliers.

 
Dmitry Fedoseev:

Vous pouvez également définir trois paramètres distincts pour les trois bougies dans la fenêtre des propriétés. Deux oiseaux sont tués d'un coup - c'est à la fois clair et optimisé.

On peut faire de même pour 10 chandeliers.

Je soutiens

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

Pas encore exactement formé, mais l'idée générale est : deux paramètres - longueur et paramètre int de 0 à 3. L'Expert Advisor interprète déjà ce nombre à l'intérieur (représentation Pseudobit) :

intLongueur (alias masque)Représentation pseudobit
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Il reste à décider comment coder ces paramètres. Une solution simple : une structure dans laquelle chaque paramètre int (la première colonne du tableau) correspond à une représentation Pseudobit (la troisième colonne). Si le masque est limité à cinq caractères (xxxxxx), la structure n'est pas très grande.

Et le plus important : l'optimiseur vous permet de réorganiser la structure !


C'est l'énumération pour le masque de x à 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',    // 
  };
 

Version du code Morse "1.005"

Voici la solution : le masque est défini comme une énumération

//+------------------------------------------------------------------+
//| 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
...

dans OnInit(), le masque est traduit en une variable de type chaîne de caractères"sExtMorseCode" (la variable"sExtMorseCode" est déclarée globalement) dans la fonction 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);
  }

Deux problèmes ont été résolus :

1). l'utilisateur voit le motif comme "0101" dans les paramètres d'entrée :

Vue pratique du paramètre d'entrée

2). Le paramètre d'entrée est parfaitement optimisé dans le testeur.

Dossiers :
Morse_code.mq5  20 kb
 
Vladimir Karputov:

Version du code Morse "1.005"

Deux problèmes ont été résolus :

1). l'utilisateur voit le motif comme "0101" dans les paramètres d'entrée :

2). Le paramètre d'entrée est parfaitement optimisé dans le testeur.

L'utilisateur peut spécifier une combinaison de chandeliers sans calculs mathématiques selon l'idée initiale ?

 
Pyxis:

L'utilisateur peut spécifier une combinaison de chandeliers sans calculs mathématiques, comme cela a été conçu à l'origine ?


Oui, il peut le faire sans aucun calcul mathématique. Et maintenant, vous n'avez plus besoin de saisir la combinaison manuellement - il suffit de sélectionner la combinaison de chandeliers appropriée dans la liste déroulante"masque de motif".
 
J'ai lancé dans le testeur (optimisation complète) laversion du code Morse "1.005"- les motifs purs (comme maintenant) ne sont pas du tout louches :(.