Codice Morse - pagina 5

 
Codice Morse versione "1.004": bug fisso - il pattern veniva letto al contrario.
File:
Morse_code.mq5  15 kb
 
Vasiliy Sokolov:

Domanda: Qual è la probabilità che appaia sul mercato una combinazione che corrisponde alle 64 cifre richieste? Risposta: (1/2^64)*BarsCount. Cioè, con una probabilità vicina al 100% tale combinazione non sarà trovata. Quindi, ovviamente, solo il numero int o long non può descrivere completamente il modello, quindi abbiamo bisogno di un parametro aggiuntivo che specifichi la lunghezza del modello.

Questo se guardiamo tutti i 64 bit. Ma è ovviamente inutile.

Quando ho eseguito tali indagini, ho scoperto che non è ragionevole prendere la lunghezza di un pattern candlestick più lunga di 5. Inoltre, se distinguiamo le barre non solo da quelle "toro-orso" ma anche dalle loro dimensioni, anche questa lunghezza è troppo lunga.

Se abbiamo un modello di grande lunghezza - è molto più ragionevole specificare "tratti caratteristici" e semplicemente limitare la lunghezza con valori minimi e massimi.

 

Non è ancora formato esattamente, ma l'idea generale è: due parametri - lunghezza e parametro int da 0 a 3. All'interno l'Expert Advisor sta già interpretando questo numero (rappresentazione Pseudobit):

intLunghezza (aka maschera)Rappresentazione pseudobit
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Resta da decidere come codificare questi parametri. Una soluzione semplice: una struttura in cui ogni parametro int (la prima colonna della tabella) corrisponde a una rappresentazione Pseudobit (la terza colonna). Se la maschera è limitata a soli cinque caratteri (xxxxxx), la struttura non è molto grande.

E la cosa più importante - l'ottimizzatore permette di riorganizzare la struttura!

 

Puoi anche fare tre parametri separati per le tre candele nella finestra delle proprietà. Si uccidono due uccelli in una volta sola - è chiaro e ottimizzato.

Lo stesso può essere fatto per 10 candele.

 
Dmitry Fedoseev:

Puoi anche fare tre parametri separati per le tre candele nella finestra delle proprietà. Si uccidono due uccelli in una volta sola - è chiaro e ottimizzato.

Lo stesso può essere fatto per 10 candele.

Io sostengo

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

Non è ancora formato esattamente, ma l'idea generale è: due parametri - lunghezza e parametro int da 0 a 3. All'interno l'Expert Advisor sta già interpretando questo numero (rappresentazione Pseudobit):

intLunghezza (aka maschera)Rappresentazione pseudobit
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Resta da decidere come codificare questi parametri. Una soluzione semplice: una struttura in cui ogni parametro int (la prima colonna della tabella) corrisponde a una rappresentazione Pseudobit (la terza colonna). Se la maschera è limitata a soli cinque caratteri (xxxxxx), la struttura non è molto grande.

E la cosa più importante - l'ottimizzatore permette di riorganizzare la struttura!


Questa è l'enumerazione per la maschera da 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',    // 
  };
 

Codice Morse versione "1.005

Ecco la soluzione: la maschera è definita come un'enumerazione

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

in OnInit(), la maschera è tradotta in una variabile stringa"sExtMorseCode" (la variabile"sExtMorseCode" è dichiarata globalmente) nella funzione 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);
  }

Due problemi sono stati risolti:

1). l'utente vede il modello come "0101" nei parametri di input:

Comoda visualizzazione dei parametri di ingresso

2). Il parametro di ingresso è perfettamente ottimizzato nel tester.

File:
Morse_code.mq5  20 kb
 
Vladimir Karputov:

Codice Morse versione "1.005

Due problemi sono stati risolti:

1). l'utente vede il modello come "0101" nei parametri di input:

2). Il parametro di ingresso è perfettamente ottimizzato nel tester.

L'utente può specificare una combinazione di candele senza calcoli matematici secondo l'idea iniziale?

 
Pyxis:

L'utente può specificare una combinazione di candele senza calcoli matematici, come originariamente concepito?


Sì, può farlo senza calcoli matematici. E ora non c'è bisogno di inserire la combinazione manualmente - basta selezionare la combinazione di candele appropriata dall'elenco a discesa"pattern mask".
 
Ha eseguito nel tester (ottimizzazione completa) laversione del codice Morse "1.005"- i modelli puri (come ora) non sono per niente pescosi :(.