mktr8591: Da ajuda:"O parâmetro pré_calculado na chamada de função contém o valor devolvidopela OnCalculate() na chamadaanterior ".
Sim, há muita coisa escrita na Ajuda, mas nem sempre compreensível, infelizmente (para não irritar os criadores), é preciso aprender, aprender, aprender. Mas este ramo existe porque por vezes são descobertas coisas que não são consistentes nem com a Ajuda nem com o senso comum, A100 é o nosso herói, porque vai mesmo onde ninguém escalaria por si próprio)))))
1. Obrigado a todos - Tornei-me um pouco mais literato em indicadores ))))
Andrew, se alguém não compreende as suas ideias (incluindo eu), isso significa apenas uma coisa: VOCÊ não desenha o quadro correctamente! Ou melhor, fá-lo de tal forma que muitas pessoas não o entendem ...
a verdade é mais importante. nem sempre é clara para todos, infelizmente.
podemos dar-nos ao luxo de calcular uma nova barra apenas uma vez e não em cada carrapato.
não podemos dar-nos a esse luxo porque o terminal não irá gerar dados históricos em linha na "TF superior".
em geral, é necessária aqui alguma suposição:
- ou construímos a OHLC dentro do indicador por nós próprios
- ou o próprio terminal constrói OHLC para nós
Se for este último, então devemos considerar que o terminal não sabe de todo como as TFs interagem, quem é um múltiplo do que e o que acontece no evento do"novo bar mas devemos deixar o terminal construir o TF necessário
Experimente este código no seu segundo indicador:
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
double buff [];
if(prev_calculated == 0)
{
if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
{
Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
return0;
}
}
else
{
if (rates_total == prev_calculated)
{
if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return0;
return rates_total;
}
}
ulong t = GetMicrosecondCount ();
...... далее без изменений
não podemos permitir-nos, uma vez que o terminal não irá gerar dados históricos em linha na "TF mais antiga".
em geral, é necessária aqui alguma suposição:
- Ou construímos a OHLC dentro do indicador por nós próprios
- ou o próprio terminal constrói OHLC para nós
se é este último, então temos de considerar que o terminal não sabe como a TF interage, quem é um múltiplo do que e o que acontece no evento do"novo bar
Experimente este código no seu segundo indicador:
O seu código irá fazer cálculos em cada tic, não é interessante para mim, nem sequer o vou executar. Preciso de fazer o cálculo apenas UMA vez em cada barra, em todos os indicadores utilizados, e não em cada tick de todos os indicadores utilizados.
O seu código vai martelar os cálculos em cada tick, não estou interessado, nem sequer o vou executar. Preciso de fazer o cálculo apenas UMA vez em cada barra, em todos os indicadores utilizados, e não em cada tick de todos os indicadores utilizados.
O meu código "tique por tique" apenas o seu indicador #1, onde escreveu :
if (rates_total == prev_calculated) return rates_total;
permitirá que o terminal construa o "prazo mais elevado" por si só.
Para mim - é "mais barato" do que fazer um recálculo completo do indicador № 1, que acontece no seu código ao sincronizar o histórico na "TF mais antiga".
devolvemos 0, declarando assim que ainda não contamos nada e que não vamos aumentar 1 na próxima barra.
ou seja, estaremos no bar onde começámos o pedido de dados do factor mais antigo até ao nosso regresso(rate_total)
Da ajuda:"O parâmetro pré_calculado na chamada de função contém o valor devolvido pela OnCalculate() na chamadaanterior ".
Sim, há muita coisa escrita na Ajuda, mas nem sempre compreensível, infelizmente (para não irritar os criadores), é preciso aprender, aprender, aprender. Mas este ramo existe porque por vezes são descobertas coisas que não são consistentes nem com a Ajuda nem com o senso comum, A100 é o nosso herói, porque vai mesmo onde ninguém escalaria por si próprio)))))
1. Obrigado a todos - Tornei-me um pouco mais literato em indicadores ))))
Andrew, se alguém não compreende as suas ideias (incluindo eu), isso significa apenas uma coisa: VOCÊ não desenha o quadro correctamente! Ou melhor, fá-lo de tal forma que muitas pessoas não o entendem ...
a verdade é mais importante. nem sempre é clara para todos, infelizmente.
Andrey Dik:
retorna 0, afirmando assim que ainda não contamos nada e prev_calc não será incrementado em 1 na próxima barra.
Então o retorno(taxas_total) deve aumentar prev_calc por taxas_total?
retorna 0, afirmando assim que ainda não calculámos nada e que a geleia prévia não aumentará 1 na próxima barra.
ele próprio zera no cálculo e queixa-se de que zera no mesmo )
podemos dar-nos ao luxo de calcular uma nova barra apenas uma vez e não em cada carrapato.
não podemos dar-nos a esse luxo porque o terminal não irá gerar dados históricos em linha na "TF superior".
em geral, é necessária aqui alguma suposição:
- ou construímos a OHLC dentro do indicador por nós próprios
- ou o próprio terminal constrói OHLC para nós
Se for este último, então devemos considerar que o terminal não sabe de todo como as TFs interagem, quem é um múltiplo do que e o que acontece no evento do"novo bar mas devemos deixar o terminal construir o TF necessário
Experimente este código no seu segundo indicador:
ele próprio reinicia o cálculo e queixa-se de que está a reiniciar )
Andrei, corre o código, por favor... mas não começa, eh? não posso lutar contra si.
não podemos permitir-nos, uma vez que o terminal não irá gerar dados históricos em linha na "TF mais antiga".
em geral, é necessária aqui alguma suposição:
- Ou construímos a OHLC dentro do indicador por nós próprios
- ou o próprio terminal constrói OHLC para nós
se é este último, então temos de considerar que o terminal não sabe como a TF interage, quem é um múltiplo do que e o que acontece no evento do"novo bar
Experimente este código no seu segundo indicador:
O seu código irá fazer cálculos em cada tic, não é interessante para mim, nem sequer o vou executar. Preciso de fazer o cálculo apenas UMA vez em cada barra, em todos os indicadores utilizados, e não em cada tick de todos os indicadores utilizados.
O seu código vai martelar os cálculos em cada tick, não estou interessado, nem sequer o vou executar. Preciso de fazer o cálculo apenas UMA vez em cada barra, em todos os indicadores utilizados, e não em cada tick de todos os indicadores utilizados.
O meu código "tique por tique" apenas o seu indicador #1, onde escreveu :
permitirá que o terminal construa o "prazo mais elevado" por si só.
Para mim - é "mais barato" do que fazer um recálculo completo do indicador № 1, que acontece no seu código ao sincronizar o histórico na "TF mais antiga".
Andrei, pode fazer o código, por favor... mas não começa, eh? não posso lutar contra si.
Substituir
para
e testá-lo.