Dukascopy Jforex Linux Kernel




Dukascopy Jforex Linux KernelEu tenho procurado um servidor privado virtual (VPS) barato mas confiavel para executar meu programa de negociacao nos ultimos meses. Executei meu programa QTD em 3 servidores remotos no Reino Unido e na Alemanha em abril por um mes inteiro como teste de desempenho. Um no Reino Unido em uma nuvem Xen. Um na Alemanha no OpenVZ. E um ultimo tambem no Reino Unido na tecnologia KVM. Esta publicacao e um resumo das minhas descobertas iniciais sobre o que procurar quando escolher um provedor de servidor para executar um servidor de negociacao remoto. Tenha em mente que isso e para comercio de varejo low-end e de baixa frequencia. Onde as latencias na faixa de dezenas de milissegundos sao consideradas boas. O preco geral do preco-alvo e US10-20 por mes para um servidor nao gerenciado com 512 MB de ram e equivalente a 600 MHz de cerca de CPU Intel de 2006. O preco baixo e a principal consideracao aqui. Se voce nao se preocupa com os detalhes tecnicos, os principais nomes de VPS sao Linode. Hetzner. E 6sync para VPSs baseados em Linux. Linode oferece VPS Xen nos EUA e no Reino Unido. 6sync oferece KVM VPSs apenas nos EUA. Ambas as empresas oferecem instancias baseadas em Linux de 512 MB para 20 como servidor inicial. Hetzner oferece VPS KVM na Alemanha por 7,90. Servidores em nuvem como Amazon EC2 e Rackspace Cloud sao muito caros para executar 247. Localizacao, localizacao, localizacao Use um datacenter que seja pelo menos no mesmo subcontinente do seu datacenter. Voce nao quer que seus dados viajem a meio caminho do mundo apenas para economizar alguns dolares. Adiciona latencia desnecessaria e os precos sao comparaveis ??nos estados ou na Europa hoje em dia. Embora a Asia seja outra historia. Se voce usa mais de um corretor, voce pode usar varios servidores ou escolher uma localizacao do servidor que fica entre eles no backbone da Internet. A TeleGeography fornece mapas globais da internet para identificar melhores locais. Troco com Dukascopy e Oanda. Um na Suica e outro nos estados. Como tal, os centros de Internet em cidades como Nova York, Londres e Frankfurt sao alvos principais para baixa latencia entre os dois corretores. A medida que troco mais na Dukascopy, Im tendenciosa para servidores europeus. Alem disso, Londres e Frankfurt sao o hub de internet 1 e 2 do mundo. Londres tem 7,723 Gbps e Frankfurt tem uma capacidade de 7,218 Gbps em 2010. Considerando que Nova York, 5? no mundo, tem 3.850 Gbps. Tecnologias de Virtualizacao Os servidores privados virtuais sao meramente recursos reservados de um computador em um datacenter. Isto e conseguido atraves do uso de tecnologias de virtualizacao. E ha muitos desses como eu descobri. Aqui estao tres os quais voce provavelmente ouvira sobre sua pesquisa. OpenVZ. Esta e a plataforma mais popular e menos preferida para servidores comerciais. E frequentemente usado por hosts de orcamento porque os recursos entre instancias virtualizadas nao estao bem isolados. Como tal, um host pode oversell um recurso de servidores como a maioria dos webapps tem tendencia esporadica de utilizacao de recursos. Em outros mundos, e improvavel que todos os servidores privados virtuais exigissem o maximo de recursos alocados ao mesmo tempo. No entanto, os servidores de negociacao exigem um nivel consistente e garantido de recursos de computacao. Portanto, fique longe do VPS que e executado no OpenVZ, a menos que voce queira ver solucos do servidor. Xen. Isto e o que o Amazon EC2 e o Rackspace Cloud funcionam. O Xen oferece um verdadeiro isolamento de recursos para que voce seja menos provavel afetado por seus vizinhos de servidores virtuais. O que voce ve e tambem o que voce obtem. Entao, se voce promete 512MB de memoria, voce tera 512MB de memoria. No entanto, o poder de processamento varia enormemente em diferentes fornecedores de VPS. Uma micro instancia no Amazon EC2 oferece 613MB de memoria, por exemplo. Mas nao e igual para uma instancia de 256 MB no Rackspace Cloud. Eu consegui executar uma GUI de desktop LXDE mais um programa java no Rackspace, mas nao podia faze-lo na Amazon. KVM. O KVM usa o kernel do Linux para virtualizar. E dito que oferece uma sobrecarga mais baixa ao servidor host para que ele possa fornecer melhor valor do que o Xen. Como o Xen, oferece um verdadeiro isolamento de recursos. Em resumo, Xen ou KVM sao bons, mas fique longe de OpenVZ. O sistema operacional A questao chave aqui e: Linux ou Windows Se voce nao estiver familiarizado com o Linux e nao e interessante em aprender sobre isso, use um provedor Windows Server 2003 ou 2008. O Windows Server 2003 e preferido porque usa menos recursos apenas para executar, por isso e mais barato. Observe que os VPS do Windows sao 10-20 mais caros, pois voce precisa pagar uma concessao de licenca mensal. Com o uso de um VPS baseado em Windows, voce pode se conectar ao seu servidor atraves do protocolo de desktop remoto (RDP). E apenas uma questao de executar o aplicativo Remote Desktop em sua maquina local para o seu servidor remoto. Entao voce vera a area de trabalho das maquinas remotas em sua propria maquina. E entao voce pode controlar o servidor remoto como qualquer outro computador Windows. Muito simples. No entanto, prefiro executar o Linux por causa de sua renomada estabilidade e menor custo. A desvantagem e que voce precisa saber o que esta fazendo para ajustar o servidor para negociacao. O Linux usa muito pouco recurso de computacao para ser executado. Eu posso espremer JForex e Metatrader juntos em um VPS Linux com apenas 256 MB de memoria. Em comparacao, voce precisa de pelo menos 512MB em uma caixa do Windows apenas para que o SO seja executado. E nao ha taxa de licenciamento para o Linux tambem. Uma economia dupla. Ao escolher um fornecedor de VPS, considere fatores como localizacao, tecnologia de virtualizacao e sistema operacional (s) oferecidos. Uma vez que voce reduziu sua pesquisa a uma lista restrita de provedores, o proximo passo e comparar suas ofertas especificas de VPS, observando precos, servicos e especificacoes tecnicas. Tendo estudado a anatomia de uma estrategia JForex vazia (Parte 1 e Parte 2), e hora de dissecar uma operacao. MAPlay e a estrategia que esta incluida em cada download da JForex API como demonstracao. Voce pode encontrar o codigo-fonte completo desta estrategia no srcsinglejartest no pacote compactado da API JForex. Lembre-se de que o primeiro metodo de interface que e executado no inicio da estrategia e OnStart. O metodo OnStart do MAPlay e reproduzido abaixo. As variaveis ??motorizadas. Indicadores. E console sao campos da classe MAPlay. Sao variaveis ??globais dentro da classe. O que as linhas 42 a 44 fazem e salvar o IEngine. IIndicadores. E os objetos IConsole para uso posterior. A ultima linha do OnStart, linha 45, e apenas para imprimir uma mensagem no seu console do programa JForex para notificar o usuario de que a estrategia comecou. Uma vez que o OnStart tenha terminado o processamento, o servidor provavelmente encaminhara onTick se um cheque de mercado chegar. Se nao for durante as horas de mercado, entao nao ha marca e algum outro evento pode acontecer em vez de onTick. Pense nos metodos como eventos em vez de um processo linear. Voce programa sua estrategia JForex de acordo com o que voce quer fazer com cada um dos seis eventos IStrategy Interface. Para esta estrategia particular, o programador decide implementar sua estrategia no nivel de selecao. Como tal, grande parte do algoritmo de negociacao reside em onTick para MAPlay. Observe que esta e uma escolha de design, voce pode usar o OnBar se desejar que sua estrategia seja processada no nivel da barra (ou voce pode usar o OnTick e o OnBar). Heres o codigo-fonte para onTick no MAPlay. De uma aparencia, voce pode notar que as variaveis ??ma0 e ma1 desempenham um papel fundamental na determinacao da configuracao. Dica: para reverter a engenharia de uma estrategia, pode ser mais facil trabalhar para tras quando a ordem e colocada, o que e feito pelo engine. submitOrder neste caso. Ma0 e ma1 possuem resultados de medias moveis exponenciais (EMA). Ma0 e o valor atual. Ma1 e o valor das barras anteriores. Linhas 56--63 verificam usando testes IF (linhas 56 e 60) para ver se qualquer uma das variaveis ??contem dados invalidos. Se os dados forem invalidos, o indicador sera calculado e o resto do onTick sera ignorado com a declaracao de retorno na linha 62. Nota: Os valores dos indicadores as vezes podem ser invalidos (zero, negativo ou Double. NaN., Dependendo da implementacao do indicador particular ) Se nao houver dados suficientes para calcular ou ocorrer um erro, por exemplo. Os EMAs sao obtidos nas linhas 57 e 59 usando o objeto IIndicators (que foi inicializado em onStart). O JForex Wiki fornece uma explicacao sobre seu uso. Observe que ma1 e uma matriz, que foi declarada na linha 38 com um tamanho equivalente ao numero de todos os instrumentos JForex disponiveis. Em particular, e usado com um valor de indice especial como no ma1instrument. ordinal (). Em outras palavras, esta pedindo o slot de instrumentos atual na matriz ma1. O instrumento atual e aquele que e passado para o metodo na linha 55. Deslizando o codigo, outro ponto de interesse e a linha 65, mostrando o uso de instrument. getPipValue (). A linha 67 verifica se o numero total atual de posicao e zero. Se for, o que significa que nao ha posicao aberta, a estrategia prossegue para verificar o sinal de entrada para entrar em um comercio (linhas 68-76). PositionsTotal () e um metodo personalizado definido nas linhas 84--92. Ele usa um loop FOR para percorrer todos os pedidos obtidos do engine. getOrders (instrumento) Uma vez que uma das condicoes longas ou curtas, linhas 68 e 72, respectivamente, sao atendidas, a estrategia envia um pedido nas linhas 69 para um curto e Linha 73 por um longo periodo. As especificacoes de submeter ordens de mercado sao descritas no Wiki JForex. Quando voce interrompe essa estrategia, onStop (linhas 48-53) e chamado. Para esta estrategia, o programador rola todas as ordens novamente usando engine. getOrders () e fecha cada uma das posicoes com um comando order. close () na linha 50. E por essa estrategia trivial. Se houver um ponto que voce deve lembrar. Observe meu uso dos muitos links para JForex javadoc e JForex Wiki ao longo desta publicacao. E provavel que voce encontre muitas das suas respostas dessas duas fontes. Caso contrario, ha sempre o JForex Support Board. Agora que voce teve uma ideia de como o MAPlay. java funciona, e hora de testa-lo. Na proxima publicacao em janeiro, discutiremos o JForex Historical Tester e o que observar quando estiver executando uma estrategia ao vivo. Examinamos quatro dos seis metodos na interface IStrategy em uma publicacao anterior. Os dois ultimos metodos, onTick e onBar, sao onde sua estrategia se conecta com os dados do mercado. Um ou ambos, esses metodos, e onde voce colocou seu algoritmo de negociacao. Sua estrategia seria capaz de processar os dados de mercado a medida que eles chegam a um tickbar de cada vez. Lembre-se de que a IStrategy Interface e o esqueleto da sua estrategia. E esse objeto IContext e o coracao de sua estrategia. OnTickonBar e o chefe de sua estrategia, que contem seu algoritmo de negociacao, que e o cerebro. Heres a definicao de metodo de onTick. Importante: onTick e chamado para todos e cada um dos instrumentos em que a sua plataforma JForex esta inscrito (a lista de instrumentos na sua caixa de espaco de trabalho). Deixe-me dizer isso novamente, onTick e chamado para todos e cada um dos instrumentos em que a sua plataforma JForex esta inscrito. A pratica padrao e filtrar os carrapatos para instrumentos que voce nao deseja com uma simples declaracao de retorno IF. Se (instrumento myInstrument) retornar Os dados do tick real sao passados ??para sua estrategia usando o objeto ITick do parametro de metodos OnTick. De uma olhada na entrada ITick javadoc para ver o que oferece. OnBar funciona de forma semelhante a onTick. No qual onBar e chamado para todos e cada um dos instrumentos subscritos e periodo conhecido por JForex. Da mesma forma, voce deve filtrar todos os instrumentos e periodos indesejados, ou entao havera resultados esperados da sua estrategia. Outro ponto a observar e que o OnBar fornece tanto um IBar como um AskBar e IBar bidBar, representando as barras de solicitacao e oferta. Pergunta: o que acontece quando dois ou mais periodos se sobrepoem, como em 13:45 as barras de 1, 5 e 15 minutos estao chegando ao mesmo tempo (sem mencionar os periodos em segundos tambem). Resposta: De acordo com o Suporte Dukascopy no forum, eles vem em uma ordem rigida, por exemplo (1min 1min 1min 1min 1min 5min 1min 1min 1min 1min 1min 5min.) Eles vem em ciclos, onde periodos menores chegam em primeiro lugar. Forum de suporte do JForex A medida que voce programa sua estrategia com o JForex, voce, sem duvida, encontrara perguntas proprias. O melhor lugar para perguntar e no forum oficial de suporte JForex. Este e o ultimo dos tres recursos JForex essenciais aos quais eu aludi anteriormente. Mesmo que voce nao tenha nenhuma pergunta especifica, existem exemplos de codigos, discussoes de codificacao e centenas de QampA existentes de outros desenvolvedores JForex postados no forum. A discussao ate agora tem sido muito alta. Para mostrar o que voce pode realmente fazer em um IStrategy, vamos dissecar uma estrategia de trabalho na proxima publicacao. E o que mais e melhor examinar do que a estrategia JForex mais popular de todos eles - MAPlay. java. Continuando na Parte 1 desta serie: Comecando a aprender a programacao JForex. Agora estavam prontos para discutir o real. Voce cria estrategias JForex usando a interface IStrategy (O que e uma interface). Basicamente, uma interface e um esqueleto de codigo com um conjunto de metodos vazios predefinidos que voce precisara implementar. Os seis metodos padrao da IStrategy Interface sao: Abaixo esta uma implementacao da IStrategy Interface vazia, tambem conhecida como estrategia JForex. Este codigo ira compilar bem no JForex e voce pode ate executa-lo. Mas nao faz nada porque nao ha codigo para executar em cada um dos metodos. Cada um dos seis metodos sera chamado e saira imediatamente. Cada um dos metodos e desencadeado por um evento especifico. Voce provavelmente pode adivinhar o que eles sao de seu nome. OnStart (linha 5) Este e o primeiro metodo chamado quando voce executa sua estrategia. Ele sera executado uma vez e apenas uma vez no inicio da sua estrategia. Normalmente, voce faz sua inicializacao aqui. A coisa a observar para onStart esta na linha 5 do codigo. A assinatura do metodo de onStart e O objeto no parametro e dado a voce neste metodo e um objeto IContext. Se IStrakie e o esqueleto, o IContext e o coracao da estrategia. Por favor, veja este link do javadoc para o IContext para ver o que esse objeto faz. Javadoc. Agora e um bom momento para apresentar o segundo dos tres recursos essenciais de um programador JForex. O JForex Javadoc e a documentacao da API mais atualizada que explica todos e cada um dos objetos e metodos da API JForex. Pense nisso como um manual de referencia. Note-se que, embora seja abrangente, a maior parte da explicacao e muito esparsa e possivelmente incompleta. O IContext e um objeto JForex central para acessar muitos componentes importantes do sistema JForex, como o mecanismo de pedidos, graficos, consoles, indicadores. Voce consegue a ideia. E importante Voce normalmente deseja manter uma copia local, pois esta e a unica vez (em onStart) que esse objeto sera passado para voce no IStrategy. OnStop (linha 26) Como o nome sugere, este metodo e chamado uma vez que voce envia um comando de parada para sua estrategia. Voce faz o encerramento do seu programa, como o registro e a descarga de dados aqui. Nao muito fora do comum com este. OnMessage (linha 18) Enquanto sabemos quando onStart e onStop serao chamados, onMessage e um metodo assincrono em que voce nao sabe exatamente quando ele sera executado. Esse metodo e chamado quando o servidor Dukascopy envia sua estrategia para uma mensagem. Por exemplo, o servidor chama onMessage para que voce saiba que seu pedido foi preenchido. Voce recebe e processa a mensagem do servidor acessando o objeto IMessage que e passado para voce. Importante: nao ha garantia de que voce recebera todas e cada uma das mensagens enviadas para a sua estrategia a partir do servidor. Talvez seu processo de estrategia esteja obstruido. Ou talvez sua conexao com a internet tivesse um soluco. Se a sua estrategia onMessage nao for chamada pelo servidor por qualquer motivo, o servidor nao poderia se importar menos e nao estara checando nem tentando novamente. Entao, nao faca nada critico, como gerenciar suas ordens no onMessage onAccount (linha 22). Esse metodo e chamado sempre que a atualizacao de informacoes da sua conta e recebida. O metodo fornece acesso ao objeto IAccount. Que voce usa para obter as informacoes da sua conta. Diga se voce tem uma posicao aberta, as informacoes da sua conta mudam em cada tiquetaque porque seu patrimonio liquido e um lucro liquido nao realizado em dinheiro. Nesse caso, onAccount e chamado a cada 5 segundos pelo servidor no maximo para evitar inundar sua estrategia. Mais importante: o objeto IAccount nao esta conectado ao vivo em sua conta no servidor. E apenas um instantaneo da sua conta. Por exemplo, se voce mantiver uma copia local de um objeto IAccount. Faca algumas negociacoes para alterar seu saldo. Em seguida, peca a mesma conta IAccount para informacoes de saldo da conta, voce nao vera uma alteracao. Como tal, sempre atualize sua copia local do IAccount dentro do metodo onAccount para manter as informacoes da sua conta atualizadas para o uso de suas estrategias. Para continuar os metodos onStart, onStop, onMessage e onAccount sao metodos administrativos para sua estrategia. Os dois ultimos metodos que bem discutem, onTick e onBar, e onde a magia acontece em uma estrategia. Eu estou guardando o melhor para o ultimo na proxima publicacao. Eu coloquei uma miriade de obstaculos para configurar a plataforma de negociacao JForex em um intento gratuito de t1.micro da Amazon AWS. Passo pelas etapas que eu passei para configurar um servidor em nuvem para o JForex nesta publicacao. No final, descobri que a instancia do t1.micro bloqueia a execucao do ambiente de trabalho GNOME no Ubuntu Maverick. Eu habilitei o utilitario Amazons CloudMonitor e a medida da CPU esta bloqueada em 100 a partir da execucao da plataforma JForex e da area de trabalho. Isso e esperado porque eu suspeitava que o t1.micro nao seria capaz de lidar com toda essa exibicao de graficos. Eu escolhi executar o Ubuntu na EC2 porque isso e o que estou familiarizado com em casa. Eu tambem considere executar o CentOS porque e lendario como um servidor corporativo. No entanto, eu leio comentarios de individuos que executam seu proprio VPS privado dizendo que o CentOS e muito seguro, mas e muito apertado. Como o JForex precisa de uma versao comercial comercial relativamente recente da Sun Java, eu escolho uma distribuicao Linux mais facil para minha instancia EC2. Uma queixa menor que tenho com o Ubuntu e que a EBS Amazon Machine Image (AMI) vem em 15 GB. Considerando que a oferta gratuita da Amazon apenas oferece 10 GB de uso gratuito de EBS. Entao, ha um extra de 5 GB que sera cobrado mensalmente. Isso foi discutido no forum do desenvolvedor e parece que as versoes subsequentes do AMI da versao do Ubuntu serao em 10 GB. No entanto, este 5 GB equivale a apenas 0,55 por mes. Ainda assim, eu quero sair, eu comecei o meu teste no EC2 usando a variante do servidor do Ubuntu. Tem menos desordem e potencialmente mais seguro que a variante de mesa normal. No entanto, obter uma area de trabalho remota no servidor me levou duas noites para descobrir. Meu problema e conseguir que um servidor NX funcione. Eu tentei o comercial, mas livre, nxserver da NoMachine. Eu tentei a implementacao GPL, FreeNX. E tentei a adaptacao de codigo aberto Googles, Neatx. Simplesmente nao funcionaria Assim que resolvi um problema, algo mais se quebra. No comeco, era um problema de autenticacao porque as chaves SSH eram misturadas entre o servidor NX e o servidor SSH. Entao, uma vez que seja resolvido, a area de trabalho simplesmente nao comecaria e sem qualquer mensagem de erro para me dizer o que estava errado. Isso e quando eu desisti da NX e mudei para usar o X2go. So me levou alguns minutos para instalar o X2go. Funcionou bem desde a instalacao. Muitas horas desperdicadas no NX. Uma vez que eu tivesse minha area de trabalho remota funcionando, eu tentei instalar o Sun Java para JForex. Depois de algumas tentativas falhadas, descobri sobre esse problema. Aparentemente, ha um erro no kernel no Ubuntu, no qual a instalacao do Sun Java em um t1.micro poderia interromper o instalador. Apenas minha sorte. Ate entao, minha curiosidade diminuiu e e apenas uma questao de fazer o trabalho. Entao, eu reiniciei todo o processo de configuracao ainda mais uma vez com uma edicao desktop do Ubuntu 10.10 (tem usado a edicao do servidor) de 64 bits (para contornar o erro de instalacao do Sun Java), instalou o Sun Java, o Google Chrome e o X2go. Conectou-se a area de trabalho remota atraves do X2go. Lancou o Chrome para acessar o site da Dukascopy. Iniciou o JForex. Leva apenas alguns minutos, uma vez que eu sei o que estou fazendo. Entao eu assisti a instancia t1.micro chegar a um rastreamento. Theres minha primeira tentativa de executar JForex em um t1.micro gratuito. Minha recomendacao nao faca isso. Faz um tempo, meu velho amigo - Financiamento Manuvie (MFC. TO). Agora, die Stop e preco de fechamento de acoes acima de 14.30, hoje alto. O risco e cerca de (14.30 - 13.97) 4 100 132 27.90 159.90 1.6 de conta. Observe que o calculo nao e responsavel pela opcao theta (tempo de decaimento). Atualize o dia seguinte: Parou em 8,81 por uma perda de 64,90 0,7 de conta. Estou dando este curto jogo de oleo outra tentativa. Veja o COT de cobertura (CFTC: Compromissos de Comerciantes) dados de juros abertos (parte inferior da Fig. 1). Esperei por uma quebra na tabela horaria (Fig. 2) para fazer minha entrada neste curto. O mercado esta enrolando durante todo o mes de outubro. Algo grande esta para acontecer mais cedo ou mais tarde. Talvez as eleicoes de meio periodo nos EUA amanha possam finalmente mudar esse mercado. Stop esta em 8.80. O risco e (9.03 - 8.80) 250 57.50 9.90 comissao 67.40 0.68 de conta. O tamanho da posicao ainda e pequeno com essa falta de volume de mercado. O desempenho do calculo numerico e importante se voce estiver calculando conjuntos de dados gigantes ou tiver capacidade de processamento limitada. Eu pertenco no ultimo caso, como eu pretendo executar o meu sistema comercial em um servidor de nuvem livre no futuro. Ha uma abundancia de pesquisas e estudos para empurrar o limite da computacao numerica de alto desempenho em Java (ver ref. 1 e 2). A maioria dos mais recentes e melhores esta alem do escopo do meu trabalho quantitativo. O que procuro e desempenho com simplicidade e eficiencia. Foi assim que eu percebi o Projeto Colt pelo CERN, e seu ramo multi-threaded. O Colt e um conjunto de bibliotecas Java de codigo aberto para problemas de computacao cientifica e tecnica caracterizados por grandes tamanhos de dados, exigindo alto desempenho e pouca pegada de memoria. Apenas o que eu precisava. Por curiosidade, testei sua implementacao de arrays duplos e comparei seu desempenho com bibliotecas Java padrao. Uma amostra aleatoria de um milhao de valores decimais (por exemplo, precos) sao gerados e armazenados em quatro estruturas de dados Java. Todas as estruturas de dados tem o mesmo milhao de valores em seus respectivos espacos de memoria. Primitive double array ArrayList de objetos duplos Colt Parallel Colt Tres testes foram executados. Uma funcao de diferenca simples. Uma parcela dos milhoes de pontos de dados e o calculo de arrayi - arrayi - shift para todos eu mudo para 1.000.000. Onde turno e um numero inteiro aleatorio de 0 a 50. Este tipo de calculo e um lugar comum em indicadores de analise tecnica. Uma funcao de classificacao classificando o milhao de pontos de dados na matriz em ordem crescente. Isso e util para algumas analises estatisticas. No caso da matriz primitiva, estou usando java. util. Arrays. sort (). Caso contrario, estou usando o metodo sort () implicito nas outras interfaces. Uma funcao de pesquisa binaria nas matrizes ordenadas. Para a matriz primitiva, estou usando java. util. Arrays. binarySearch (). Cada teste e executado 3 vezes com diferentes sementes aleatorias e os resultados sao calculados em media. O sistema executa o Java SE build 1.6.022-b04 e o kernel do Linux 2.6.35-22 em um Intel Core 2 Duo 6300 1.86 GHz. Para o diff, a matriz primitiva teve uma media de 9,3 milissegundos ArrayList 27 ms. Colt 14 ms. Coluna paralela 15 ms. Para ordenar, primitivo 354,7 ms. ArrayList 1.316 ms. Colt 270.3 ms. Coluna paralela 273 ms. Para pesquisa, primitivo 559,7 ms. ArrayList 1,561.7 ms. Colt 575.7 ms. Parallel Colt 551,3 ms. Discussao Como este nao e um teste vigoroso, eu nao me importaria demais com os numeros reais. A mensagem de levar para casa aqui e que o desempenho do Colt e pelo menos na mesma magnitude de uma matriz primitiva. Considerando que um objeto ArrayList padrao e uma magnitude pior. No entanto, onde Colt realmente brilha e em seus metodos de manipulacao de matrizes. Oferece muitas funcoes convenientes para calculos matriciais, garantindo um bom desempenho. Para trabalhar com matrizes em Java, voce usa bibliotecas de terceiros, como o Colt, ou gerencia um monte de loops. O que nao e bonito. Referencias 1 Moreira, et al. Programacao Java para computacao numerica de alto desempenho, IBM Systems Journal, Vol. 39, No. 1, pp. 21-56, 2000. 2 Wendykier e Nagy, Parallel Colt: uma biblioteca Java de alto desempenho para computacao cientifica e processamento de imagens, ACM Transactions on Mathematical Software, Vol. 37, n? 3, setembro de 2010.