Descargar MetaTrader 5

La inactividad es el estímulo del progreso. Marcado semiautomático de una plantilla.

4 mayo 2016, 16:48
Vladimir
0
138


Introducción

Cualquier marcado es determinar el extremo en un gráfico y componer algunas figuras definidas por el usuario, o líneas en la base de estos puntos. Los seguidores de las ondas de Elliot tienen que marcar ciertas ondas y las conclusiones (qué onda es), determinar el número, etc. Los discípulos de las ondas de Wolf tienen que dibujar las líneas de tendencia y denotar objetivos. Los "Butterfliers" necesitan puntos y niveles para determinar las mariposas, cangrejos, etc. de perspectiva y otras formas formalizadas con Gartley.

Los niveles de Murrey son necesarios para quienes prefieren este método. El cálculo automático no permite involucrar cientos, o puede que miles de formaciones, sino es con un software especial. Por otro lado, cualquiera puede ver los inconvenientes del marcado automático en la consecuencia de los métodos condición-formalización. Y no todos los softwares permiten intervenir en el proceso de marcado. Por lo que la aplicación del marcado manual y la asignación de los futuros procesamientos de datos al ordenador amplia las capacidades del usuario.


Marcado semiautomático de una plantilla de trading

Consideremos marcar las ondas de Wolf, por ejemplo. (La descripción se ha cogido del libro «Inteligencias de la calle» de Linda Raschke).

La teoría de Bill de la estructura de una onda está basada en la primera ley de física de Newton: para cada acción hay una reacción opuesta. Este movimiento crea una onda definitiva con capacidades salientes válidas. Esta onda establece de forma más clara cuando hay una inestabilidad buena.

Empezando por el principio o final del gráfico de barras, se asegura el comienzo de la cuenta en una nueva onda. Esta cuenta es para una configuración de compra. Se empieza la cuenta al principio. (La cuenta de la onda se reservaría si se empezara al final buscando una configuración de venta)


  1. La onda número dos es un principio.
  2. La onda número 3 es el final del primer descenso.
  3. La onda número 1 es el final antes de la onda 2 (principio). El punto 3 debe ser más bajo que el punto 1.
  4. La onda número 4 es el principio de la onda 3. El punto de la onda 4 debería ser más alto que el final de la onda 1.
  5. Se dibuja una línea de tendencia desde el punto 1 al punto 3. La extensión de esta línea se saca al punto inverso anticipado que se llamará onda 5. Este es el punto de entrada de un viaje de la línea EPA (1 a 4).
  6. El Precio Estimado a la Llegada (en inglés Estimated Price at Arrival, EPA) es la línea de tendencia dibujada desde el punto 1 a 4. Esto saca el objetivo de precio anticipado. La parada inicial se coloca debajo del nuevo inverso en el punto 5. Se puede mover rápidamente a la rentabilidad.

PUNTO IMPORTANTE: No puede empezar a buscar la onda Wolfe hasta que no se hayan formado los puntos 1, 2, 3 y 4.

Tenga en cuenta que el punto 3 tiene que ser más bajo que el punto 1 para una configuración de compra. Debe ser más alto que el punto 1 para una configuración de venta. También, las mejores ondas del punto 4 serán más altas que las del punto 1 para la configuración de comprar y más bajas que 1 para la configuración de vender. Esto asegura que las condiciones absolutas de mercado no existan. Ahora, estudie los ejemplos y vea si puede entrenar el ojo para empezar a ver la configuración de Onda Wolfe.


La prueba muestra cómo es una Onda Wolfe cuando se está empezando a formar. Puntos 1, 2 y 3 ya tienen que estar formados. El punto 2 debe ser un giro considerable arriba o abajo. La línea de tendencia se dibuja entre los puntos 1 y 3. Esto prevé dónde se debería anticipar el punto 5.



El Punto 5 está formado. Se utilizará la forma inversa de esta zona y se colocará una parada por debajo. Si se dibuja la línea de tendencia desde el punto 1 al punto 4, debería dar una previsión de precio.



El punto 2 es el punto inicial del patrón. Me resulta siempre más fácil empezar a contar en este punto. Luego, volver hacia atrás y encontrar los puntos 1 y 3. No se olvide que el punto 4 debe ser más alto que el punto 1. Esta línea de tendencia se dibuja previendo el punto 5. El mercado encuentra apoyo en este nivel, por lo que se introduce una posición larga en el mercado y se coloca una parada justo debajo del punto 5. El mercado hace trade hacia su objetivo.



Según la descripción adjunta, se necesita montar el marcado con los símbolos especiales (dígitos del 1 al 5 y luego dibujar las líneas de tendencia desde el punto 1, que pase los puntos 4 y 5).


En el método manual, los objetos de texto se crean y se asignan a los puntos específicos del gráfico, luego se crean las líneas de tendencia y se colocan en el gráfico. Las características del lenguaje de programación permite simplificar el proceso y excluir la creación de objetos y el dibujo de las líneas de tendencia del proceso. En este método, el usuario es quien asigna las marcas a ciertos puntos del gráfico y se prepara para dibujar las líneas de tendencia.


Recordamos que hay dos maneras de colocar la información en el gráfico.

La primera es cuando un objeto de texto se asigna a cierto punto del gráfico, y la segunda cuando se asigna la vinculación a cierto punto de la ventana del gráfico.


Vamos a utilizar estas características para crear diferentes objetos. Se crea el botón "OnOff" para eliminar los objetos que ya se han aplicado y las líneas que ya se han dibujado, y se vincula con algún punto de la ventana. Y se crea el objeto que se va a vincular a los puntos especificados en el gráfico. Teniendo en cuenta que el gráfico se puede rescalar y los objetos se cambiaran junto al gráfico, se determinará la posición inicial de los puntos de conexión a la derecha de a barra cero del gráfico. Se utilizará esta posición para la activación y desactivación de la función para dibujar las líneas de tendencia.

// Check the presence of the "OnOff" button, create it in case of absence
int    obj_total=ObjectsTotal();
  string index;
  for( i=0;i<obj_total;i++)
    {
     index=ObjectName(i);
      string Lbl = StringSubstr (index, 0, 12);
            if (Lbl == "Lable_On_Off") string LblOnOff=index;
     }
if (LblOnOff!="Lable_On_Off") OnOff(Red, 10);

en el que:

OnOff(Red, 10);

la función para crear y colocar el botón "OnOff".

void OnOff (color clr_, int h)
         {                                      
         ObjectCreate("Lable_On_Off",OBJ_LABEL,0,0,0);// Creation of the "OnOff" button
         ObjectSetText("Lable_On_Off",CharToStr(204) , 12, "Wingdings", clr_);
         ObjectSet(   "Lable_On_Off", OBJPROP_CORNER, 3);     // The angle of displaying on the chart
         ObjectSet(   "Lable_On_Off", OBJPROP_XDISTANCE, 10);
         ObjectSet(   "Lable_On_Off", OBJPROP_YDISTANCE, h);
         } 
return;

Función integrada

CharToStr()

permite mostrar cualquier objeto en el gráfico

"Wingdings"

sólo introduciendo los códigos de los símbolos.

Se activa el indicador seleccionando y movimiento el botón "OnOff" hacia arriba. Tras el movimiento y la entrada del primer tick del gráfico, el botón se asigna a otra posición y cambia su color a verde, y se muestran los objetos a la derecha de la primera barra: los dígitos para la enumeración en el gráfico por la función.

Se controlan los objetos del gráfico dependiendo de la posición del botón.

// Check if the "OnOff" button is at its place
   
if (ObjectGet("Lable_On_Off",OBJPROP_XDISTANCE)>70||
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)<20)// if it is not there then
       { 
          OnOff(Red, 10);// we move the "OnOff" button to its place and delete all marks, channel, trend line
         for ( i=0; i<point_kol; i++)
            ObjectDelete("Lable_"+i);
            ObjectDelete("TRDLine");
            ObjectDelete("FIBOCanal");
         return;
         }  
                                               
if (ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)>10 && 
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)!=40) //If the button is moved upwards then
       {  
         OnOff(Green, 40); // we fix it up there
         CreatePoint();   // Create points
       }

en el que:


CreatePoint();

es la función de la ubicación inicial de los puntos calculados en el gráfico.


void CreatePoint ()
      {
      double shcala=(WindowPriceMax()-WindowPriceMin());
      for( i = 0; i < point_kol; i++) // Create points
               {                                      
      ObjectCreate("Lable_"+i, OBJ_ARROW, 0,Time[Bars-1],Bid);
      ObjectSet("Lable_"+i,OBJPROP_ARROWCODE,140+i);
      ObjectSet("Lable_"+i,OBJPROP_WIDTH,2);
      ObjectSet("Lable_"+i,OBJPROP_COLOR,Green);
      ObjectMove("Lable_"+i, 0,(Time[0]+Period()*720), (WindowPriceMin()+shcala/2)-shcala/12*i);
               } 
      }

Aquí quiero destacar que sólo hay tres puntos activos si se utiliza este marcado, por lo que añadí una variable externa para posibilitar la elección de cuántos puntos utilizar para aplicar al gráfico, 3 o 5. El valor por defecto es 5, pero yo utilizo 3 teniendo en cuenta los puntos intermediarios para mí.

extern int point_kol=5;

Se utiliza el canal Fibo en lugar de la línea de tendencia dirigida al supuesto movimiento de precio. Eso proporciona a guía expandida del gráfico. El canal da la guía de las líneas de apoyo y resistencia en los niveles Fibo. En esta representación se pueden observar los objetivos en las intersecciones de la línea de tendencia y los niveles de Fibo, permite colocar algunas técnicas de trading.


Esta es su apariencia:


Se enciende el indicador y se mueve el botón hacia arriba.


El gráfico diario. Se han colocado los puntos y el indicador ha creado la línea de tendencia y los canales de Fibo.






Conclusión

Este tipo de representación de información en el gráfico permite implementar, por ejemplo, el análisis por las Ondas Elliot. Como se determinaron dos puntos extremos manualmente, se pueden recalcular las ondas internas utilizando un periodo de tiempo de un periodo inferior, y obtener un resultado para un análisis futuro comparándolo con las condiciones especiales. En ese momento, un usuario puede especificar un valor explícito del recálculo (impulso o correccional).

También quiero decir a los desarrolladores del lenguaje MQL4 que incluyan la función de recálculo de la ubicación de objetos de la ventana en píxeles para la vinculación directa al gráfico. La cuestión es que los métodos propuestos hasta el momento de acceso a la librería user32.dll y llamada de los parámetros de la ventana actual desde ahí, muestra el mensaje de que fata la user23.dll. Esto quiere decir que no existe una característica así en una entrega típica de Windows XP y MetaTrader 4. En esta implementación, tuve que rechazar la implementación de la posibilidad de análisis a través de un gráfico completo, al menos no moviendo los puntos manualmente.


El indicador (código fuente):

//|                                                 0_CTL.mq4 |
//|                                   Copyright © 2008, b2w@narod.ru |
//|                                             http://www.fibook.ru |
//+------------------------------------------------------------------+
#property copyright "b2w@narod.ru"
#property link      "http://www.fibook.ru"
#property indicator_chart_window
extern int point_kol=5;
string mon[]={"january", 
              "february", 
              "march", 
              "april", 
              "may", 
              "june", 
              "july", 
              "august", 
              "september", 
              "october", 
              "november", 
              "december"};
int i;
double coordinatsT[5], coordinatsP[5];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  string info="Marking  "+ Symbol()+" by "+Day()+""+mon[Month()-1]+""+Year()+" г."; 
   CreateUp (info);
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
 
// Check the presence of the "OnOff" button, create it in case of absence
int    obj_total=ObjectsTotal();
  string index;
  for( i=0;i<obj_total;i++)
    {
     index=ObjectName(i);
      string Lbl = StringSubstr (index, 0, 12);
            if (Lbl == "Lable_On_Off") string LblOnOff=index;
     }
if (LblOnOff!="Lable_On_Off") OnOff(Red, 10);  
// Check if the "OnOff" button is at its place
   
if (ObjectGet("Lable_On_Off",OBJPROP_XDISTANCE)>70||
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)<20)// if it is not there then
       { 
          OnOff(Red, 10);// we move the "OnOff" button to its place and delete all marks, channel, trend line
         for ( i=0; i<point_kol; i++)
            ObjectDelete("Lable_"+i);
            ObjectDelete("TRDLine");
            ObjectDelete("FIBOCanal");
         return;
         }  
                                               
if (ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)>10 && 
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)!=40) //If the button is moved upwards then
       {  
         OnOff(Green, 40); // Fix it up there
         CreatePoint();   // Create points
       }  
         
           for (i=0; i<point_kol; i++)
               {   
                 coordinatsT[i]=ObjectGet("Lable_"+i,OBJPROP_TIME1); // Read the coordinates
                 coordinatsP[i]=ObjectGet("Lable_"+i,OBJPROP_PRICE1);
               }   
     
         // if all points are carried to the chart then we draw the additional objects
         if  ((coordinatsT[0]<Time[0])&&
              (coordinatsT[1]<Time[0])&&
              (coordinatsT[2]<Time[0])&&
              (coordinatsT[3]<Time[0])&&
              (coordinatsT[4]<Time[0]))  
            {
            ObjectCreate("TRDLine", OBJ_TREND, 0,0,0);
            ObjectCreate("FIBOCanal", OBJ_FIBOCHANNEL, 0,0,0);
            ObjectMove ("TRDLine", 0,coordinatsT[0],coordinatsP[0]);
            ObjectMove ("TRDLine", 1,coordinatsT[point_kol-2],coordinatsP[point_kol-2]);
            ObjectMove ("FIBOCanal", 0,coordinatsT[0],coordinatsP[0]);
            ObjectMove ("FIBOCanal", 2,coordinatsT[point_kol-2],coordinatsP[point_kol-2]);
            ObjectMove ("FIBOCanal", 1,coordinatsT[point_kol-1],coordinatsP[point_kol-1]);
            }
   return(0);
  }
//+------------------------------------------------------------------+
 
void OnOff (color clr_, int h)
         {                                      
         ObjectCreate("Lable_On_Off",OBJ_LABEL,0,0,0);// Creation of the "OnOff" button
         ObjectSetText("Lable_On_Off",CharToStr(204) , 12, "Wingdings", clr_);
         ObjectSet(   "Lable_On_Off", OBJPROP_CORNER, 3);     // The angle of displaying on the chart
         ObjectSet(   "Lable_On_Off", OBJPROP_XDISTANCE, 10);
         ObjectSet(   "Lable_On_Off", OBJPROP_YDISTANCE, h);
         } 
return;          
 
void CreatePoint ()
      {
      double shcala=(WindowPriceMax()-WindowPriceMin());
      for( i = 0; i < point_kol; i++) // Create points
               {                                      
      ObjectCreate("Lable_"+i, OBJ_ARROW, 0,Time[Bars-1],Bid);
      ObjectSet("Lable_"+i,OBJPROP_ARROWCODE,140+i);
      ObjectSet("Lable_"+i,OBJPROP_WIDTH,2);
      ObjectSet("Lable_"+i,OBJPROP_COLOR,Green);
      ObjectMove("Lable_"+i, 0,(Time[0]+Period()*720), (WindowPriceMin()+shcala/2)-shcala/12*i);
               } 
      } 
 void CreateUp(string info) 
               {
                  ObjectCreate("TextAlerts", OBJ_LABEL, 0, 0, 0);  
                  ObjectSetText("TextAlerts",info , 16, "Times New Roman", Green);
                  ObjectSet("TextAlerts", OBJPROP_CORNER, 0);
                  ObjectSet("TextAlerts", OBJPROP_XDISTANCE, 20);
                  ObjectSet("TextAlerts", OBJPROP_YDISTANCE, 10);       
               }


Traducción del ruso hecha por MetaQuotes Software Corp.
Artículo original: https://www.mql5.com/ru/articles/1556

Archivos adjuntos |
0_CTL.mq4 (5.47 KB)
Vista del Análisis Técnico en el contexto de Sistemas de Control Automáticos (SCA), o "Vista inversa". Vista del Análisis Técnico en el contexto de Sistemas de Control Automáticos (SCA), o "Vista inversa".

El artículo demuestra una vista alternativa del análisis técnico, que se basa en los principios de la teoría del control automático moderno y el análisis técnico en sí. Es un artículo introductorio representando la teoría con algunas aplicaciones prácticas.

Método para encontrar los errores en el código mediante comentarios Método para encontrar los errores en el código mediante comentarios

El artículo describe un método de búsqueda de errores en el código de MQL4 basado en los comentarios. Este método ha mostrado ser útil en caso de que problemas originados durante la compilación y provocados por los errores en un código razonablemente grande.

Prueba visual de la rentabilidad de los indicadores y alertas Prueba visual de la rentabilidad de los indicadores y alertas

De lo que avisa un indicador de trading, o simplemente el método de su cálculo, se decide generalmente cuando los AEs de prueba usan estas alertas. Sin embargo, no siempre es posible/necesario/razonable escribir un AE para cada indicador. Se puede calcular rápidamente la rentabilidad de trading en alertas de otros indicadores, utilizando un indicador especial que recoge sus alertas él mismo y dibuja una imagen del trading ideal con ellas. Puede ayudar tanto a hacer una estimación visual de los resultados obtenidos y elegir rápidamente los mejores parámetros.

¿Dormir, o no dormir? ¿Dormir, o no dormir?

Se propone un uso alternativo de la función Sleep() en la realización de las pausas entre las acciones del AE. El método del que se habla aquí permite un uso inteligente del tiempo de máquina.