pré_calculado - página 3

 
Alexey Viktorov:

A incrível capacidade de responder à pergunta errada...

Agora me explique o que aconteceria se:

1. 100 barras recalculadas, introduzidas em amortecedores de 0 a 99 inclusive (vamos considerar a direção como série temporal) o valor 1,03

2. De repente, a história foi carregada e pré-calculada tornou-se 0.

De qual barra no indicador o valor será 1,03?

  1. Para calcular a indexação como nas séries temporais, devemos colocar a bandeira AS_SERIES no OnInit() do buffer de indicadores - por isso prefiro usar o conceito "a barra mais à direita" - desta forma ninguém será informado erroneamente.
  2. Aqui está a resposta:
       if(prev_calculated==0)
         {
          //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
          for(int i=0;i<rates_total;i++)
             ExtBuffer[i]=1.01;
          return(rates_total);
         }
    em "prev_calculated==0" absolutamente todos os elementos do buffer indicador serão reinicializados com valores "1,01" e imediatamente sairão por "return(rates_total);". Ou seja, nenhum vestígio de valores anteriores de "1,03" permanecerá no buffer de indicadores.
 
Alexey Viktorov:

Explique melhor como se livrar do lixo naPRIMEIRA vez em que o indicador é iniciado.

É simples - esqueça o pré-cálculo, crie seu próprio duplicado sem o "buraco na lateral". Se você quiser acompanhar as barras previamente calculadas - como ofxsaber no exemplo.
fxsaber:
Nem uma muleta. É assim que eu faço.
Se uma simples bandeira for executada pela primeira vez / não é mais suficiente, substitua a bandeira pré-calculada por bool estático b_First_Run. Ou você pode colocar a inicialização do buffer no OnInint
 
Karputov Vladimir:
  1. Para considerar a indexação como em séries temporais, devemos colocar a bandeira AS_SERIES no OnInit() do buffer de indicadores - é por isso que prefiro usar a "barra mais à direita" - para que ninguém seja informado erroneamente.
  2. Aqui está a resposta:
       if(prev_calculated==0)
         {
          //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
          for(int i=0;i<rates_total;i++)
             ExtBuffer[i]=1.01;
          return(rates_total);
         }
    em "prev_calculated==0" absolutamente todos os elementos do buffer indicador serão reinicializados com valores "1,01" e imediatamente sairão por "return(rates_total);". Ou seja, nenhum vestígio de valores anteriores de "1,03" permanecerá no buffer de indicadores.

Portanto, este é o problema que deve ser resolvido. Eu não preciso de lixo (não realmente, mas interfere na exibição), mas preciso salvar os cálculos anteriores do indicador. Quando você inicia o indicador PRIMEIRA vez o buffer recebe lixo, e ao carregar o histórico tudo o que foi inserido nos buffers deve ser salvo ... e de preferência sem salvá-lo em um arquivo ou para a GV.


acrescentou:

Isto se destina a estimar o saque em tempo real a cada minuto. O Expert Advisor trabalha durante uma semana sem parar, e em vez da exibição semanal veremos apenas o último valor, que é visível mesmo sem o indicador.

 
Alexander Puzanov:
Se uma simples bandeira de primeira execução / não mais de primeira execução for suficiente, substitua a bandeira pré-calculada por bool estático b_First_Run. E você pode colocar a inicialização do buffer no OnInint
Não, os propósitos lá não são tão primitivos.
 
fxsaber:
Não, os objetivos lá não são tão primitivos.
Esta não é sua sugestão,Alexey Viktorov, pois entendo que só precisa zerar os amortecedores na primeira partida e não tocar em nada neles durante nenhuma paginação.
 
Alexey Viktorov:

Portanto, este é o problema que precisa ser resolvido. Não preciso de lixo (não preciso dele, mas interfere na exibição), mas preciso salvar os cálculos anteriores do indicador. Quando você inicia o indicador PRIMEIRA vez o buffer recebe lixo, e ao carregar o histórico tudo o que foi inserido nos buffers deve ser salvo ... e de preferência sem salvá-lo em um arquivo ou para a GV.


acrescentou:

Isto pretende ser uma estimativa em tempo real do saque a cada minuto. O Expert Advisor trabalha durante uma semana sem parar, e em vez de uma exibição semanal veremos apenas o último valor, que é visível mesmo sem indicador...

О! Agora faz mais sentido. Responderei à noite.
 
Alexander Puzanov:
Esta não é sua sugestão,Alexey Viktorov, como eu a entendo, você só precisa disto - zerar os amortecedores na primeira partida e não tocar em nada neles durante todo tipo de paginação.
Claro, comecei com a inicialização de buffers no OnInit(), mas algo estava errado. Não me lembro o quê e os inicializei no OnCalculate com pré-cálculo == 0
 

Verifique novamente o que acontece se as matrizes-tampão forem inicializadas no OnInit().

Mesmo quando o indicador é removido do gráfico e recém ajustado, NÃO TODOS, mas alguns amortecedores ainda têm os valores antigos. Nem mesmo exatamente o que eles eram antes, mas um desses valores se estende por várias barras.

 
Karputov Vladimir:
Oh! Isso agora faz mais sentido. Voltarei a falar com você hoje à noite.
Desculpe pelo atraso na resposta. A única maneira de salvar os valores calculados para este período de tempo é salvá-los em um arquivo. Isso requer sincronização - os dados devem ser distribuídos em suas barras ao ler a partir do arquivo. A forma mais lógica é sincronizá-la com o tempo de abertura da barra, mas pode haver algumas nuances: por exemplo, o tempo de abertura da barra (salvo em um arquivo) era 2016.09.05. 25:02, mas agora há uma barra no gráfico com tempo igual a 2016.09.05. 25:01.
 
Karputov Vladimir:
Desculpe pelo atraso na resposta. A única maneira de salvar os valores calculados para um determinado período de tempo é salvá-los em um arquivo. Você precisa cuidar da sincronização - para que ao ler do arquivo os dados sejam colocados em suas barras. A solução mais lógica é a sincronização de acordo com o tempo de abertura da barra, mas pode haver algumas sutilezas: por exemplo, o tempo de abertura da barra (salvo em um arquivo) era 2016.09.05. 25:02, mas agora temos uma barra no gráfico com o tempo igual a 2016.09.05. 25:01.

Ou talvez seja melhor chamar a atenção dos desenvolvedores para o problema da inicialização de buffers indicadores? Por que não existe tal problema no MT4? Talvez novamente não seja um entendimento completo? O problema é que mesmo após a inicialização obrigatória dos amortecedores depois de tirar um indicador de um gráfico em CADA um deles, nem todos os amortecedores contêm lixo e não podemos descarregá-los de lá...

Pessoalmente, não me importo com muletas, mas somente se estas muletas não forem muito complicadas e com efeito positivo. Mas escrever em um arquivo e depois lê-lo é uma migalha.

Razão: