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))).
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.
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.
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.
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.
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?
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)
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
//+------------------------------------------------------------------+//| Возвращает время указанного бара |//+------------------------------------------------------------------+datetime Time(conststring symbol_name,constENUM_TIMEFRAMES timeframe,constint index)
{
datetime array[];
return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
}
//+------------------------------------------------------------------+
E, em poucas palavras, é assim:
staticdatetime 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
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))).
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.
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.
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.
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.
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.
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, 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
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!
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:
E, em poucas palavras, é assim:
Eu só escrevi na minha mão - para mostrar a idéia, não a precisão da escrita
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(...);