Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware - página 17
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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 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.
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.
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?
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.
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.
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 )
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.
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.
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.
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.
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 ;)
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?).
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".
Estes são resultados estranhos.
Aqui está a partir de nosso sistema de servidor de trabalho sob carga:
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...
É 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?
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?
Resultados estranhos.
Aqui está a partir de nosso sistema de servidores de produção sob carga:
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).