Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware - página 16

 
komposter: Como calcular o critério para os últimos X negócios da seqüência, tendo um arquivo desse tipo?


Temos um fragmento do arquivo em nossa memória, passamos por ele e formamos uma amostra de comprimento necessário para o cálculo do critério, selecionando apenas negócios, que pertencem à mesma seqüência. Em seguida, calculamos o critério sobre esta amostra. A propósito, há possibilidades de utilizar a recursividade ao selecionar, em teoria.

Ou eu não entendi a pergunta?

P.S. É claro, temos que voltar atrás no arquivo ao formar a amostra.

 
Candid:

Temos um fragmento do arquivo em nossa memória, passamos por ele e formamos uma amostra do comprimento necessário para o cálculo do critério, selecionando apenas negócios, pertencentes à mesma seqüência. Em seguida, calculamos o critério sobre esta amostra. A propósito, há possibilidades de utilizar a recorrência ao selecionar, por idéia.

Ou será que entendi mal a pergunta?

P.S. É claro, temos que voltar atrás no arquivo ao formar a amostra.

o problema da inserção de novos dados - resolvê-lo de alguma forma.

Por que passar e selecionar as meias brancas muitas vezes, se é mais fácil ir e jogar as brancas em uma cesta e as pretas em outra, e depois perguntar quem está lá e em que quantidade.

 
komposter:

Um pedaço é lido. O tamanho do pedaço é determinado pelo número de transações até a Data de Busca que estavam em uma determinada seqüência.

A propósito, se o ponto de partida de cada seqüência for conhecido, as datas desejadas podem ser pesquisadas por busca binária, já que as negociações são ordenadas por tempo.
 
ALXIMIKS:

o problema da inserção de novos dados - resolvê-lo de alguma forma.

por que passar muitas vezes e escolher meias brancas quando é mais fácil ir e jogar branco em uma cesta preta em outra e depois perguntar quem está lá e em que quantidade.

Demasiados dados também são ruins :)

O problema é que não são os brancos e os negros que são selecionados aqui, mas aqueles que são localmente mais brancos. Assim, calcular o grau global de escuridão não economiza. A propósito, comecei nesta linha apenas com uma sugestão de cálculo contínuo do critério.

P.S. A propósito, ninguém impede de processar alguns arquivos juntos - simplesmente o cache para cada um terá que fazer menos. Mas parece ter reserva no tamanho do cache.

Ou seja, os novos dados podem simplesmente ser acumulados em outro arquivo.

P.P.S. A propósito, o corte do arquivo em vários arquivos menores facilitará o problema de classificação.

 
komposter:

1. Se o Critério fosse estático... E se seus parâmetros mudarem?

2. Sim, então haverá uma troca. Mas o recálculo só será necessário para os dados mais recentes, não há necessidade de abalar toda a história.

3. esta é uma ferramenta...

4. Exatamente.

1. do que disse acima"Que o critério seja o lucro médio dos últimos 20 negócios da seqüência. "Isto deve ser entendido como um critério, a expectativa móvel de lucro. Que outros existem?

No banco de dados, gerar uma tabela com identificador de seqüência e médias móveis correspondentes. As seqüências que não se enquadram nas condições devem ser eliminadas imediatamente. Isto deve ser feito por um procedimento de modo concorrente no SGBD, a pedido do robô, com o status do processo exibido no robô.

Digamos, FilterAvgProfit (pProfitValue, pTrades, pDeviation),

onde pProfitValue é o lucro alvo, pTrades é o número de operações para o lucro médio móvel, pDeviation é o desvio permitido do pProfitValue.

O resultado - tabela preenchida com identificações de seqüência e valores médios de lucro.

Da mesma forma, você pode escrever procedimentos armazenados para cada um dos critérios.

2. Se parte dos dados for descartada (use "dados frescos" em vez de 1 milhão), isso dará um ganho de desempenho.

3. não estava muito claro a partir da declaração. Agora ok.

4. Tanto quanto eu vejo, se estamos olhando para a seleção de estratégias, esta operação não deve ser realizada com muita freqüência (digamos, em cada bar ou imediatamente antes de abrir uma ordem). Esta abordagem é razoável se a estratégia atual mostra que N perde negócios em uma linha - então podemos escolher outra e levará tempo para "tomar uma decisão", não há nada a evitar. Ou, realizar tal seleção uma vez por semana (nos fins de semana, quando o mercado estiver fechado), e, ou confirmar a estratégia atualmente selecionada, ou mudar para outra. É possível fazer uma lista das melhores estratégias recomendadas para um comerciante, em determinadas condições. Então, quando o mercado abrir e com a cabeça limpa (na segunda-feira), o comerciante confirmará a escolha (ou antes, antes da abertura do mercado... o alerta por e-mail, etc.).

Em algum lugar como este.

 

Память выделяется однократно для массива структур последовательностей.

A estrutura da seqüência inclui: No., Matriz de estruturas de todos os negócios da seqüência [X], Valor do critério, Posição do Índice de Arquivo.

O próximo passo é apenas o preenchimento dos elementos da estrutura (incluindo as matrizes de negócios). Os negócios na matriz são deslocados, de modo que há sempre apenas X negócios de cada seqüência na memória.

Você aloca memória para uma série de estruturas e obtém:

matrizno,

um conjunto de conjuntos de estruturas de todos os negócios da seqüência [X],

um conjunto de valores de Critério,

um conjunto de Posições de Ponteiros de Arquivo.

Por que você precisa damatriz de valores do Critério e damatriz de Posições do Índice de Arquivos? (Você já pensou em armazenar um critério e o último comércio?)

Acertei:

Primeiro passe - busca no intervalo de 0 a SeekDate

então encontrar o melhor critério eFindDate = hora de fechamento do comércio + 1

procure agora no intervalo do"horário de fechamento do comércio" até oSeekingDate ?

e você precisa ter X negócios nesse intervalo para calcular o critério para cada seqüência?

 
komposter:

Compartilhando os resultados de minha pesquisa.

O arquivo de cache binário de 7529 MB lê:

  • Do disco rígido: em 212,3 seg (35,46 MB/seg)
  • De disco RAM: em 88,1 seg (85,46 MB/seg)
É difícil chamar a diferença de cósmica, embora eu tenha o disco rígido mais comum (no entanto, a memória também não é rápida).

Conclusão: a rapidez na leitura de um grande arquivo com RAMdisk é de cerca de 2,5x.

Resultados estranhos.

Aqui está a partir de nosso sistema de servidor de trabalho sob carga:

  • com SSD: 200 Mb por segundo, NTFS
  • com RAM: 2000-2500 Mb por segundo, FAT32, Disco de RAM Softperfect 3.4.5

Sem os discos RAM, a construção de projetos leva muitas vezes mais tempo.

 
Renat:

Resultados estranhos.

Aqui está a partir de nosso sistema de servidores de produção sob carga:

  • com SSD: 200 Mb por segundo, NTFS
  • com RAM: 2000-2500 Mb por segundo, FAT32, Disco de RAM Softperfect 3.4.5

Sem os discos RAM, a construção de projetos leva muitas vezes mais tempo.

Isto é o que eu estava dizendo - você tem que ler arquivos grandes em pedaços grandes, caso contrário os pequenos podem demorar até 10 vezes mais.
 
papaklass:

Na minha opinião, a solução para o problema está na codificação dos dados brutos.

Se você não consegue escapar da leitura dos dados brutos várias vezes, você precisa convertê-los para um formato aceitável para múltiplas leituras.

Uma opção possível é converter cada registro para um número de 16 bits. A cada campo do registro original deve ser atribuído um número específico de bits no número. Por exemplo:

O dígito mais significativo do número:

- "0" significa um resultado negativo da transação;

- "1" denota um resultado positivo de uma transação.

o dígito inferior do número:

- 0" denota um comércio de COMPRA;

- "1" significa um negócio de venda.

e assim por diante.

Assim, ao invés de ler repetidamente um arquivo fonte com muitos campos, o trabalho é reduzido a ler repetidamente um único campo numérico, o que deve dar uma velocidade significativa.

Em geral, o arquivo fonte pode ser gerado imediatamente em um formato codificado, embora as informações nele contidas apareçam de forma não-visual.

Mas não em "16 bits", mas em 64 bits, Andrew tem um processador x64, portanto a unidade mínima de volume ao acessar a memória é de 64 bits. Mesmo se você ler um byte de memória, o processador ainda assim lerá 8 bytes (duas palavras duplas).

 
komposter:

Sim, nesta forma a tarefa é paralela - cada vez queo SeekDate muda,você pode executar uma busca simultânea pelo melhor critério em diferentes partes do conjunto de seqüências. Por exemplo, os dividimos em 20 partes e damos a tarefa a 20 Conselheiros Especialistas. E eles devem ler o arquivo, encontrar o negócio e enviar apenas a melhor seqüência (№№, Critério e posição do arquivo).

Muito obrigado!

Aí está, outra coisa ))

Razão: