Erros, bugs, perguntas - página 3030

 
Andrey Dik:

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 ".
 
mktr8591:
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?

 
Andrey Dik:

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 )

 
Andrey Dik:

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:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   double buff [];
   if(prev_calculated == 0)
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
         return 0;
      }
   }
   else
   {
      if (rates_total == prev_calculated)
      {
         if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return 0;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich:

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.

 
Igor Makanu:

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.

 
Andrey Dik:

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".

 
Andrey Dik:

Andrei, pode fazer o código, por favor... mas não começa, eh? não posso lutar contra si.

Substituir

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return 0;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return 0;
   }

para

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

e testá-lo.

Razão: