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

 
é possível calcular tudo para um dado lido - o principal é o desejo
komposter:

Sim, nesta forma a tarefa é paralela - cada vez que o 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 todos vocês!

Se executarmos este algoritmo em vários EAs, estaremos limitados pela velocidade de leitura do disco + em partes + de diferentes posições, e a velocidade provavelmente será insuficiente.

 
ALXIMIKS:
Você pode calcular tudo em um único dado lido - se você quiser, o principal é

A leitura a partir do disco é uma operação bastante cara - a execução deste algoritmo em vários Expert Advisors será limitada pela velocidade de leitura a partir do disco + em partes + de diferentes posições e é improvável que a velocidade seja alcançada.

Quem disse que a computação distribuída deve ser realizada em uma única estação de trabalho? Não existem tais restrições)) O disco RAM ajudará, como foi dito acima.
 
elugovoy:
Quem disse queos cálculos distribuídos devem ser feitos em uma única estação de trabalho? Não existem tais restrições)) O disco RAM é também uma grande ajuda, como foi dito acima.

Que tal pensar um pouco e mudar o algoritmo?

1. como baixar várias seqüências de uma só vez e como saber onde começam e onde terminam

2. como calcular os coeficientes para todos os negócios em uma única seqüência e em que estrutura de dados armazenar a resposta

3. Como fazer uma fusão de duas respostas de um ponto anterior em uma nova resposta um pouco mais completa

4. como dividir a resposta final do ponto 3 nos intervalos necessários (estamos falando doSeekingDate = Tempo de fechamento do comércio + 1)

Podemos obter um algoritmo ligeiramente diferente, selecionando em quantas partes adicionais dividir o intervaloSeekingDate

podemos obter erros diferentes em comparação com o algoritmo do autor inicial.

 
papaklass:

A capacidade de dígitos de um número é determinada pela singularidade do código de entrada, não pela capacidade de dígitos do sistema. Claramente, deve ser um múltiplo de 1 byte.

64 bits me parece ser demais. :)

Se houver 1.000.000 de registros, 16 bits não seriam suficientes para um código de registro único (máximo de 65536 registros). Esta é uma delas.

Veja a arquitetura dos processadores Intel (Itanium), AMD (eu não disse sistema operacional) 32-bit e 64-bit. 32/64 é a resolução do barramento de endereços, mas ao mesmo tempo 32/64 bits (4/8 bytes) são lidos da memória em um ciclo de máquina, mesmo quando se acessa um byte de memória.

Portanto, não faz absolutamente nenhuma diferença em termos de desempenho se lê 2 bytes ou 8 bytes de memória.

Em princípio, você poderia escrever um serviço Windows para este tipo de manipulação de arquivos.

Mas eu ainda estou inclinado a usar o SGBD.

 
ALXIMIKS:

Que tal pensar um pouco e mudar o algoritmo?

1. como baixar várias seqüências de uma só vez e como saber onde começam e onde terminam

2. como calcular os coeficientes para todos os negócios em uma única seqüência e em que estrutura de dados armazenar a resposta

3. Como fazer uma fusão de duas respostas do item anterior em uma nova resposta um pouco mais completa

4. como dividir a resposta final do ponto 3 nos intervalos necessários (estamos falando doSeekingDate = Tempo de fechamento do comércio + 1)

Podemos obter um algoritmo ligeiramente diferente, selecionando em quantas partes adicionais dividir o intervaloSeekingDate

podemos obter erros diferentes em comparação com o algoritmo do autor inicial.

Para todos os 4 pontos, processamento de dados no lado do SGBD.

Sobre o algoritmo "ligeiramente diferente", não é bem claro o que você quer dizer. Mas. Para calcular de alguma forma o erro deste algoritmo "ligeiramente diferente" em comparação com o do "autor", ambos os algoritmos devem ser implementados. E o fio foi criado precisamente por causa do problema técnico de implementar o algoritmo do "autor".

Dado este fato, que metodologia você vai utilizar para calcular o erro de que está falando?

 
ALXIMIKS:
você pode calcular tudo em uma só leitura - o principal é o desejo.

A leitura a partir do disco é uma operação bastante cara - a execução deste algoritmo em vários Expert Advisors será limitada pela velocidade de leitura a partir do disco + em partes + de diferentes posições e é improvável que esta idéia dê qualquer velocidade.

Digamos que o HDD é o dispositivo mais lento, é um fato. Entretanto, não estamos falando em executar múltiplos EAs usando todos estes cálculos. A meu ver, a aplicação mais provável é a geração de sinais. Digamos servidor de nuvem na amazônia com desempenho necessário + MT4 + este desenvolvimento = provedor de sinal.

 
elugovoy:

Para todos os 4 pontos, o processamento de dados está no lado do SGBD.

Sobre o algoritmo "ligeiramente diferente", não tenho certeza do que você quer dizer. Mas. Para calcular de alguma forma o erro deste algoritmo "ligeiramente diferente" em comparação com o algoritmo do "autor", ambos os algoritmos devem ser implementados. E o fio foi criado precisamente por causa do problema técnico de implementar o algoritmo do "autor".

Dado este fato, que metodologia você vai utilizar para calcular o erro de que está falando?

Entendo pelo autor que a faixa será recortada pelo coeficiente máximo escolhido a partir da faixa determinada. Minha variante sugerida é dividir cada faixa em subgamas N, onde na convergência apenas um valor de coeficiente pode caber. Assim, em N = 5 a faixa pode ser dividida em proporções de 0,2 0,4 0,6 0,8 1. E qualquer valor de 0 a 1 é cortado na faixa do autor. Portanto, um erro de alcance de 0,2 é o máximo em N = 5.

E está tudo em torno de quão corretamente os cargos do autor foram interpretados, porque ainda não há clareza total.

 
ALXIMIKS:

Até onde entendi a versão do autor (caso algo esteja errado novamente, pois não há explicação clara e completa do que exatamente é necessário), o intervalo será cortado pelo coeficiente máximo selecionado a partir deste intervalo; na versão que sugeri, cada um destes intervalos deve ser dividido em N subgrupos onde apenas um valor de coeficiente pode caber na fusão. Assim, em N = 5 a faixa pode ser dividida em proporções de 0,2 0,4 0,6 0,8 1. E qualquer valor de 0 a 1 é cortado na faixa do autor. Portanto, um erro de alcance de 0,2 é o máximo em N = 5.

E em torno de como os cargos do autor foram interpretados corretamente, porque ainda não há clareza total.

Sim, aparentemente o projeto foi encomendado pelo Ministério da Fazenda, não há informações específicas suficientes. No entanto, todos podem encontrar algo interessante para si mesmos a partir da discussão. Vejo isso como um aspecto positivo da discussão.

Sobre a discretização das faixas, sua idéia é clara. E se N=100, 1000... (puramente matematicamente é possível), então esta divisão causará um backlash em termos de desempenho e utilização de recursos do sistema. Há tanto a física quanto a matemática )

 
Candid:

Temos um fragmento de um 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 que pertencem à mesma seqüência. Em seguida, calculamos o critério sobre esta amostra. A propósito, há possibilidades de utilizar a recursividade na seleção.

Portanto, você precisaria passar por vários milhões de negócios de outras seqüências! É exatamente isso que eu quero dizer.

ALXIMIKS:

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

Sem problemas até o momento, os dados são uma quantidade fixa.

TheXpert:
A propósito, se você souber o local de partida de cada seqüência, você pode procurar as datas certas com uma busca binária, uma vez que as negociações são ordenadas por tempo.

+1, obrigado pela idéia.

elugovoy:

1. Com base no acima exposto"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 é uma tabela preenchida com identificações de seqüência e valores médios de lucro.

1а. Quais são os outros critérios - não importa. O importante é que o cálculo seja realizado por uma série de comércios com o comprimento especificado.

1б. Como você pode descartar uma seqüência só porque ela tem um mau valor de critério no momento do fechamento do comércio N? E se depois se tornar um melhor?
Você só pode remover aquelas seqüências que falharam completamente e cujo critério não demonstrou nenhum lucro. E não deveria haver muitos deles.

elugovoy:

4. A meu ver, 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 da abertura do pedido). 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 escolhida, ou passar para outra. É possível fazer uma lista das melhores estratégias recomendadas para um comerciante, em determinadas condições. Então, com a abertura do Mercado e com a cabeça limpa (na segunda-feira), o comerciante confirmará a escolha (ou antes, antes da abertura do Mercado... alerta por e-mail, etc.).

Bem, é uma questão de ideologia. Não sobre ele agora ;)

ALXIMIKS:

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

Por que você precisa deum conjunto de valores de Critério eum conjunto de Posições de Ponteiro de Arquivo? (um critério e a última transação você não pensou em armazenar?)

Critério Matriz de valores - ser capaz de classificar e selecionar algumas das melhores seqüências (para o futuro).

Posições do índice de arquivos - para continuar procurando em cada seqüência a partir do lugar certo (de que outra forma?).

ALXIMIKS:

Será que 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 de"Tempo de fechamento da transação" atéo SeekingDate ?

e você precisa se encaixar nesse intervalo X negociações para calcular o critério para cada seqüência?

1. Sim, de 0 até o SeekingDate primeiro

2. O SeekedDate é deslocado, e processamos a seqüência (adicionar negócios à matriz) no intervalo "PreviousTreatedTrade - SeekDate".

Renat:

Estes são resultados estranhos.

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

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

Sem estruturas de disco, a montagem de projetos leva muitas vezes mais tempo.

Estou começando a ficar complexo.

Provavelmente será necessário fazer um roteiro de teste e anexar um arquivo para que você possa verificar uma tarefa semelhante.

Eu tenho um disco rígido normal - wdc wd1002FAEX-00Y9A0, a julgar pelas especificações, a velocidade máxima é de 126 MB/s:

A julgar pela revisão, isso é sobre o que você pode espremer. Talvez eu esteja fazendo algo errado?

Vamos dar uma olhada no roteiro...

ALXIMIKS:
É disso que estou falando - você tem que ler arquivos grandes em pedaços grandes, caso contrário os pequenos podem levar até 10 ou mais vezes mais tempo.

Como você lê um grande pedaço?

papaklass:

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

Como codificamos as informações completas sobre a transação sem perder informações?

 
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.

Esqueci de escrever sobre memória.

DDR3, 1333 MHz:

Disco RAM Softperfect 3.4.5, embora eu tenha feito NTFS (alguma diferença?)

E outro detalhe - o disco RAM é de 12000 MB, e há apenas 1-2 GB de memória livre (para trabalho).

Razão: