Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1284

 
Youri Lazurenko:

Mais uma vez obrigado, agora a linha é como uma linha, agradável de ver. ApenasObjectDelete(0, nome); é necessário, caso contrário uma vez desenhada a linha não é redesenhada. O mesmo em mql4, acabei de me esquecer.

Eu tê-lo-ia feito

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
    if(!ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0))
     {
      Print("Ошибка в создании линии");
      return (false);
     }
  ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
  ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
  ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 0, price1);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 1, price2);

  ChartRedraw();
  return(true);
 }
 
Vladimir Karputov:

Que disparate. O objecto gráfico desenhado move-se suavemente. O exemplo é dado na ajuda para cada objecto (para a linha horizontalOBJ_HLINE).

Pode também mudar qualquer propriedade para um objecto já desenhado: cor, estilo , cheiro ...

É feito manualmente, não discuto. Mas o Expert Advisor traça linhas de tendência por pontos DeMark. Com a função ObjectDelete(0, nome); quando os pontos mudam, a antiga linha de tendência é removida e uma nova linha é desenhada. Sem esta função, as primeiras linhas traçadas já não são redesenhadas. Isto não é um disparate, é um facto.

Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

Manualmente, não discuto. O Conselheiro Especialista, por outro lado, traça linhas de tendência por pontos de DeMark. Com a função ObjectDelete(0, nome); quando os pontos mudam, a antiga linha de tendência é removida e uma nova linha é desenhada. Sem esta função, as primeiras linhas traçadas já não são redesenhadas. Isto não é um disparate, é um facto.

Porque não lê a ajuda? E dê o exemplo.

 
Alexey Viktorov:

Eu faria isso.

Obrigado, mas vou deixar a minha variante, ela funciona. Embora vá tentar em vez de ObjectDelete(0, nome);.

 ChartRedraw();
Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Leia a ajuda, pelo amor de Deus! E dê o exemplo.

Já o li. Só você está indignado e eu estou a escrever a partir da prática. Outra coisa é usar ChartRedraw() em vez de ObjectDelet(), eu não discuto e vou verificar isso. Esta é a única coisa que precisa de apontar, referindo-se ao exemplo.

 
Youri Lazurenko:

Li o resumo. Só vós estais indignados com as palavras e eu estou a escrever a partir da prática. Outra coisa é usar ChartRedraw() em vez de ObjectDelet(), eu não discuto e verifico. Esta é a única coisa que preciso de salientar, referindo-me ao exemplo.

As pessoas costumam pedir conselhos neste tópico e quando os recebem, ouvem-nos. No mínimo, leia a ajuda e aplique exemplos. Por favor, se não quiser ouvir os outros, não pergunte nada.

 
Youri Lazurenko:


Um exemplo de como se pode alterar qualquer propriedade do objecto gráfico"Linha Horizontal" na mosca - não é necessário apagar o objecto para o fazer, só é necessário alterar a propriedade.

C:\Users\barab\OneDrive\Изображения\Screenpresso\2021-02-01_16h09_06.gif

Código:

//+------------------------------------------------------------------+
//|                       OBJ_HLINE change properties on the fly.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string          InpName="HLine";     // Line name
//--- an array for storing colors contains 14 elements
color colors[]=
  {
   clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
   clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- the number of colors
   int size=ArraySize(colors);
//--- get a random value
   int number=MathRand();
//--- get an index in the col[] array as a remainder of the integer devision
   int i=number%size;
//--- set line color
   ObjectSetInteger(ChartID(),InpName,OBJPROP_COLOR,colors[i]);
   ChartRedraw();
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Arquivos anexados:
 
Youri Lazurenko:

Obrigado, mas vou deixar a minha variante, ela funciona. Embora eu vá tentar em vez de ObjectDelete(0, nome);.

Decisão completamente errada. A eliminação de um objecto gráfico e a actualização de um gráfico não se substituem de forma alguma.

O meu exemplo verifica primeiro se existe um objecto, em particular, uma tendência com o nome tfyu, que é o nome no layout do teclado russo)). Então, se não existir, a tendência é desenhada. Se a tentativa de desenho não for bem sucedida, a mensagem é exibida e a função é abandonada com retorno falso.

Tudo depois disso, independentemente de a tendência já estar presente ou ter acabado de ser desenhada, são-lhe atribuídos os parâmetros especificados, tempo e preços coordenados, tipo, espessura e qualquer outra coisa que possa acrescentar. Depois disso, o gráfico é actualizado e a função volta a ser verdadeira.

Pela rapidez de execução, será menos dispendioso verificar a presença da tendência do que eliminá-la e desenhar uma nova.

Mas... a decisão final cabe-lhe a si e se gosta de coçar a orelha esquerda com o dedo mindinho direito, não tenho o direito de o impedir.

 
Youri Lazurenko:

E de volta a traçar a linha de tendência. Se precisar de código.

Código muito mau.

 
Alexey Viktorov:

Eu faria isto.

Eu teria feito isto:

void CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
   {
    ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0);
    ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
    ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
    ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
   }
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 0, price1);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 1, price2);

  ChartRedraw();
 }
Razão: