Indicadores: FivePattern - página 6

 
nav_soft:

...Por cierto, he observado un patrón al optimizar el motor de búsqueda, sea cual sea el algoritmo de búsqueda: Zigzag clásico u otro, el error en la predicción del siguiente modelo varía alrededor del 20 +/-1 %. Y esto me lleva a pensar que A.Merrill o bien no describió deliberadamente 6 patrones (es decir, 3 cifras M y W cada uno), o bien no los detectó.

Anteriormente escribió que hay 6 patrones más. Se trata de una opinión errónea. Aquí tiene un sencillo script que confirma que hay 32 patrones.

#include <Object.mqh>

#include <Arrays\ArrayObj.mqh>

//+------------------------------------------------------------------+

//| КЛАСС ХРАНЕНИЯ ПОЛУЧЕННЫХ ДАННЫХ                                 |

//+------------------------------------------------------------------+

class MyPPattern : public CObject

  {

private:

   double            A;

   double            B;

   double            C;

   double            D;

   double            E;

public:

                     MyPPattern(void){A=0;B=0;C=0;D=0;E=0;};

                     MyPPattern(double ia, double ib, double ic,

                                double id, double ie)

                                {A=ia;B=ib;C=ic;D=id;E=ie;};

                    ~MyPPattern(void){;};

   //+---------------------------------------------------------------+

   //| SET-МЕТОДЫ                                                    |

   //+---------------------------------------------------------------+

   void              SetA(double in){A = in;};

   void              SetB(double in){B = in;};

   void              SetC(double in){C = in;};

   void              SetD(double in){D = in;};

   void              SetE(double in){E = in;};

   //+---------------------------------------------------------------+

   //| GET-МЕТОДЫ                                                    |

   //+---------------------------------------------------------------+

   double            GetA(void){return(A);};

   double            GetB(void){return(B);};

   double            GetC(void){return(C);};

   double            GetD(void){return(D);};

   double            GetE(void){return(E);};

  };

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

   //--- value

   int         filehandle,total;

   double      a=1,b=1,c=1,d=1,e=1,sum=0;

   string      subfolder="Research";

   CArrayObj*  Marray = new CArrayObj;

   CArrayObj*  Warray = new CArrayObj;

   MyPPattern* ppattern;

   //--- Простой поисковый массив

   while(true)

     {

      //--- 1. Инкримент

      a = a + 1;

      if(a > 5){a = 1;b = b + 1;};

      if(b > 5){b = 1;c = c + 1;};

      if(c > 5){c = 1;d = d + 1;};

      if(d > 5){d = 1;e = e + 1;};

      //--- 2. Выход из цикла

      if(e > 5) break;

      //--- 3. Сумматор

      sum = a+b+c+d+e;

      //--- 4. Запись данных

      if(sum == 15)

        {

         //--- Проверка: неравенства

         if(a!=b && a!=c && a!=d && a!=e && b!=c && 

            b!=d && b!=e && c!=d && c!=e && d!=e)

           {

            //--- Проверка: зиг-заг формации

            if(a<b && b>c && c<d && d>e)

              {//--- Формация M-волн

               ppattern = new MyPPattern(a,b,c,d,e);

               Marray.Add(ppattern);

              }

            if(a>b && b<c && c>d && d<e)

              {//--- Формация W-волн

               ppattern = new MyPPattern(a,b,c,d,e);

               Warray.Add(ppattern);

              }

           }

        }

     }

   //--- Сохранение M-данных

   ResetLastError();

   filehandle=FileOpen(subfolder+"\\SearchNewPatternM.csv",FILE_WRITE|FILE_CSV);

   if(filehandle!=INVALID_HANDLE)

     {

      total = Marray.Total();

      for(int i=0;i<total;i++)

        {

         ppattern = Marray.At(i);

         FileWrite(filehandle,ppattern.GetA(),ppattern.GetB(),ppattern.GetC(),

                   ppattern.GetD(),ppattern.GetE());

        }

      //--- Close file

      FileClose(filehandle);

     }

   else Print(__FUNCTION__,": ERROR FileOpen = ",GetLastError());

   //--- Сохранение W-данных

   ResetLastError();

   filehandle=FileOpen(subfolder+"\\SearchNewPatternW.csv",FILE_WRITE|FILE_CSV);

   if(filehandle!=INVALID_HANDLE)

     {

      total = Warray.Total();

      for(int i=0;i<total;i++)

        {

         ppattern = Warray.At(i);

         FileWrite(filehandle,ppattern.GetA(),ppattern.GetB(),ppattern.GetC(),

                   ppattern.GetD(),ppattern.GetE());

        }

      //--- Close file

      FileClose(filehandle);

     }

   else Print(__FUNCTION__,": ERROR FileOpen = ",GetLastError());

   //--- delet all objects

   delete Marray;

   delete Warray;

  }

//+------------------------------------------------------------------+


Y el error del algoritmo del 20% se debe a la detección tardía del patrón. Me di cuenta sólo después de probar un patrón doble, aquí hay una ilustración:

Detección tardía de un patrón

 
nav_soft:

Antes he escrito que hay 6 modelos más. Esto es un error. Aquí hay un sencillo script que confirma que hay 32 patrones.

#include <Object.mqh>

#include <Arrays\ArrayObj.mqh>

//+------------------------------------------------------------------+

//| КЛАСС ХРАНЕНИЯ ПОЛУЧЕННЫХ ДАННЫХ                                 |

//+------------------------------------------------------------------+

class MyPPattern : public CObject

  {

private:

   double            A;

   double            B;

   double            C;

   double            D;

   double            E;

public:

                     MyPPattern(void){A=0;B=0;C=0;D=0;E=0;};

                     MyPPattern(double ia, double ib, double ic,

                                double id, double ie)

                                {A=ia;B=ib;C=ic;D=id;E=ie;};

                    ~MyPPattern(void){;};

   //+---------------------------------------------------------------+

   //| SET-МЕТОДЫ                                                    |

   //+---------------------------------------------------------------+

   void              SetA(double in){A = in;};

   void              SetB(double in){B = in;};

   void              SetC(double in){C = in;};

   void              SetD(double in){D = in;};

   void              SetE(double in){E = in;};

   //+---------------------------------------------------------------+

   //| GET-МЕТОДЫ                                                    |

   //+---------------------------------------------------------------+

   double            GetA(void){return(A);};

   double            GetB(void){return(B);};

   double            GetC(void){return(C);};

   double            GetD(void){return(D);};

   double            GetE(void){return(E);};

  };

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

   //--- value

   int         filehandle,total;

   double      a=1,b=1,c=1,d=1,e=1,sum=0;

   string      subfolder="Research";

   CArrayObj*  Marray = new CArrayObj;

   CArrayObj*  Warray = new CArrayObj;

   MyPPattern* ppattern;

   //--- Простой поисковый массив

   while(true)

     {

      //--- 1. Инкримент

      a = a + 1;

      if(a > 5){a = 1;b = b + 1;};

      if(b > 5){b = 1;c = c + 1;};

      if(c > 5){c = 1;d = d + 1;};

      if(d > 5){d = 1;e = e + 1;};

      //--- 2. Выход из цикла

      if(e > 5) break;

      //--- 3. Сумматор

      sum = a+b+c+d+e;

      //--- 4. Запись данных

      if(sum == 15)

        {

         //--- Проверка: неравенства

         if(a!=b && a!=c && a!=d && a!=e && b!=c && 

            b!=d && b!=e && c!=d && c!=e && d!=e)

           {

            //--- Проверка: зиг-заг формации

            if(a<b && b>c && c<d && d>e)

              {//--- Формация M-волн

               ppattern = new MyPPattern(a,b,c,d,e);

               Marray.Add(ppattern);

              }

            if(a>b && b<c && c>d && d<e)

              {//--- Формация W-волн

               ppattern = new MyPPattern(a,b,c,d,e);

               Warray.Add(ppattern);

              }

           }

        }

     }

   //--- Сохранение M-данных

   ResetLastError();

   filehandle=FileOpen(subfolder+"\\SearchNewPatternM.csv",FILE_WRITE|FILE_CSV);

   if(filehandle!=INVALID_HANDLE)

     {

      total = Marray.Total();

      for(int i=0;i<total;i++)

        {

         ppattern = Marray.At(i);

         FileWrite(filehandle,ppattern.GetA(),ppattern.GetB(),ppattern.GetC(),

                   ppattern.GetD(),ppattern.GetE());

        }

      //--- Close file

      FileClose(filehandle);

     }

   else Print(__FUNCTION__,": ERROR FileOpen = ",GetLastError());

   //--- Сохранение W-данных

   ResetLastError();

   filehandle=FileOpen(subfolder+"\\SearchNewPatternW.csv",FILE_WRITE|FILE_CSV);

   if(filehandle!=INVALID_HANDLE)

     {

      total = Warray.Total();

      for(int i=0;i<total;i++)

        {

         ppattern = Warray.At(i);

         FileWrite(filehandle,ppattern.GetA(),ppattern.GetB(),ppattern.GetC(),

                   ppattern.GetD(),ppattern.GetE());

        }

      //--- Close file

      FileClose(filehandle);

     }

   else Print(__FUNCTION__,": ERROR FileOpen = ",GetLastError());

   //--- delet all objects

   delete Marray;

   delete Warray;

  }

//+------------------------------------------------------------------+


Y el error del algoritmo del 20% se debe a la detección tardía del patrón. Me di cuenta sólo después de probar un patrón doble, aquí hay una ilustración:


Entiendo que el código ha sido completamente reescrito, ¿cuándo podré ver este milagro?
 
ozhiganov:
Tengo entendido que el código se ha reescrito por completo, ¿cuándo podremos familiarizarnos con esta maravilla?

Hay muchos cambios:

1. el indicador se ha convertido en "binario": el patrón más antiguo se define en periodos horarios, el más joven funciona en minutos, ("enfoque de los traders" - no sé si tendré tiempo para añadir el marcado de los límites de las sesiones de negociación). El patrón común se muestra en un gráfico, por lo que hay un algoritmo para restaurar el valor completo del extremo temporal del patrón mayor;

2. Se reescribe la clase MyCExtremum: a) se mantiene el Zig-Zag clásico; b) modificación del Zig-Zag con un paso porcentual; c) y mi fractal experimental (extremo) + paso porcentual (en las imágenes es el que está en trabajo);

3. En el Algoritmo de detección del primer punto del modelo senior, se comprueba la condición de sobrepasar los límites de las Bandas de Bollinger, también el algoritmo observa esta condición en otros puntos, creo que en base a esto podemos juzgar sobre la exactitud de un determinado modelo y su completitud actual (aquí hay dificultades... aún no hay un algoritmo claro);

4. Gráficos: se decidió utilizar objetos ElliotWave5 ya hechos;

Se publicará muy pronto. Mientras se prueba... y esto mata más tiempo que el diseño.

 
nav_soft:

Hay muchos cambios:

1. el indicador se ha convertido en "binario": el patrón senior se define en periodos horarios, el junior funciona en minutos, ("enfoque de los traders" - no sé si tendré tiempo para añadir el marcado de los límites de la sesión de negociación). El patrón común se muestra en un gráfico, por lo que existe un algoritmo para restablecer el valor completo del extremo temporal del patrón senior;

2. Se reescribe la clase MyCExtremum: a) se mantiene el Zig-Zag clásico; b) modificación del Zig-Zag con un paso porcentual; c) y mi fractal experimental (extremo) + paso porcentual (en las imágenes es el que está en trabajo);

3. En el Algoritmo de detección del primer punto del modelo senior, se comprueba la condición de sobrepasar los límites de las Bandas de Bollinger, también el algoritmo observa esta condición en otros puntos, creo que en base a esto podemos juzgar sobre la exactitud de un determinado modelo y su completitud actual (aquí hay dificultades... aún no hay un algoritmo claro);

4. Gráficos: se decidió utilizar objetos ElliotWave5 ya hechos;

Se publicará muy pronto. Mientras se prueba... que mata más tiempo que el diseño.

¡¡¡Esperando con ansias!!!
 

Iniciadas las pruebas de campo de la señal/asesor Five Wave: https: //www.mql5.com/ru/signals/98850. El Asesor Experto genera señales de trading basadas en la previsión del indicador FivePattern.

Торговые сигналы для MetaTrader 5: Five Wave indicator Five Pattern
Торговые сигналы для MetaTrader 5: Five Wave indicator Five Pattern
  • Andrey Emelyanov
  • www.mql5.com
Сигнал от советника Five Wave. Торговые правила советника генерируются на индикаторе FivePattern . Скачать индикатор FivePattern и ознакомиться с его работой можно по ссылке .
 
nav_soft:

Начал полевые испытания сигнала/советника Five Wave: https://www.mql5.com/es/signals/98850 . Советник генерирует торговые сигналы на основе прогноза от индикатора FivePattern.

nav_soft
:

Iniciadas las pruebas de campo de la señal/asesor Five Wave: https: //www.mql5.com/ru/signals/98850. El Asesor Experto genera señales de trading basadas en la previsión del indicador FivePattern.

Genial, llevo mucho tiempo esperando, ¿se actualizará el indicador en Code Base?
 
ozhiganov:
Estupendo, llevo mucho tiempo esperando, ¿se actualizará el indicador en Code Base?
Sí. 18.04.2015 - Enviaré el código a los moderadores para que lo comprueben, y lo publicaré en el foro como archivo.
[Eliminado]  

¡¡¡¡HEAVY!!!! Felicitaciones al desarrollador.

Me gustó el hecho de que había algo nuevo, absolutamente diferente de los demás. Casi como un know-how.

[Eliminado]  
Gracias al desarrollador, a la espera de la versión actualizada, ya es 20 de abril)
 
buenos dias, ¿como instalar este indicador en mt5? mi correo felipebm1@hotmail.com gracias