Como deve ser o preço do vidro? - página 13

 
Реter Konow:

1. O programa está escrito em dois idiomas. A linguagem de base é MQL5 e, além disso, minha linguagem de marcação.

2. Distribuído da mesma forma que o enviado. Quero dizer, nas células certas. É difícil explicar em palavras. Eu lhe enviarei o código mais tarde. É claro que tive que suar para colocar os dados nas células certas, mas esta questão foi resolvida.

3. Acrescentarei tudo o que será solicitado e que tenha sentido e importância.

mql5 é bom porque não haverá problemas com a compatibilidade e legibilidade do código.
E como eles são enviados, não sabemos que tipo de dados você tomou como base.
Stream, cast, Json.
Se a classificação for feita em um loop, eu renunciaria a loops.
Qualquer laço tem tempo de processamento, e isso é latência.
Há apenas cerca de 40 níveis de preços no secador, para cima e para baixo.
Portanto, para cada nível eu escreveria sua própria variável com o valor desejado, eliminando o laço.

 
Roman:

mql5 é bom, não haverá problemas com a compatibilidade e legibilidade do código.
E como eles são enviados, não sabemos que tipo de dados você tomou como base.
Stream, cast, Json.
Se a classificação for feita em um loop, eu renunciaria a loops.
Qualquer laço tem tempo de processamento, e isso é latência.
Há apenas cerca de 40 níveis de preços no secador, para cima e para baixo.
Portanto, para cada nível eu escreveria sua própria variável com o valor desejado, eliminando o laço.

Veja o código na página anterior.

Centralizo os dados recebidos em relação à célula central do copo. O preço mais próximo ao pedido é colocado na cela no centro e depois para cima do resto dos preços em ordem ascendente. O mesmo para os preços de licitação e suas ofertas.

 
Roman:

mql5 é bom, não haverá problemas com a compatibilidade e legibilidade do código.
E como eles são mapeados, não sabemos que tipo de dados você tem.
Stream, cast, Json.
Se a classificação for feita em um loop, eu renunciaria a loops.
Qualquer laço tem tempo de processamento, e isso é latência.
Há apenas cerca de 40 níveis de preços no secador, para cima e para baixo.
Portanto, para cada nível eu escreveria sua própria variável com o valor desejado, eliminando o laço.

Não sei como resolver o problema de distribuir os dados recebidos sem um ciclo. Você pode me dar uma dica?

Às vezes, há mais de 40 níveis de preços entrando. Alguns deles não cabem no copo. Então, eu fiz uma matriz receptora de 100 células. É impossível exibir tudo no colhedor, mas pode ser solicitado no motor.

 
Roman:

...
Por este motivo, prescreveria para cada nível uma variável com o valor necessário, excluindo o ciclo.

Os dados vêm em uma ordem em ordem do preço mais alto ao mais baixo. Não há limite para a quantidade de dados. Pode haver 60 preços com lances, 30 para cada lado, ou pode haver 30 preços, todos com preços superiores ao pedido ou inferiores ao lance. Portanto, sem um ciclo, não há como resolver o problema.

 
Реter Konow:

Os dados vêm em uma ordem em ordem do preço mais alto ao mais baixo. Não há limite para a quantidade de dados. Pode haver 60 preços com lances, 30 para cada lado, ou pode haver 30 preços, todos com preços superiores ao pedido ou inferiores ao lance. Portanto, não é possível resolver o problema sem um ciclo.

Se a indexação dos elementos recebidos na matriz não estiver quebrada, podemos pegar cada elemento da matriz sem o loop e atribuí-lo à nossa variável.
E já atribui cada variável contendo o valor a seu próprio nível de célula.
Ou, você pode atribuir cada elemento da matriz a um nível de uma vez.
Então também excluímos variáveis, mas dados não inicializados não são uma boa prática de codificação.

 

Surgiu outra idéia.
Para dividir o conjunto recebido em duas arrays Bid e Ask
E pense em como usar a função CopyArray().

Após implementar os dois métodos, podemos medir a velocidade de processamento.
E qual deles dará o melhor resultado, e deixá-lo.
 
Roman:

Se a indexação dos elementos recebidos na matriz não estiver quebrada, podemos pegar cada elemento da matriz sem o loop e atribuí-lo à nossa variável.
E já toda variável contendo o valor é atribuída ao nível da célula.
Ou, você pode atribuir cada elemento da matriz a um nível de uma vez.
Então também excluímos variáveis, mas dados não inicializados não são uma boa prática de codificação.

Infelizmente, não há preços pedidos na matriz e sua indexação não aponta para células específicas no tumbler. Os dados vêm de um preço mais alto para um preço mais baixo, mas é aí que a ordem termina. Pode haver um ponto entre os preços, ou pode ser 10 ou 153. O controle deslizante mostra os últimos volumes de pedidos modificados em toda a gama em que estão localizados. Se um preço superior a 150 pips do asc mudou o número de ordens de limite, ele aparecerá na matriz. Portanto, não há ordem na matriz a não ser de maior para menor e os dados não podem ser rearranjados a não ser em um loop.

 
Реter Konow:

Infelizmente, não há indexação na matriz. Os dados vêm de um preço mais alto para um mais baixo, mas é aí que o pedido termina. Pode haver um ponto entre os preços, ou pode haver 10 ou 153. A pilha mostra os últimos volumes de pedidos modificados para toda a gama na qual eles estão localizados. Se um preço superior a 150 pips do asc mudou o número de ordens de limite, ele aparecerá na matriz. Portanto, não há ordem na matriz a não ser de mais para menos, e os dados não podem ser encomendados a não ser em loop.

Há indexação por elementos de matriz na matriz receptora.
Os dados vêm de preço mais alto para mais baixo, são sempre ordenados sequencialmente, não são?
Portanto, escolha qualquer elemento necessário da matriz por índice, mas sem o laço.
E se for impossível capturar um Bid/Ask melhor por causa da mudança no tamanho dos dados recebidos,
então talvez devêssemos pensar em CopyArray()

 
Roman:

Há indexação por elementos de matriz na matriz receptora.
Os dados vêm de um preço mais alto para um mais baixo, eles são sempre ordenados sequencialmente, não são?
Portanto, selecione qualquer elemento desejado da matriz receptora por índice, mas sem o laço.

Arranjado sequencialmente. Mas:

  1. Podem entrar mais dados do que as células de copo.
  2. Não há uma ordem clara entre os preços. Pode haver um preço acima do pedido e 7 preços abaixo da oferta.
  3. Pode haver um espaçamento desigual entre os preços. Pode haver 1 ponto entre o primeiro e o segundo, e 18 pontos ou 1008 pontos entre o segundo e o terceiro.
É por isso que você não saberá qual o preço mais próximo ao Ask e qual é o mais próximo ao Bid, de modo que você não saberá qual preço deve estar no meio do pacote sem fazer o ciclo.
 
Реter Konow:

Arranjado sequencialmente. Mas:

  1. Podem entrar mais dados do que as células de copo.
  2. Não há uma ordem clara entre os preços. Pode haver um preço acima do pedido e 7 preços abaixo da oferta.
  3. Pode haver um espaçamento desigual entre os preços. Pode haver 1 pip entre o primeiro e o segundo, e 18 pips ou 1008 pips entre o segundo e o terceiro.
Portanto, sem fazer um ciclo, é impossível saber qual o preço mais próximo do pedido e qual o preço da licitação e, portanto, qual o preço que deve estar no centro da taça.

De onde você obtém tais dados tortos? ))

1) Definir um intervalo claro de seleção de dados, por exemplo, 20 para cima, 20 para baixo.
e selecione apenas esta faixa, e qualquer outra coisa não é importante para nós.

2. Você diz que os preços vêm de cima para baixo e são ordenados em ordem decrescente.
Portanto, o que pode vir mais alto ou mais baixo, não importa, não olhe para os preços, mas para os índices da matriz.

2. Se você quer dizer pedido por distância entre níveis de preço, não importa em nada, temos indexação na matriz receptora.

Razão: