Discussão do artigo "Como trabalhar com linhas usando MQL5"

 

Novo artigo Como trabalhar com linhas usando MQL5 foi publicado:

Neste artigo, falaremos sobre como trabalhar com os gráficos de linhas mais importantes, como linhas de tendência, suporte e resistência, usando as ferramentas da linguagem MQL5.

As linhas de tendência são uma ferramenta útil na negociação para colocar ordens na direção da tendência. Se uma linha de tendência ascendente estiver formada, é provável que o preço teste essa linha por cima antes de subir, permitindo colocar uma ordem de compra nesse ponto. Por outro lado, em caso de uma linha de tendência descendente, o preço pode subir para testar essa linha antes de cair, possibilitando uma ordem de venda na linha de tendência de baixa.

Abaixo está uma linha de tendência de alta:

Linha de tendência ascendente

A figura acima mostra um movimento ascendente. Se você conectar os três pontos mínimos com uma linha, descobrirá que eles estão em uma mesma linha que aponta para cima.

Autor: Mohamed Abdelmaaboud

 
mas por que ObjectCreate(_Symbol, "supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low, pArray[0].time,pArray[0].low); ?
bastante ObjectCreate(_Symbol, "supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low);
 

Esse é um artigo interessante para iniciantes, mas para o trabalho correto dos Expert Advisors é necessária uma pequena modificação dos códigos.

Atenciosamente, 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);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|Sistema DownwardTrendline.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);
     }
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|Sistema de linha de suporte.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 linha de resistência.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 #:

Artigo interessante para iniciantes, mas para que os EAs funcionem corretamente, é necessário um pequeno ajuste nos códigos.

Saudações, Vladimir.




Obrigado por seu comentário gentil, vou analisá-lo.
 
Muito legal a forma como você fez para desenhar a linha. Uma observação quanto as linhas de tendência: Não tem muita serventia se o segundo ponto de ancoragem for sempre a barra de índice 0, pois a cada nova barra a linha de tendência se atualizará e dessa forma a linha de tendência não terá nenhuma utilidade. O ideal seria definir o segundo ponto de ancoragem a partir de um critério específico. Por exemplo, a segunda barra com o maior preço, com distância mínima de 30 barras em relação à primeira, ou então pegar a barra com maior preço do dia seguinte, e assim por diante.

Parabéns pelo artigo.
 
Andrei Pereira #:
Muito legal a forma como você fez para desenhar a linha. Uma observação quanto as linhas de tendência: Não tem muita serventia se o segundo ponto de ancoragem for sempre a barra de índice 0, pois a cada nova barra a linha de tendência se atualizará e dessa forma a linha de tendência não terá nenhuma utilidade. O ideal seria definir o segundo ponto de ancoragem a partir de um critério específico. Por exemplo, a segunda barra com o maior preço, com distância mínima de 30 barras em relação à primeira, ou então pegar a barra com maior preço do dia seguinte, e assim por diante.

Parabéns pelo artigo.

Obrigado pelo seu comentário, é uma boa observação.

 
Mohamed Abdelmaaboud #:
Obrigado pelo comentário gentil, vou revisá-lo.

Já se passaram quase 10 meses e nenhuma alteração em seus códigos foi feita pelo autor do artigo. ))

Atenciosamente, Vladimir.

 
MrBrooklin #:

Quase 10 meses se passaram, e o autor do artigo não fez nenhuma alteração em seus códigos. ))

Saudações, Vladimir.

Obrigado por seu lembrete e contribuição. Ela será enviada para edição.