Codice Morse - pagina 4

 

Ho lasciato fuori il parametro"lunghezza del modello " per specificare la lunghezza per un modello numerico (questo parametro è usato solo per la modalità di ottimizzazione).

#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;

E una rapida difesa: se selezionate un tipo di modello di stringa in modalità di ottimizzazione, l'Expert Advisor restituirà "INIT_PARAMETERS_INCORRECT".

 
Vitalii Ananev:


Bisogna pensare a tutto subito, per non doverlo rifare dopo.

....

Di nuovo, se torniamo al modello "Evening Star", può essere visto come un bullish-small candle-bearish e un bullish-bearish takeover. Significa che abbiamo un modello composito composto da una candela rialzista e un assorbimento ribassista. E se sommiamo tutte e tre le candele del pattern otteniamo di nuovo una pin bar.



Lasciatemi inserire i miei 5 kopeck.

In questo caso si perde il concetto iniziale che doveva essere quello principale: un utente costruisce una sequenza di candele rialziste e ribassiste e il programma cerca queste sequenze e fa trading, quindi perché sintetizzarle in un solo pattern?

 
Pyxis:


Permettetemi di inserire i miei cinque centesimi.

Non era questo il compito, ed è impossibile prevedere tutto in una volta, nel qual caso si perde il concetto originale, che è stato concepito come principale: l'utente fa una sequenza di candele rialziste e ribassiste, e il programma cerca queste sequenze e fa trading, quindi perché riassumere le candele in un unico modello?


Perché li riassumiamo? Beh, per esempio, per semplificare il modello. Infatti, è stato dato come esempio.

Perché non è possibile? Tutte le combinazioni frequenti di candelieri giapponesi possono essere codificate in un modo o nell'altro. Un'altra cosa è che l'1-th bit (l'ho scritto sopra) non è sufficiente, bisogna usare almeno 2 bit, e non sono neanche sufficienti se non si riassume (semplifica) il modello di pattern.

 

Finora il codice Morse versione "1.003": è possibile specificare manualmente una stringa di descrizione del modello e anche eseguire singoli passaggi nel tester.

File:
Morse_code.mq5  15 kb
 
Vladimir Karputov:


Il programma sarà usato da un utente, non da un programmatore (è stato detto sopra e non una volta) - e per lui "101" e "5" sono due numeri diversi, e per lui "5" non contiene alcuna informazione sulla posizione relativa delle candele, ma "101" dice chiaramente "bullish, bearish, bullish".

Capito. Bene, allora - una stringa di simboli e un parser. Penso che sia l'opzione più flessibile.
 
George Merts:

Non capisco bene - sono programmatori o babbei?

Perché abbiamo bisogno di tradurre qualcosa in qualcosa?

Se abbiamo bisogno di un codice 101 - questo è il valore normale di 5. Ecco, qual è il problema? Tradurre mentalmente il decimale in binario?

Ho fatto esperimenti simili, solo che la mia candela aveva quattro misure in più, da piccola a grande. Questo fa otto diverse dimensioni di candele. E, di conseguenza, tre bit. Nel modello si scrive il numero (ulong) - la griglia è più grande che nel modello a venti barre.

Il problema è, secondo me, inverosimile.

Prima si fa la cernita e poi si critica. Ecco un compito a cui pensare:

Codifica il numero int per le seguenti combinazioni di candele:

  • 1011;
  • 01011;
  • 001011

Suggerimento: si tratta di combinazioni diverse.

George Merts:
Capito. Bene, allora - stringa di caratteri e parser. Mi sembra l'opzione più flessibile.
Ancora una volta: optimizer_not_optimize_string_parameters. Come farete a cercare una combinazione di modelli redditizi senza l'ottimizzatore?
 
Vasiliy Sokolov:
Ancora una volta: l'optimizer_will_not_optimize_string_parameters. Come farete a cercare la combinazione di modelli redditizi senza l'ottimizzatore?

Se è necessario un ottimizzatore, penso che l'utente dovrebbe essere abbastanza "esperto" da tradurre il numero in codice binario (almeno con una normale calcolatrice di Windows).

Voi, amici, avete una richiesta contraddittoria. Se un utente è così stupido da non poter usare una calcolatrice per tradurre il codice binario in decimale, non può comunque gestire l'ottimizzazione. Al massimo può eseguirlo solo una volta per trovare il valore migliore.

Se l'utente è abbastanza avanzato da usare l'ottimizzatore, è ragionevole codificare i parametri di input con un normale unsigned long,

 
Vasiliy Sokolov:

Prima capire e poi criticare. Ecco un compito stimolante per voi:

Codificare il numero int con le seguenti combinazioni di candele:

  • 1011;
  • 01011;
  • 001011

Suggerimento: si tratta di combinazioni diverse.

Inoltre - sono di lunghezza diversa. La prima combinazione - comprende quattro combinazioni di sei cifre.

La seconda combinazione include due uno a sei bit.

Di conseguenza, dovremmo prendere solo 64 combinazioni a sei bit durante l'ottimizzazione.

Inoltre, l'ultima è un sottoinsieme delle prime due opzioni, e la penultima è un sottoinsieme della prima.

Quindi, al momento della registrazione dell'ultima combinazione dobbiamo identificare la seconda e la prima combinazione allo stesso tempo. A mio parere, questa è chiaramente una richiesta errata.

 
Qual è lo scopo di questo evento - trovare la sequenza più redditizia? Non hai bisogno di un robot o di un tester per questo - un indicatore, in cui la lunghezza della sequenza e le regole di chiusura della posizione (dal TP o dal segnale opposto o da qualsiasi altra parte) sono specificate, è sufficiente. L'indicatore codificherà tutte le varianti entro la lunghezza specificata della sequenza e una profondità specificata della storia, ordinerà il risultato (incluso il drawdown) e lo stamperà dove volete. Ma il problema sembra davvero inverosimile. Beh, se non è un giocattolo indovinato come 0101 per occupare l'utente
 
George Merts:

Di conseguenza, quando si ottimizza - basta prendere 64 combinazioni di sei cifre.

Domanda: qual è la probabilità che appaia sul mercato una combinazione che corrisponde alle 64 cifre richieste? Risposta: (1/2^64)*BarsCount. Significa che c'è quasi il 100% di probabilità che non si trovi una tale combinazione. È ovvio che un solo numero int o long non può descrivere completamente il modello, quindi abbiamo bisogno di un parametro aggiuntivo che specifichi la lunghezza del modello.

Con questi piccoli passi arriverete presto a quello che ho detto nella seconda pagina.