Como obter parâmetros Abertos, Baixos, Altos, Fechados em MQL5? - página 4

 
Alexey Viktorov:

Nesse caso, sem ambigüidade, CopyRates do primeiro bar 10s. E não para ser chamado a cada carrapato, mas o suficiente ao aparecimento de um novo bar.

Como posso saber se um novo bar apareceu sem o CopyRates? É preciso pegar primeiro o novo evento do bar. Sem CopyRates é possível? Estou um pouco confuso).

É isso que significa, eu nunca lidei com este tema no MT5. Por favor, entenda))).

 
Alexey Viktorov:

Oh, Vladimir. Embora eu não tenha dito nada, mas infelizmente, não fiz nenhuma reserva. Se precisarmos apenas de preço ou tempo de abertura, por exemplo, não há necessidade de usar CopyRates(), neste caso, CopyOpen ou iOpen é suficiente... respectivamente CopyTime ou iTime. Ela é escolhida de acordo com suas preferências religiosas.

E vou acrescentar minha advertência: em termos de custos de desempenho, não há diferença apreciável. Assim, apenas os preconceitos religiosos permanecem.

O fxsaber estava verificando o custo do CopyRates() - é mais caro do que obter a propriedade necessária separadamente. Não se aplica à situação em que precisamos obter todos os preços de uma só vez.

 
Реter Konow:
E como eu sei que um novo bar apareceu sem o CopyRates? É preciso pegar primeiro o novo evento do bar. É possível fazer isso sem o CopyRates? Estou um pouco confuso).

Sem prestar atenção a nada, monitorar o aparecimento de um novo bar e chamar o CopyRates

Há muitas funções e maneiras diferentes de detectar um novo bar no site.

 
Реter Konow:

Como posso saber se um novo bar apareceu sem o CopyRates? É preciso pegar primeiro o novo evento do bar. Sem CopyRates é possível? Estou um pouco confuso).

É isso que significa, nunca lidou com este tema no MT5. Por favor, entenda)).

A maneira mais fácil é comparar o tempo de abertura do bar atual. Se não for igual ao anteriormente memorizado - tenha uma nova barra - faça o que precisa ser feito na nova barra e memorize desta vez para a próxima verificação.

 
Alexey Viktorov:

Sem prestar atenção a nada, rastreamos o aparecimento de um novo bar e chamamos o CopyRates

Há muitas funções e maneiras diferentes de definir uma nova barra no site.

O aparecimento de um novo bar no MT5 não está ligado ao início do minuto. Não é de modo algum cronometrada. Há um senão. Com que precisão podemos entender a aparência de uma nova barra baseada apenas em carrapatos? Você ainda precisa se referir às séries cronológicas. Dificilmente seria possível de outra forma. Embora... Não tenho 100% de certeza.
 
Artyom Trishkin:

fxsaber fez uma verificação de custo CopyRates() - é mais caro do que obter a propriedade necessária separadamente. Isto não se aplica à situação em que você precisa obter todos os preços de uma só vez.

Com o devido respeito ao fxsaber, prefiro não prestar atenção a tal diferença. É por isso que eu disse que" não há diferençanotável", e não estou interessado na diferença nas iterações do 1e6. Não é como se estivéssemos escrevendo um atirador onde se possa disparar balas 1e6 de cada vez.
 
Artyom Trishkin:

A maneira mais fácil é comparar o tempo de abertura do bar atual. Se não for igual ao anteriormente memorizado - tenha uma nova barra - faça o que precisa ser feito na nova barra e memorize desta vez para a próxima verificação.

Então, isso significa chamar a CopyRates em cada tic? Caso contrário, como sabemos que o tempo de abertura do bar atual mudou?
 
Реter Konow:
Então, você chama os CopyRates em cada carrapato? Caso contrário, como você saberia que o tempo de abertura do bar atual mudou?

você pode tanto classe CNewbar, ou procurar no fórum por NewBar

SZZ: artigo completo!https://www.mql5.com/ru/articles/159



Alexey Viktorov:

Igor, você precisa ir para a primeira série. Eles ensinam as cartas lá e depois que você aprender, entenderá a diferença entre CopyRates e CopyBuffer.

Aqui está uma sugestão melhor para resolver este problema SEM taxas de cópia


OK, o habitual...oops, oops...e não uma única linha de código ))))

Citei meu exemplo para mostrar que nem sempre é conveniente (e raramente necessário) obter um conjunto de OHLC consecutivos. Em tarefas práticas, geralmente precisamos obter uma seleção de valores OHLC de diferentes barras (os indicadores não são levados em conta)

Ok, cuidado!

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
Então, então, em cada carrapato telefonar CopyRates? Caso contrário, como sabemos que o tempo de abertura do bar atual mudou?

Sim, a cada tique, verificamos o tempo:

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int index)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+

E, em poucas palavras, é assim:

static datetime last_time=0;
datetime time_current=Time(Symbol(),PERIOD_CURRENT,0);
if(time_current==0)
  return;
if(time_current!=last_time)
  {
   // Новый бар или первый запуск (для контроля первого запуска можно сделать флаг - чтобы не обрабатывать его как новый бар)
   // делаем что нужно на новом баре
   last_time=time_current;
  }

Eu só escrevi na minha mão - para mostrar a idéia, não a precisão da escrita

 
Реter Konow:
Então, a cada carrapato devemos chamar a CopyRates? Caso contrário, como saber que o tempo de abertura do bar atual mudou?

if(prevTime!=iTime(...)))

{

// tempo atual de abertura do bar alterado

}

prevTime=iTime(...);