Discusión sobre el artículo "Cómo trabajar con líneas usando MQL5"

 

Artículo publicado Cómo trabajar con líneas usando MQL5:

En este artículo, hablaremos sobre cómo trabajar con las líneas más importantes, como las líneas de tendencia, apoyo y resistencia, usando las herramientas de MQL5.

Las líneas de tendencia pueden usarse en el trading para abrir órdenes según una tendencia. Si se forma una línea de tendencia alcista, podemos esperar que el precio descienda hacia esta línea de tendencia y rebote hacia arriba, en cuyo caso podremos colocar una orden de compra en esta línea de tendencia. Por el contrario, si vemos una línea de tendencia bajista en el gráfico, podemos suponer que el precio subirá hasta esta línea de tendencia para luego rebotar hacia abajo. En tal caso, podremos colocar una orden de venta en la línea de tendencia bajista.

Más abajo mostramos una línea de tendencia alcista:

 Línea de tendencia alcista

La figura anterior muestra un movimiento ascendente. Si unimos los tres puntos mínimos con una línea, veremos que están en una misma línea que apunta hacia arriba.

Autor: Mohamed Abdelmaaboud

 
pero ¿por qué ObjectCreate(_Symbol, "supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low, pArray[0].time,pArray[0].low); ?
enough ObjectCreate(_Symbol, "supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low);
 

Este es un artículo interesante para los principiantes, pero para el trabajo correcto de los Asesores Expertos se requiere una pequeña modificación de los códigos.

Saludos, Vladimir.

//+------------------------------------------------------------------+
//|Sistema UpwardTrendline.mq5
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pLow[];
   ArraySetAsSeries(pLow,true);
   int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow);
   if(copy_low>0)
     {
      int candleLow = ArrayMinimum(pLow,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"UpwardTrendline");
      ObjectCreate(0,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,
                   pArray[0].time,pArray[0].low);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|DownwardTrendline System.mq5
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);
   if(copy_high>0)
     {
      int candleHigh = ArrayMaximum(pHigh,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"DnwardTrendline");
      ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,
                   pArray[0].time,pArray[0].high);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|Support Line System.mq5
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pLow[];
   ArraySetAsSeries(pLow,true);
   int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow);
   if(copy_low>0)
     {
      int candleLow = ArrayMinimum(pLow,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"supportLine");
      ObjectCreate(0,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low,
                   pArray[0].time,pArray[0].low);
      ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);
      ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|Sistema de línea de resistencia.mq5
//+------------------------------------------------------------------+
void OnTick()
  {
   int candles=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);
   if(copy_high>0)
     {
      int candleHigh = ArrayMaximum(pHigh,0,candles);
      MqlRates pArray[];
      ArraySetAsSeries(pArray,true);
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
      ObjectDelete(0,"resistanceLine");
      ObjectCreate(0,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,
                   pArray[0].time,pArray[0].high);
      ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);
      ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);
      ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
     }
  }
//+------------------------------------------------------------------+
 
MrBrooklin #:

Interesante artículo para principiantes, pero para que los EAs funcionen correctamente hay que retocar un poco los códigos.

Saludos, Vladimir.




Gracias por su amable comentario, lo revisaré.
 
La forma en que has dibujado la línea es muy bonita. Una observación sobre las líneas de tendencia: no sirve de mucho que el segundo punto de anclaje sea siempre la barra de índice 0, porque con cada nueva barra la línea de tendencia se actualizará y por tanto la línea de tendencia no servirá de nada. Lo ideal sería definir el segundo punto de anclaje en función de un criterio concreto. Por ejemplo, la segunda barra con el precio más alto, con una distancia mínima de 30 barras respecto a la primera, o tomar la barra con el precio más alto del día siguiente, y así sucesivamente.

Enhorabuena por el artículo.
 
Andrei Pereira las líneas de tendencia: no sirve de mucho que el segundo punto de anclaje sea siempre la barra de índice 0, porque con cada nueva barra la línea de tendencia se actualizará y por tanto la línea de tendencia no servirá de nada. Lo ideal sería definir el segundo punto de anclaje en función de un criterio concreto. Por ejemplo, la segunda barra con el precio más alto, a una distancia mínima de 30 barras de la primera, o tomar la barra con el precio más alto del día siguiente, y así sucesivamente.

Enhorabuena por el artículo.

Gracias por tu comentario, es una buena observación.

 
Mohamed Abdelmaaboud #:
Gracias por el amable comentario, lo revisaré.

Han pasado casi 10 meses y el autor del artículo no ha hecho ningún cambio en sus códigos. ))

Saludos, Vladimir.

 
MrBrooklin #:

Han pasado casi 10 meses, y el autor del artículo no ha hecho ningún cambio en sus códigos. ))

Saludos, Vladimir.

Gracias por tu recordatorio y contribución. Se enviará para su edición.