Código Morse - página 4

 

He omitido el parámetro"longitud del patrón " para especificar la longitud del patrón numérico (este parámetro sólo se utiliza para el modo de optimización).

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

Y una defensa rápida - si selecciona un tipo de patrón de cadena en el modo de optimización, el Asesor Experto devolverá "INIT_PARAMETERS_INCORRECT"

 
Vitalii Ananev:


Hay que pensar en todo enseguida, para no tener que rehacerlo después.

....

De nuevo, si volvemos al patrón de la "Estrella de la tarde", puede verse como una vela alcista-bajista y como una toma de ganancias alcista-bajista. Significa que tenemos un patrón compuesto formado por una vela alcista y una absorción bajista. Y si sumamos las tres velas del patrón obtenemos de nuevo una barra de pin.



Permítanme insertar mis 5 kopeck.

En este caso se perderá el concepto inicial que se planteó como básico: un usuario construye la secuencia de velas alcistas y bajistas y el programa busca estas secuencias y negocia, entonces ¿por qué resumimos las velas en un patrón?

 
Pyxis:


Permítanme insertar mis cinco centavos.

Esta no era la tarea, y es imposible prever todo a la vez, en cuyo caso se pierde el concepto original, que fue concebido como el principal: el usuario hace una secuencia de velas alcistas y bajistas, y el programa busca estas secuencias y negocia, así que ¿por qué resumir las velas en un solo patrón?


¿Por qué los resumimos? Bueno, por ejemplo, para simplificar el modelo. De hecho, se puso como ejemplo.

¿Por qué no es posible? Todas las combinaciones de velas japonesas que se producen con frecuencia pueden codificarse de una forma u otra. Otra cosa es que el 1er bit (lo escribí arriba) no es suficiente, hay que usar al menos 2 bits, y tampoco son suficientes si no se resume (simplifica) el modelo de patrón.

 

Hasta ahora, la versión "1.003" del código Morse: puede especificar manualmente una cadena de descripción del patrón e incluso ejecutar pases individuales en el probador.

Archivos adjuntos:
Morse_code.mq5  15 kb
 
Vladimir Karputov:


El programa será utilizado por un usuario, no por un programador (se ha dicho arriba y no una vez) - y para él "101" y "5" son dos números diferentes, y para él "5" no contiene ninguna información sobre la posición relativa de las velas, pero "101" dice claramente "alcista, bajista, alcista".

Lo tengo. Pues bien, una cadena de símbolos y un parser. Creo que es la opción más flexible.
 
George Merts:

No lo entiendo del todo: ¿son programadores o imbéciles?

¿Por qué traducir algo en algo?

Si necesitamos un código 101 - es el valor normal de 5. Eso es. ¿Cuál es el problema? ¿Traducir mentalmente de decimal a binario?

Hice experimentos similares, sólo que mi vela tenía cuatro tamaños más, de pequeño a grande. Eso hace que haya ocho tamaños de velas diferentes. Y, en consecuencia, tres bits. En el patrón escribimos el número (ulong) - la cuadrícula es más grande que en el patrón de veinte barras.

El problema es, en mi opinión, inverosímil.

Primero lo resuelve y luego lo critica. He aquí una tarea para que reflexiones:

Codifica el número int para las siguientes combinaciones de velas:

  • 1011;
  • 01011;
  • 001011

Pista: son combinaciones diferentes.

George Merts:
Lo tengo. Bueno, entonces - cadena de caracteres y parser. Me parece la opción más flexible.
Una vez más: optimizer_not_optimize_string_parameters. ¿Cómo buscará una combinación de patrones rentables sin el optimizador?
 
Vasiliy Sokolov:
Una vez más: el optimizador_no_optimizará_parámetros_de_cadena. ¿Cómo buscará la combinación de patrones rentables sin el optimizador?

Si se necesita un optimizador, creo que el usuario debería ser lo suficientemente "inteligente" como para traducir el número a código binario (al menos con una calculadora normal de Windows).

Ustedes, amigos, tienen una petición contradictoria. Si un usuario es tan tonto que no puede utilizar una calculadora para traducir el código binario en código decimal, no puede manejar la optimización de todos modos. A lo sumo puede ejecutarlo una vez para encontrar el mejor valor.

Si el usuario es lo suficientemente avanzado como para utilizar el optimizador, es razonable codificar los parámetros de entrada con un unsigned long normal,

 
Vasiliy Sokolov:

Primero hay que entenderlo y luego criticarlo. Aquí tienes una tarea que te hará reflexionar:

Codifica el número int con las siguientes combinaciones de velas:

  • 1011;
  • 01011;
  • 001011

Pista: son combinaciones diferentes.

Además, tienen una longitud diferente. La primera combinación - incluye cuatro combinaciones de seis dígitos.

La segunda combinación incluye dos unos de seis bits.

En consecuencia, sólo deberíamos tomar 64 combinaciones de seis bits durante la optimización.

Además, la última es un subconjunto de las dos primeras opciones, y la penúltima es un subconjunto de la primera.

Así, en el momento de registrar la última combinación tenemos que identificar la segunda y la primera combinación al mismo tiempo. En mi opinión, se trata de una petición claramente incorrecta.

 
¿Cuál es el objetivo de este evento: encontrar la secuencia más rentable? Para ello no es necesario un robot o un probador, basta con un indicador en el que se especifique la duración de la secuencia y las reglas de cierre de la posición (por TP o por la señal contraria o por cualquier otro lugar). El indicador codificará todas las variantes dentro de la longitud especificada de la secuencia y una profundidad especificada de la historia, ordenará el resultado (incluyendo la reducción) y lo imprimirá donde usted quiera. Pero el problema parece realmente inverosímil. Bueno, si no es un juguete de adivinación como el 0101 para ocupar al usuario
 
George Merts:

Por lo tanto, al optimizar, sólo hay que tomar 64 combinaciones de seis dígitos.

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. Significa que hay casi un 100% de probabilidades de que no se encuentre 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.

Con esos pequeños pasos pronto llegarás a lo que dije en la segunda página.