Le code morse - page 4

 

J'ai laissé de côté le paramètre"longueur du motif " pour spécifier la longueur du motif numérique (ce paramètre n'est utilisé que pour le mode optimisation).

#property version   "1.003"
#property description "Bull candle - \"1\", bear candle - \"0\""
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_TYPE
  {
   PATTERN_TYPE_NUMERICAL=0,  // numerical
   PATTERN_TYPE_STRING=1,     // string 
  };
//---
input ENUM_PATTERN_TYPE    InpPatternType          = PATTERN_TYPE_STRING;  // pattern type
input uchar                InpLenNumerical         = 3;                    // length of the pattern (use only if pattern "numerical")
input string               InpsMorseCode           = "101";                // string Morse code (max 5 characters)
input ENUM_POSITION_TYPE   InpPosType              = POSITION_TYPE_BUY;    // posinion type
input double               InpLot                  = 0.1;                  // lot
sinput ulong               m_magic                 = 88430400;             // magic number
input ulong                m_slippage              = 30;                   // slippage
//---
string sExtMorseCode="";
int max_string_len=5;         // limitation of the length of the pattern "string"
int i_morse_code=0;           // int Morse code (use only if pattern type=numerical)
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(InpPatternType==PATTERN_TYPE_STRING)
     {
      //--- check start mode
      if(MQLInfoInteger(MQL_OPTIMIZATION))
         return(INIT_PARAMETERS_INCORRECT);
      //--- info print
      Print("The type of the pattern \"string\" is set - the parameters \"pattern length\" and \"int Morse code\" are ignored");

      sExtMorseCode=InpsMorseCode;

Et une défense rapide - si vous sélectionnez un type de modèle de chaîne en mode optimisation, le conseiller expert retournera "INIT_PARAMETERS_INCORRECT".

 
Vitalii Ananev:


Il faut penser à tout tout de suite, pour ne pas avoir à tout refaire plus tard.

....

Encore une fois, si nous revenons à la configuration "Evening Star", elle peut être considérée comme une prise de contrôle haussière à petite bougie et une prise de contrôle haussière à baissière. Cela signifie que nous avons un modèle composite composé d'une bougie haussière et d'une absorption baissière. Et si nous additionnons les trois chandeliers de la figure, nous obtenons à nouveau une barre d'épingle.



Laissez-moi insérer mes 5 kopeck.

Cette tâche n'a pas été fixée et il est impossible de tout prévoir en même temps. Dans ce cas, le concept initial qui était prévu comme étant le concept de base sera perdu : un utilisateur construit la séquence de chandeliers haussiers et baissiers et le programme recherche ces séquences et effectue des transactions, alors pourquoi résumer les chandeliers en un seul motif ?

 
Pyxis:


Permettez-moi d'insérer mes cinq cents.

Ce n'était pas la tâche, et il est impossible de tout prévoir en même temps, auquel cas nous perdons le concept original qui a été conçu comme le principal : l'utilisateur fait une séquence de bougies haussières et baissières, et le programme recherche ces séquences et effectue des transactions, alors pourquoi résumer les bougies en un seul motif ?


Pourquoi les résumer ? Eh bien, par exemple, pour simplifier le modèle. En fait, elle a été donnée en exemple.

Pourquoi n'est-ce pas possible ? Toutes les combinaisons de chandeliers japonais qui se produisent fréquemment peuvent être codées d'une manière ou d'une autre. Une autre chose est que le 1e bit (j'en ai parlé plus haut) n'est pas suffisant, vous devez utiliser au moins 2 bits, et ils ne sont pas non plus suffisants si vous ne résumez pas (simplifiez) le modèle du motif.

 

Jusqu'à présent, la version "1.003" du code Morse : vous pouvez spécifier manuellement une description de la chaîne de caractères du motif et même exécuter des passes uniques dans le testeur.

Dossiers :
Morse_code.mq5  15 kb
 
Vladimir Karputov:


Le programme sera utilisé par un utilisateur, pas un programmeur (cela a été dit plus haut et pas une seule fois) - et pour lui "101" et "5" sont deux nombres différents, et pour lui "5" ne contient aucune information sur la position relative des bougies, mais "101" dit clairement "haussier, baissier, haussier".

Je l'ai. Eh bien, alors - une chaîne de symboles et un analyseur syntaxique. Je pense que c'est l'option la plus flexible.
 
George Merts:

Je ne comprends pas bien - s'agit-il de programmeurs ou de pigeons ?

Pourquoi avons-nous besoin de traduire quelque chose en quelque chose ?

Si nous avons besoin d'un code 101 - c'est la valeur normale de 5. C'est tout. Quel est le problème ? Traduire mentalement le décimal en binaire ?

J'ai fait des expériences similaires, sauf que ma bougie avait quatre tailles supplémentaires - de la petite à la grande. Cela fait huit tailles de bougies différentes. Et, par conséquent, trois bits. Dans le motif, nous écrivons le nombre (ulong) - la grille est plus grande que dans le motif à vingt barres.

Le problème est, à mon avis, tiré par les cheveux.

Faites d'abord le tri, puis critiquez. Voici une tâche à laquelle vous devez réfléchir :

Encodez le nombre int pour les combinaisons de chandeliers suivantes :

  • 1011 ;
  • 01011 ;
  • 001011

Indice : il s'agit de différentes combinaisons.

George Merts:
Je l'ai. Eh bien, alors - chaîne de caractères et analyseur syntaxique. Cela me semble être l'option la plus flexible.
Encore une fois : optimizer_not_optimize_string_parameters. Comment allez-vous rechercher une combinaison de motifs rentables sans l'optimiseur ?
 
Vasiliy Sokolov:
Une fois de plus : l'optimiseur_ne_optimisera_pas_les_paramètres_chaînes. Comment allez-vous rechercher la combinaison de motifs rentables sans l'optimiseur ?

Si un optimiseur est nécessaire, je pense que l'utilisateur doit être suffisamment "avisé" pour traduire le nombre en code binaire (au moins avec une calculatrice Windows ordinaire).

Vous, mes amis, avez une demande contradictoire. Si un utilisateur est tellement idiot qu'il ne peut pas utiliser une calculatrice pour traduire un code binaire en code décimal, il ne peut de toute façon pas gérer l'optimisation. Il peut tout au plus l'exécuter une fois pour trouver la meilleure valeur.

Si l'utilisateur est suffisamment avancé pour utiliser l'optimiseur, il est raisonnable de coder les paramètres d'entrée avec un long non signé ordinaire,

 
Vasiliy Sokolov:

Comprenez d'abord et critiquez ensuite. Voici une tâche qui suscite la réflexion pour vous :

Encodez le nombre int avec les combinaisons de bougies suivantes :

  • 1011 ;
  • 01011 ;
  • 001011

Indice : il s'agit de différentes combinaisons.

De plus - ils sont de longueur différente. La première combinaison - comprend quatre combinaisons à six chiffres.

La deuxième combinaison comprend deux uns de six bits.

Par conséquent, nous ne devrions prendre que 64 combinaisons de six bits pendant l'optimisation.

De plus, la dernière option est un sous-ensemble des deux premières, et l'avant-dernière est un sous-ensemble de la première.

Ainsi, au moment de l'enregistrement de la dernière combinaison, nous devons identifier la deuxième et la première combinaison en même temps. À mon avis, il s'agit clairement d'une demande incorrecte.

 
Quel est le but de cet événement - trouver la séquence la plus rentable ? Vous n'avez pas besoin d'un robot ou d'un testeur pour cela - un indicateur, dans lequel la longueur de la séquence et les règles de fermeture de la position (par TP ou par le signal opposé ou n'importe où ailleurs) sont spécifiées, est suffisant. L'indicateur codera toutes les variantes dans la longueur spécifiée de la séquence et une profondeur d'historique spécifiée, il triera le résultat (y compris le drawdown) et l'imprimera où vous voulez. Mais le problème semble vraiment tiré par les cheveux. Eh bien, si ce n'est pas un jouet à deviner comme le 0101 pour occuper l'utilisateur...
 
George Merts:

Par conséquent, lors de l'optimisation, il suffit de prendre 64 combinaisons à six chiffres.

Question : quelle est la probabilité d'apparition sur le marché d'une combinaison correspondant aux 64 chiffres requis ? Réponse : (1/2^64)*BarsCount. Cela signifie qu'il y a presque 100% de probabilité qu'une telle combinaison ne soit pas trouvée. Il est évident qu'un seul 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.

Par ces petits pas, vous arriverez bientôt à ce que j'ai dit à la deuxième page.

Raison: