Erros, bugs, perguntas - página 1805

 
Alexey Kozitsyn:
@Slawa, por favor clarifique, existem restrições à escrita dos amortecedores indicadores fora da função OnCalculate()? No caso de buffers de escrita nas funções OnTimer(), OnBookEvent(), OnChartEvent(), será que tudo será sempre escrito correctamente?

Não há restrições explícitas. Pode experimentá-lo.

Mas pode deparar-se com uma redistribuição de buffers no momento de adicionar uma nova barra (a redistribuição é feita com uma reserva, por isso não em cada nova barra).

PS embora não. Todo o processamento está num só fio, pelo que não deve haver colisões. Experimente
 
Slawa:
Não há limitações óbvias. Experimente-o.

Mas pode encontrar uma redistribuição tampão no momento de adicionar nova barra (a redistribuição é feita com alguma reserva, por isso não em cada nova barra)

Aqui, mais detalhes, por favor. O que é a atribuição, como lidar com ela?

Apenas escrevi a pergunta porque reparei em "soluços" num novo bar. E estes soluços reiniciam os valores tampão = 0 (com o valor vazio que eu defini explicitamente - EMPTY_VALUE). Até agora, ainda não consegui apanhar este momento. Por vezes o indicador apenas "salta" e restabelece imediatamente o normal, outras vezes apenas "congela". Quando colados, os valores não são escritos no ficheiro e os amortecedores não são desenhados. Os amortecedores são escritos para OnBookEvent().

O mesmo código funciona bem em OnCalculate(), mas OnCalculate() não permite recolher todos os valores de Interesse Aberto e outros parâmetros de troca.

Só pode ser resolvido através de comutação TF. Sim, 5-7 mesmos indicadores funcionando ao mesmo tempo, escrevendo dados diferentes.

Adicionado:

Sim, também notou hoje exactamente a mesma coisa ao ligar o terminal. Tudo apenas pendurado, todos os amortecedores, todos os valores têm zeros, nenhum histórico (escrito para arquivar) foi dado pelo indicador. Por outras palavras, tudo simplesmente desligou. O mercado ainda se encontrava fechado. Eu mudei TF - a história voltou, mas mais uma vez, à questão da necessidade de um carimbo de tempo para os valores da SESSÃO: o último valor conhecido no momento do encerramento do terminal foi registado! A sincronização da história foi bem sucedida, sem erros. Mas o TimeCurrent() devolveu um valor erróneo (cerca de 21:03). O tempo real deste valor é 23:49:59. Em suma, algum tipo de tristeza.

 
Alexey Kozitsyn:

Aqui, mais detalhes, por favor. O que é a atribuição, como deve ser tratada?

Apenas escrevi a pergunta porque reparei em "soluços" num novo bar. E estes soluços valores tampão zero = 0 (com o valor vazio definido explicitamente por mim - EMPTY_VALUE). Até agora, ainda não consegui apanhar este momento. Por vezes o indicador apenas "salta" e restabelece imediatamente o normal, outras vezes apenas "congela". Quando colados, os valores não são escritos no ficheiro e os amortecedores não são desenhados. Os amortecedores são escritos para OnBookEvent().

O mesmo código funciona bem em OnCalculate(), mas OnCalculate() não permite recolher todos os valores de Interesse Aberto e outros parâmetros de troca.

Só pode ser resolvido através de comutação TF. Sim, 5-7 mesmos indicadores estão a funcionar simultaneamente, escrevendo dados diferentes.

É fácil. Chega o primeiro tique de um novo bar. O tampão é atribuído para 1000 barras e está completamente cheio.

Reatribuímos o buffer para 1250 barras e copiamos 1000 barras do buffer anterior para o novo buffer. Colocar o novo tampão no lugar do antigo tampão, apagar o antigo tampão. Acrescentamos a barra 1001.

O que quer dizer com "o que fazer com ele"?

Tenha em mente que todos os indicadores de um símbolo são contados sequencialmente, um após o outro, num só fio. Se um indicador abranda, todo o fio do processamento de símbolos também abranda
 
Slawa:
Fácil. Chega o primeiro tique do novo bar. O tampão é atribuído para 1000 barras e está completamente cheio.

Realocamos o tampão para 1250 barras e copiamos 1000 barras do tampão antigo para o novo tampão. Colocar o novo tampão no lugar do antigo tampão, apagar o antigo tampão. Acrescentamos a barra 1001.

O que quer dizer com "o que fazer com ele"?

Tenha em mente que todos os indicadores de um símbolo são contados sequencialmente, um após o outro, num só fio. Se um indicador abranda, todo o fio do processamento de símbolos também abranda
Estou ciente disso. E a redistribuição, tanto quanto percebi, afecta OnBookEvent() mais forte do que OnCalculate()?
 
Alexey Kozitsyn:
Estou ciente da coisa do fio único. E a redistribuição, tal como a entendo, afecta a OnBookEvent() mais do que a OnCalculate()?
A redistribuição é feita quando chega um novo tick. Imediatamente após a chegada de uma nova carraça, a OnCalculate é chamada fora de rota. E só depois disso é continuado o processamento dos eventos que foram recebidos pelo indicador

Mas, até o indicador (qualquer indicador neste símbolo!) terminar os seus cálculos (OnCalculate, OnTimer, OnChartEvent, OnBookEvent), o novo tick não chegará para ser processado.
 
Slawa:
A redistribuição é feita com uma nova carraça. Imediatamente após a chegada de um novo tick fora da fila , OnCalculate é chamado. E só depois disso é que o processamento dos eventos, recebidos pelo indicador, continua

Contudo, até que o indicador (qualquer indicador neste símbolo!) termine os seus cálculos (OnCalculate, OnTimer, OnChartEvent, OnBookEvent), um novo tick não chegará para ser processado.

Além disso, tanto quanto sei, os indicadores num símbolo são calculados sequencialmente, ou seja, se eu atirei o indicador i1, i2, i3 numa fila, então serão calculados na mesma ordem?

Adicionei agora um MAKD padrão para testes; é o último da lista. Vou ver se abranda quando uma nova barra é formada.

 
Alexey Kozitsyn:

Além disso, tanto quanto sei, os indicadores num símbolo são calculados sequencialmente, ou seja, se eu atirei o indicador i1, i2, i3 numa fila, então serão calculados na mesma ordem?

Agora adicionei um MAKD padrão para testes, é o último da lista. Vou ver se fica pendurado quando uma nova barra é formada.

No início, sim, o cálculo estará na mesma ordem.

Mas se eliminar diferentes indicadores, a sequência de recálculo pode surpreendê-lo. Portanto, não confie na sequência
 
Slawa:
No início, sim, o cálculo será na mesma sequência.

Mas se eliminar indicadores diferentes, a sequência de recálculo pode surpreendê-lo. Portanto, não confie na sequência.
Isto é necessário para verificar, se os meus indicadores estiverem pendurados, se o último, o MAKD padrão, será calculado. Todas as minas vão antes do MACD.
 
Slawa:

Era disto que eu estava a falar:

Uma nova barra foi formada em GOLD-3.17, todos os meus indicadores calculados em OnBookEvent() por este símbolo todos os valores actuais foram zerados. De acordo com a lógica do indicador, no momento da formação de uma nova barra, os amortecedores não são zerados, e o valor actual é-lhes imediatamente escrito. MACD não é zerada. O registo está vazio, isto significa que não houve dessincronização, todos os valores devem estar correctos. Neste caso, a falha durou cerca de 5 segundos. Ontem estive a apanhar falhas durante vários minutos de cada vez.

Todas as outras personagens estavam bem. Mais uma vez, a lógica do indicador não reinicia os valores para 0! Assim, a questão é: ao redistribuir novos artigos, em teoria, deve conter lixo. Mas aqui 0,0 e pende...

Sim, mais uma coisa: se um indicador estivesse pendurado, os outros deveriam ter mantido os seus valores! Mas todos eles, todos de uma só vez, zerados. Há alguma situação em que isto possa acontecer?
 

Ocorreu um desligamento semelhante na BR-3.17:

@Slawa alguma ideia de que forma cavar? Talvez haja uma melhor forma de recolher dados de intercâmbio e de os exibir?