воскресенье, 1 апреля 2018 г.

Idee por sistema de negociação


Idee por sistema de negociação
Nome file: SISTEMA DE NEGOCIAÇÃO POR IL FOREX: GUIA PRATICA POR COSTRUIRE I TUOI SISTEMA DE NEGOCIAÇÃO AUTOMÁTICA EM MQL 4.pdf.
Autore: Domenico Starnini.
Dimensione del file: 75157 KB.
Tipo di file: PDF / ePub.
Caricato Su: 2017 Juli 09.
Valutazione: 5 4 3 2 1 4.7 / 5 da 3659 voti.
Clicca à bottone qui sotto per registrarti e scaricare eBook.
Clicca à bottone qui sotto per registrarti e scaricare eBook.
SISTEMA DE NEGOCIAÇÃO POR IL FOREX: GUIDA PRATICA POR COSTRUIRE I TUOI SISTEMA DE NEGOCIAÇÃO AUTOMATICI EM MQL 4 PDF, ePub e-book, Domenico Starnini,, Una guida prática por automatizar o mercado estrategia de negociacao O sistema de negociacao un expert advisor trading system automatico per il forex A linguagem de programação 232 MQL 4 usa sua Metatrader 4 software gratis forneceu um maggior parte de um corretor specializzati per il forex Senza nessun investimento costruirete i vostri personali sistemi di trading adattando al vostro stile con piccoli cambriari le funzioni fornite nel libro In appendice 232 forneceu o código do sistema completo do sistema, 2.3.
Come funziona: 1. Registra un account di prova grátis de 1 mese. 2. Scarica come molti libri che ti piace (uso pessoal) 3. Annullare l'iscrizione in qualsiasi momento se non soddisfatta.

& # 8220; 1 hora em Forex & # 8221; Sistema de Negociação.
de vez em quando alguém desenvolve algo que merece nossa atenção. Acontece muito raramente ultimamente, mas ainda acontece.
Se isso também é desenvolvido por alguém que eu conheço pessoalmente, então é algo que dá ainda mais confiança a todo o pacote.
O & # 8220; 1 Hora Forex & # 8221; é um sistema de negociação manual aplicado ao período de uma hora (o local de origem do nome). Um simples e eficaz.
Tudo o que você precisa fazer é baixar o manual em pdf e gastar menos de duas horas assistindo a todos os 8 vídeos para aprender em profundidade como o sistema de negociação funciona e o que você pode esperar dele. Meu amigo Jason também desenvolveu alguns indicadores para aplicar em seus gráficos, o que tornará a coisa ainda mais fácil.
O número médio de pips por negociação com Forex de 1 hora é entre 15 e 8211; 30 pips, às vezes maior. Mas, vamos usar o cenário pessimista de 15 & # 8211; 30 pips com mais de 90% de resultados, considerando o fato de que você não precisa gastar mais de 45 minutos para decidir se uma transação em potencial pode ocorrer, não tenho dúvidas de que será o seu 45 minutos sem estresse mais lucrativo !
Lembre-se, para ser lucrativo, você precisa de consistência e confiança em seu sistema de negociação. Mesmo 15-30 pips por dia pode ser mais do que suficiente se você tiver uma alta porcentagem de fazê-las. Essa é uma das principais razões pelas quais eu particularmente adoro o & # 8220; 1 Hour Forex & # 8221; sistema de negociação.
Se você quiser ler mais e se manter informado sobre a próxima versão do sistema, simplesmente clique aqui.

Sistemas de Negociação de Futuros.
Nossa equipe de gerenciamento de sistemas é dedicada a pesquisar e adquirir Futures Trading Systems, que oferecem oportunidades em uma variedade de condições de mercado. Concentramos nossos esforços em estratégias que acreditamos oferecerão excelentes métricas de risco / recompensa e diversificação entre os sinais de negociação. As estratégias que apoiamos podem ser combinadas para criar portfólios para vários tamanhos e riscos de contas.
Podemos ajudá-lo a desenvolver e implementar uma abordagem com vários sistemas e estamos sempre felizes em pesquisar novos sistemas e ajudar nos projetos de desenvolvimento. Por favor, contate-nos com quaisquer questões de negociação de sistemas.
Sistemas em destaque:
LTX diversificado.
Balanço Dinâmico.
Sistema Multi.
SOBRE SISTEMAS DE NEGOCIAÇÃO FUTUROS.
O que é um sistema de negociação de futuros?
Um sistema de negociação de futuros é uma ferramenta usada por traders que usa critérios objetivos de entrada e saída com base em parâmetros que foram determinados por testes históricos em dados quantificáveis. Os sistemas são executados em computadores ou servidores e vinculados a uma troca para negociação. Os desenvolvedores enviarão revisões de sistemas (atualizações) da maneira que acharem melhor.
Por que eu deveria trocar um sistema?
Negociar os mercados futuros usando um sistema de negociação de futuros fornece a disciplina necessária para superar o medo e a ganância que, em muitos casos, paralisa um profissional e impede a tomada de decisões oportunas. Cada pedido efetuado é regido por um conjunto pré-determinado de regras que não se desviam com base em outra ação que não seja de mercado.
O que devo considerar?
Como todos os tipos de ferramentas, os sistemas de negociação de futuros, se não usados ​​adequadamente, podem ser perigosos para a saúde econômica do profissional. O negociador deve avaliar a tolerância à negociação de futuros de alto risco, ao capital de risco e à capacidade de resistir à redução do capital, bem como ao custo em termos de tempo e dinheiro para negociar nos mercados futuros.
Como sei se o sistema é bom?
Um dos elementos-chave de um sistema de negociação de futuros é a capacidade de um sistema de negociação resistir ao longo do tempo. Encorajamos os clientes a gastar seu tempo e estudar os resultados antes de abrir uma conta de negociação. O único teste verdadeiro de um sistema é ver como ele se comporta na negociação real, em que o escorregamento do mercado e o custo de negociação são parte do registro.
Quanto dinheiro preciso?
O depósito mínimo para abrir uma conta de negociação de futuros varia de acordo com o corretor. Além disso, o profissional em perspectiva só deve considerar a abertura de uma conta de futuros quando o comerciante tiver capital de risco suficiente, devido à alavancagem na negociação de futuros.
Como eu começo?
O primeiro passo é o trader falar com a Wisdom Trading Inc. ou um de seus corretores afiliados para entender o risco, bem como as recompensas da negociação de futuros usando sistemas de negociação. Se o trader estiver confortável com o programa, então o próximo passo é abrir uma conta de negociação e selecionar o (s) sistema (s) de negociação de futuros que melhor se adapte às tolerâncias de risco pessoal e aos objetivos de negociação do trader. Se o trader não se sentir confortável em operar o (s) sistema (s) de negociação de futuros selecionado (s), o (s) sistema (s) de negociação será (em) negociado (s) automaticamente (a) & # 8221; na conta de comerciantes para o benefício de comerciantes. O grupo que executa os sistemas não tem permissão para negociar futuros, portanto nosso foco é sempre fornecer ao trader o melhor serviço.
Quais são os riscos?
Qualquer um dos sistemas pode estar sujeito a riscos específicos específicos do mercado, específicos do sistema ou complexos. Ao negociar múltiplos sistemas de futuros em diferentes mercados, pode-se reduzir o risco específico específico do mercado e complexo. Ao negociar sistemas com diferentes estratégias de entrada e saída, o trader pode reduzir o risco específico do sistema. No entanto, o risco de negociação pode ser substancial e cada investidor e / ou trader deve considerar se este é um investimento adequado. O desempenho passado não é necessariamente indicativo de resultados futuros.
A Wisdom Trading é uma corretora de lançamento registrada pela NFA.
Oferecemos serviços globais de corretagem de mercadorias, consultoria de futuros administrados, negociação de acesso direto e serviços de execução de sistemas de negociação para pessoas físicas, corporações e profissionais do setor.
Como um corretor independente de introdução, mantemos relações de compensação com vários importantes Mercados da Comissão de Futuros em todo o mundo. Múltiplas relações de compensação nos permitem oferecer aos nossos clientes uma ampla gama de serviços e uma gama excepcionalmente ampla de mercados.
Nossas relações de compensação proporcionam aos clientes acesso 24 horas aos mercados de futuros, commodities e câmbio ao redor do mundo.
A negociação de futuros envolve um risco substancial de perda e não é adequada para todos os investidores. O desempenho passado não é indicativo de resultados futuros.

Idee por sistema de negociação
(Por Jonathan Simon)
É fácil se distanciar de uma grande coleção de padrões ou de uma linguagem de padrões. Padrões são a abstração de uma ideia de forma reutilizável. Muitas vezes, a natureza muito genérica dos padrões que os tornam tão úteis também os torna difíceis de entender. Às vezes, a melhor coisa para ajudar a entender os padrões é um exemplo do mundo real. Não é um cenário planejado do que poderia acontecer; mas o que realmente acontece e o que vai acontecer.
Este capítulo aplica padrões para resolver problemas usando um processo de descoberta. O sistema que discutiremos é um sistema de negociação de títulos com o qual trabalhei durante dois anos desde o projeto inicial até a produção. Vamos explorar cenários e problemas que foram encontrados e como resolvê-los com padrões. Isso envolve o processo de decisão de escolher um padrão, bem como combinar e ajustar padrões para atender às necessidades do sistema. E tudo isso é feito levando em conta as forças encontradas em sistemas reais, incluindo requisitos de negócios, decisões de clientes, requisitos técnicos e arquitetônicos, bem como integração de sistemas legados. A intenção desta abordagem é fornecer uma compreensão mais clara dos próprios padrões através da aplicação prática.
Construindo um sistema.
Um grande banco de investimento de Wall Street se propõe a construir um sistema de precificação de títulos em um esforço para simplificar o fluxo de trabalho de sua mesa de negociação de títulos. Atualmente, os corretores de títulos precisam enviar preços para um grande número de títulos para vários locais de negociação diferentes, cada um com sua própria interface de usuário. O objetivo do sistema é minimizar as minúcias de precificação de todos os seus títulos combinados com funcionalidades analíticas avançadas específicas do mercado de títulos em uma única interface de usuário encapsulada. Isso significa integração e comunicação com vários componentes em vários protocolos de comunicação. O fluxo de alto nível do sistema se parece com isso:
Fluxo de Alto Nível.
Primeiro, os dados de mercado entram no sistema. Os dados do mercado são dados sobre o preço e outras propriedades do título, representando o que as pessoas estão dispostas a comprar e vender o título no mercado livre. Os dados de mercado são enviados imediatamente ao mecanismo de análise que altera os dados. Analytics refere-se a funções matemáticas para aplicações financeiras que alteram os preços e outros atributos dos títulos. Estas são funções genéricas que usam variáveis ​​de entrada para adequar os resultados da função a um vínculo específico. O aplicativo cliente que será executado em cada desktop do comerciante configurará o mecanismo de análise por comerciante, controlando os detalhes da análise para cada título que o negociador estiver precificando. Uma vez que as análises são aplicadas aos dados de mercado, os dados modificados são enviados para vários locais de negociação onde os comerciantes de outras empresas podem comprar ou vender os títulos.
Arquitetura com padrões.
Com essa visão geral do fluxo de trabalho do sistema, podemos abordar alguns dos problemas de arquitetura que encontramos durante o processo de design. Vamos dar uma olhada no que sabemos até agora. Os traders precisam de um aplicativo muito responsivo nas estações de trabalho Windows NT e Solaris. Portanto, decidimos implementar o aplicativo cliente como um cliente thick Java devido à sua independência de plataforma e sua capacidade de responder rapidamente aos dados de entrada e de mercado do usuário. No lado do servidor, estamos herdando componentes C ++ legados que nosso sistema irá utilizar. Os componentes de dados de mercado se comunicam com a infra-estrutura de mensagens TIBCO Information Bus (TIB).
Estamos herdando os seguintes componentes:
Servidor de Feed de Preços de Dados de Mercado: Publica dados de mercado de entrada para o TIB. Mecanismo de análise: executa análises em dados de mercado de entrada e transmite os dados de mercado modificados para o TIB. Servidor de Contribuição: Executa toda a comunicação com os locais de negociação. As plataformas de negociação são componentes de terceiros não controlados pelo banco.
Subsistema de Dados de Mercado Legado.
Subsistema de Contribuição Legado.
Precisamos decidir como os subsistemas separados (cliente thick de Java, dados de mercado e contribuição) vão se comunicar. Poderíamos ter o cliente thick se comunicando diretamente com os servidores legados, mas isso exigiria muita lógica de negócios no cliente. Em vez disso, construiremos um par de gateways Java para nos comunicarmos com os servidores legados: o gateway de preços para dados de mercado, um gateway de contribuição para o envio de preços a locais de negociação. Isso alcançará um bom encapsulamento da lógica de negócios relacionada a essas áreas. Os componentes atuais no sistema são mostrados abaixo. As conexões marcadas como. • indicam que ainda não temos certeza de como alguns dos componentes se comunicarão.
O sistema e seus componentes.
A primeira questão de comunicação é como integrar o cliente thick Java e os dois componentes do servidor Java para trocar dados. Vejamos os quatro estilos de integração sugeridos neste livro: Transferência de Arquivos, Banco de Dados Compartilhado, Invocação de Procedimento Remoto e Mensagens. Podemos descartar o Banco de Dados Compartilhado imediatamente porque desejamos criar uma camada de abstração entre o cliente e o banco de dados e não queremos ter o código de acesso ao banco de dados no cliente. A transferência de arquivos também pode ser descartada, uma vez que a latência mínima é necessária para garantir que os preços atuais sejam enviados para os locais de negociação. Isso nos permite optar entre a Invocação de Procedimento Remoto ou o Envio de Mensagens.
A plataforma Java fornece suporte integrado para Invocação de Procedimento Remoto e Mensagens. A integração no estilo RPC pode ser obtida usando o Remote Method Invocation (RMI), o CORBA ou o Enterprise Java Beans (EJB). O Java Messaging Service (JMS) é a API comum para integração no estilo de mensagens. Portanto, ambos os estilos de integração são fáceis de implementar em Java.
Então, qual funcionará melhor para este projeto, Invocação de Procedimento Remoto ou Mensagens? Há apenas uma instância do Gateway de Precificação e uma instância do Contribution Gateway no sistema, mas geralmente muitos Clientes Claros conectam-se simultaneamente a esses serviços (um para cada comerciante de títulos que está conectado em um determinado momento). Além disso, o banco gostaria que este fosse um sistema genérico de preços que pode ser utilizado em outras aplicações. Portanto, além de um número desconhecido de Think Clients, pode haver um número desconhecido de outros aplicativos usando os dados de preços que saem dos Gateways.
Um Thick Client (ou outro aplicativo que usa os dados de precificação) pode facilmente usar o RPC para fazer chamadas para os Gateways para obter dados de preços e chamar o processamento. No entanto, os dados de preços serão constantemente publicados e determinados clientes estão interessados ​​apenas em determinados dados, portanto, pode ser difícil obter os dados relevantes para os clientes apropriados em tempo hábil. Os clientes podem pesquisar os Gateways, mas isso criará muita sobrecarga. Seria melhor que os Gateways disponibilizassem os dados aos clientes assim que estivessem disponíveis. Isso, no entanto, exigirá que cada Gateway monitore quais clientes estão ativos no momento e quais desejam dados específicos; então, quando um novo pedaço de dados se torna disponível (o que acontecerá várias vezes por segundo), o Gateway terá que fazer um RPC para cada cliente interessado para passar os dados para o cliente. Idealmente, todos os clientes devem ser notificados simultaneamente, portanto, cada RPC precisa ser feito em seu próprio encadeamento simultâneo. Isso pode funcionar, mas está ficando muito complicado muito rápido.
Mensagens simplifica muito este problema. Com o Messaging, podemos definir canais separados para os diferentes tipos de dados de preços. Em seguida, quando um Gateway receber um novo dado, ele adicionará uma mensagem contendo esses dados ao Publish-Subscribe Channel desse tipo de dados. Enquanto isso, todos os clientes interessados ​​em um determinado tipo de dados ouvirão o canal desse tipo. Desta forma, os Gateways podem enviar facilmente novos dados para quem estiver interessado, sem precisar saber quantos aplicativos de ouvinte existem ou quais são.
Os clientes ainda precisam ser capazes de invocar comportamentos nos Gateways também. Como há sempre apenas dois Gateways e o cliente provavelmente pode bloquear enquanto o método é chamado de forma síncrona, essas chamadas de cliente para gateway podem ser facilmente implementadas usando o RPC. No entanto, como já estamos usando o sistema de mensagens para comunicação entre o gateway e o cliente, as mensagens provavelmente são uma maneira igualmente boa de implementar a comunicação do cliente para o gateway.
Portanto, toda a comunicação entre os Gateways e os clientes será realizada por meio de mensagens. Como todos os componentes são escritos em Java, o JMS apresenta uma opção fácil para o sistema de mensagens. Isso está efetivamente criando um Message Bus ou uma arquitetura que possibilitará a integração de futuros sistemas com o sistema atual, com pouca ou nenhuma alteração na infra-estrutura do sistema de mensagens. Dessa forma, a funcionalidade de negócios do aplicativo pode ser facilmente usada por outro aplicativo desenvolvido pelo banco.
Componentes Java Comunicando com o JMS.
O JMS é simplesmente uma especificação e precisamos decidir sobre um sistema de mensagens compatível com o JMS. Decidimos usar o IBM MQSeries JMS porque o banco é uma "loja IBM", usando servidores de aplicativos WebSphere e muitos outros produtos IBM. Como resultado, usaremos o MQSeries, pois já temos uma infraestrutura de suporte e uma licença de site do produto.
A próxima pergunta é como conectar o sistema de mensagens do MQSeries ao servidor C ++ Contribution autônomo e aos servidores Market Data e Analytics Engine baseados no TIBCO. Precisamos de uma maneira de os consumidores do MQSeries terem acesso às mensagens do TIB. Mas como? Talvez pudéssemos usar o padrão Message Translator para traduzir mensagens TIB em mensagens do MQSeries. Embora o cliente C ++ para o MQSeries funcione como um Message Translator, usá-lo sacrificaria a independência do servidor JMS. E embora a TIBCO tenha uma API Java, o arquiteto e gerente do cliente a rejeitaram. Como resultado, a abordagem do Message Translator deve ser abandonada.
A ponte do servidor TIB para o servidor MQSeries requer comunicação entre C ++ e Java. Poderíamos usar o CORBA, mas e as mensagens? Uma análise mais detalhada do padrão Message Translator mostra que ele está relacionado ao Channel Adapter no uso de protocolos de comunicação. O coração de um adaptador de canal é conectar sistemas sem mensagem a sistemas de mensagens. Um par de adaptadores de canal que conecta dois sistemas de mensagens é uma ponte de mensagens.
O objetivo de uma ponte de mensagens é transferir mensagens de um sistema de mensagens para outro. Isso é exatamente o que estamos fazendo com a complexidade adicional da comunicação intra-linguagem de Java para C ++. Podemos implementar o Messaging Bridge entre linguagens usando uma combinação de Channel Adapters e CORBA. Vamos construir dois servidores leves de adaptador de canal, um em C ++ gerenciando a comunicação com o TIB e um em Java gerenciando a comunicação com o JMS. Esses dois Adaptadores de Canal, que são os próprios Endpoint da Mensagem, se comunicarão entre si via CORBA. Como nossa escolha para o MQSeries, usaremos CORBA em vez de JNI, já que é um padrão da empresa. A ponte de mensagens implementa a tradução de mensagens efetivamente simulada entre sistemas de mensagens aparentemente incompatíveis e diferentes idiomas.
Tradutor de mensagens usando adaptadores de canal.
O diagrama a seguir mostra o design atual do sistema, incluindo os Gateways e outros componentes. Este é um bom exemplo de aplicação de padrões. Combinamos dois Channel Adapters com um protocolo sem mensagem para implementar o padrão Message Translator, usando efetivamente um padrão para implementar outro padrão. Além disso, alteramos o contexto do adaptador de canal s para vincular dois sistemas de mensagens a um protocolo de conversão de texto cruzado sem mensagem, em vez de conectar um sistema de mensagens a um sistema sem sistema de mensagens.
O sistema atual com os adaptadores de canal.
Estruturando Canais.
Uma chave para trabalhar com padrões não é apenas saber quando usar o padrão, mas também como usá-lo de maneira mais eficiente. Cada implementação de padrão deve levar em conta detalhes específicos da plataforma de tecnologia, bem como outros critérios de design. Esta seção aplica o mesmo processo de descoberta para encontrar o uso mais eficiente do Publish-Subscribe Channel no contexto do servidor de dados de mercado que se comunica com o mecanismo de análise.
Os dados de mercado em tempo real originam-se do feed de dados de mercado, um servidor C ++ que transmite dados de mercado no TIB. O feed de dados de mercado usa um canal de publicação separado para cada vínculo para o qual está publicando os preços. Isso pode parecer um pouco extremo, já que cada novo vínculo precisa de seu próprio novo canal. Mas isso não é tão grave, já que você não precisa criar canais no TIBCO. Em vez disso, os canais são referenciados por um conjunto hierárquico de nomes de tópicos chamados assuntos. O servidor TIBCO então filtra um único fluxo de mensagens por assunto, enviando cada assunto único para um único canal virtual. O resultado é um canal de mensagens muito leve.
Poderíamos criar um sistema que publicasse em alguns canais e os assinantes pudessem ouvir apenas os preços em que estivessem interessados. Isso exigiria que os assinantes usassem um Filtro de Mensagens ou Consumidor Seletivo para filtrar todo o fluxo de dados por preços de títulos interessantes, decidindo se cada mensagem deve ser processado conforme é recebido. Dado que os dados de mercado são publicados em canais dedicados a títulos, os assinantes podem se registrar para atualizações de uma série de títulos. Isso permite que os assinantes "filtrem" seletivamente assinando canais e recebendo apenas atualizações de interesse, em vez de decidir depois que a mensagem é recebida. É importante observar que o uso de vários canais para evitar a filtragem é um uso não padronizado de canais de mensagens. No contexto da tecnologia TIBCO, no entanto, estamos realmente decidindo se implementamos ou possuímos filtros ou utilizamos a filtragem de canais incorporada ao TIBCO - em vez de usar tantos canais.
O próximo componente que precisamos projetar é o mecanismo de análise, outro servidor C ++ / TIB que modificará os dados de mercado e o retransmitirá para o TIB. Embora esteja fora do escopo do nosso desenvolvimento Java / JMS, estamos trabalhando em conjunto com a equipe do C ++ para projetá-lo, já que somos o principal 'cliente' do mecanismo de análise. O problema em questão é encontrar a estrutura de canal que retransmite de maneira mais eficiente os dados de mercado recém-modificados.
Como já temos um Canal de Mensagem dedicado por vínculo herdado do feed de preço de dados de mercado, seria lógico modificar os dados de mercado e retransmitir os dados de mercado modificados no Canal de Mensagem dedicado de vínculo. Mas isso não funcionará, já que as análises que modificam os preços dos títulos são específicas do trader. Se retransmitirmos os dados modificados no Canal de Mensagens, destruiremos a integridade dos dados, substituindo dados genéricos de mercado por dados específicos do trader. Por outro lado, poderíamos ter um tipo de mensagem diferente para dados de mercado específicos do negociador que publicamos no mesmo canal, permitindo que os assinantes decidam em qual mensagem eles estão interessados ​​para evitar a destruição da integridade dos dados. Mas os clientes terão que implementar seus próprios filtros para separar as mensagens de outros comerciantes. Além disso, haverá um aumento substancial nas mensagens recebidas pelos assinantes, sobrecarregando-as desnecessariamente.
Existem duas opções:
Um canal por comerciante: Cada comerciante tem um canal designado para os dados de mercado modificados. Dessa forma, os dados originais do mercado permanecem intactos e cada aplicativo negociador pode ouvir o Canal de Mensagem de seus operadores específicos para as atualizações de preço modificadas. Um Canal por negociante por Obrigação: Crie um Canal de Mensagem por comerciante por título apenas para os dados de mercado modificados desse título. Por exemplo, os dados de mercado para o título ABC seriam publicados no canal "Bond ABC", enquanto os dados de mercado modificados para o negociador A seriam publicados no Canal de Mensagens "Trader A, Bond ABC", dados de mercado modificados para o comerciante B em "Trader B , Bond ABC ", e assim por diante.
Um canal por trader.
Um canal por vínculo por trader.
Existem vantagens e desvantagens para cada abordagem. A abordagem por ligação, por exemplo, usa muito mais o Message Channel. Na pior das hipóteses, o número de canais de mensagens será o número total de títulos multiplicado pelo número de operadores. Podemos colocar limites superiores no número de canais que serão criados, uma vez que sabemos que existem apenas cerca de 20 traders e eles nunca têm preço superior a algumas centenas de títulos. Isso coloca o limite superior abaixo do intervalo de 10.000, o que não é tão estranho comparado aos quase 100.000 Message Channel que o feed de preço de dados de mercado está usando. Além disso, como estamos usando o TIB e o Message Channel são muito baratos, o número de Message Channel s não é um problema grave. Por outro lado, o grande número de canais de mensagens pode ser um problema do ponto de vista gerencial. Toda vez que um título é adicionado, um canal para cada negociador deve ser mantido. Isso pode ser grave em um sistema muito dinâmico. Nosso sistema, no entanto, é essencialmente estático. Também possui uma infraestrutura para gerenciar automaticamente os Message Channel. Isso combinado com a arquitetura herdada de um componente legado usando uma abordagem semelhante minimiza a desvantagem. Isso não quer dizer que devemos fazer um número desnecessariamente excessivo de MessageScan. Em vez disso, podemos implementar uma abordagem arquitetônica que usa um grande número de canais de mensagens quando há um motivo.
E há uma razão neste caso que se resume à localização da lógica. Se implementarmos a abordagem por negociador, o mecanismo do Google Analytics precisa de lógica para agrupar os canais de entrada e saída. Isso ocorre porque os canais de entrada do Mecanismo do Google Analytics são por vínculo e os canais de mensagens de saída seriam por comerciante, exigindo que o Mecanismo do Google Analytics direcione todas as entradas analíticas de vários títulos de um determinado negociante para um Canal de mensagens de saída específico do negociante. Isso transforma efetivamente o mecanismo de análise em um roteador baseado em conteúdo para implementar a lógica de roteamento personalizada para nosso aplicativo.
Seguindo a estrutura do Message Bus, o Mecanismo do Analytics é um servidor genérico que pode ser usado por vários outros sistemas no. Portanto, não queremos obscurecer a funcionalidade específica do sistema. Por outro lado, a abordagem per-bond funciona desde que a ideia de um negociante que possui a saída analítica dos preços dos títulos é uma prática aceita pela empresa. A abordagem por ligação mantém intacta a separação do canal de mensagens do feed de dados de mercado, enquanto adiciona vários outros canais de mensagens. Antes de chegarmos ao cliente, queremos que um roteador baseado em conteúdo combine esses vários canais em um número gerenciável de canais. Não queremos que o aplicativo cliente em execução na área de trabalho do trader esteja ouvindo milhares ou dezenas de milhares de canais de mensagens. Agora a questão é onde colocar o roteador baseado em conteúdo. Poderíamos simplesmente ter o adaptador de canal C ++ / TIB encaminhando todas as mensagens para o gateway de preços em um único canal de mensagem. Isso é ruim por dois motivos; estaríamos dividindo a lógica de negócios entre C ++ e Java, e perderíamos o benefício dos Message Channel s separados no lado do TIB, o que nos permitiria evitar a filtragem mais tarde no fluxo de dados. Analisando nossos componentes Java, podemos colocá-lo no gateway de preços ou criar um componente intermediário entre o gateway de preços e o cliente.
Em teoria, se persistíssemos na separação baseada em títulos do Message Channel até o cliente, o Gateway de preços retransmitia informações de preço com a mesma estrutura de canal que o Gateway de preços e o Mecanismo do Google Analytics. Isso significa uma duplicação de todos os canais TIB dedicados à ligação no JMS. Mesmo se criarmos um componente intermediário entre o gateway de preços e o cliente, o gateway de preços ainda terá que duplicar todos os canais no JMS. Por outro lado, implementar a lógica diretamente no gateway de preços nos permite evitar a duplicação do grande número de canais no JMS - o que nos permite criar um número muito menor de canais na ordem de um por trader. O Gateway de Preços registra-se através do Adaptador de Canal C ++ / TIB como um consumidor para cada ligação de cada operador no sistema. Em seguida, o gateway de preços encaminhará cada cliente específico apenas as mensagens relacionadas a esse comerciante em particular. Dessa forma, usamos apenas um pequeno número de Message Channel no final do JMS, enquanto maximizamos o benefício da separação no final do TIB.
O Fluxo de Dados de Mercado completo para o cliente.
A discussão do layout do Message Channel é um bom exemplo de como a integração de padrões é importante. O objetivo aqui era descobrir como usar efetivamente os canais de mensagens. Dizer que você usa um padrão não é suficiente. Você precisa descobrir como melhor implementá-lo e incorporar em seu sistema para resolver os problemas em questão. Além disso, este exemplo mostra as forças de negócios em ação. Se pudéssemos implementar a lógica de negócios em qualquer um dos nossos componentes, poderíamos ter seguido a abordagem por negociador e implementado uma abordagem geral mais simples com muitos menos canais.
Selecionando um canal de mensagens?
Agora que conhecemos a mecânica da comunicação entre os componentes Java / JMS e os componentes C ++ / TIBCO, e vimos alguma estruturação do Canal de Mensagens, precisamos decidir qual tipo de Canal de Mensagens JMS os componentes Java devem usar para se comunicar. Antes de podermos escolher entre os diferentes canais de mensagem disponíveis no JMS, vejamos o fluxo de mensagens de alto nível do sistema. Temos dois gateways (Preços e Contribuição) comunicando-se com o cliente. Os dados de mercado são enviados para o cliente a partir do Gateway de preços, que os envia para o Contribution Gateway. O aplicativo cliente envia uma mensagem para o gateway de preços para alterar as análises aplicadas a cada vínculo. O Contribution Gateway também envia mensagens para o aplicativo Cliente, transmitindo o status das atualizações de preços para os diferentes locais de negociação.
O fluxo de mensagens do sistema.
A especificação JMS descreve dois tipos de Canal de Mensagem, Canal Ponto-a-Ponto (Fila JMS) e Canal de Publicação-Assinatura (Tópico JMS). Lembre-se de que o caso de usar publicação-assinatura é permitir que todos os consumidores interessados ​​recebam uma mensagem, enquanto o caso de usar ponto-a-ponto é garantir que apenas um consumidor qualificado receba uma mensagem em particular.
Muitos sistemas simplesmente transmitiam mensagens para todos os aplicativos clientes, deixando que cada aplicativo cliente individual decidisse por si mesmo se processaria ou não uma determinada mensagem. Isso não funcionará para nosso aplicativo, pois há um grande número de mensagens de dados de mercado sendo enviadas para cada aplicativo cliente. Se transmitirmos atualizações de dados de mercado para um trader desinteressado, estaremos desnecessariamente desperdiçando ciclos de processadores de clientes decidindo se processamos ou não uma atualização de dados de mercado.
Inicialmente, os canais ponto a ponto soam como uma boa escolha, já que os clientes estão enviando mensagens para servidores únicos e vice-versa. Mas era um requisito de negócios que os operadores pudessem estar logados em várias máquinas ao mesmo tempo. Se tivermos um trader logado em duas estações de trabalho simultaneamente e uma atualização de preço ponto-a-ponto for enviada, somente um dos dois aplicativos cliente receberá a mensagem. Isso ocorre porque apenas um consumidor em um canal ponto a ponto pode receber uma mensagem específica. Observe que apenas o primeiro de cada grupo de aplicativos clientes de um comerciante recebe a mensagem.
Mensagens ponto-a-ponto para atualizações de preços.
Podemos resolver isso usando o padrão Recipient List, que publica mensagens para uma lista de destinatários pretendidos, garantindo que apenas os clientes na lista de destinatários recebam mensagens. Usando esse padrão, o sistema poderia criar listas de destinatários com todas as instâncias do aplicativo cliente relacionadas a cada comerciante. Enviar uma mensagem relacionada a um determinado operador, por sua vez, enviaria a mensagem para cada aplicativo na lista de destinatários. Isso garante que todas as instâncias do aplicativo cliente relacionadas a um determinado operador recebam a mensagem. A desvantagem dessa abordagem é que ela requer um pouco de lógica de implementação para gerenciar os destinatários e despachar mensagens.
Lista de Destinatários para Atualizações de Preços.
Mesmo que o ponto-a-ponto possa funcionar, vamos ver se existe uma maneira melhor. Usando Publish-Subscribe Channel s, o sistema pode transmitir mensagens em canais específicos do comerciante, em vez de canais específicos de aplicativos do cliente. Desta forma, todas as aplicações do cliente processando mensagens para um único operador receberiam e processariam a mensagem.
Publicação-Assinatura de Mensagens para Atualizações de Preços.
A desvantagem de usar Publish-Subscribe Channel s é que o processamento exclusivo de mensagens não é garantido com os componentes do servidor. Seria possível que várias instâncias de um componente do servidor fossem instanciadas e cada instância processasse a mesma mensagem, possivelmente enviando preços inválidos.
Recordando o fluxo de mensagens do sistema, apenas uma única direção de comunicação é satisfatória com cada Canal de Mensagem. A comunicação servidor-cliente com publicação-assinatura é satisfatória, enquanto a comunicação cliente-servidor não é e a comunicação cliente-servidor com ponto-a-ponto é satisfatória, enquanto o servidor-cliente não é satisfatório. Como não há necessidade de usar o mesmo Message Channel em ambas as direções, podemos usar cada Message Channel apenas em uma direção. A comunicação de cliente para servidor será implementada com ponto a ponto, enquanto a comunicação servidor a cliente será implementada com publicação-assinatura. Usando essa combinação de Message Channel, o sistema se beneficia da comunicação direta com os componentes do servidor usando o sistema de mensagens ponto-a-ponto e a natureza multicast da publicação-assinatura sem nenhum dos inconvenientes.
Fluxo de mensagens com tipos de canais.
Solução de problemas com padrões.
Padrões são ferramentas e coleções de padrões são caixas de ferramentas. Eles ajudam a resolver problemas. Alguns pensam que os padrões são úteis apenas durante o design. Seguindo a analogia da caixa de ferramentas, isso é como dizer que as ferramentas são úteis apenas quando você constrói uma casa, não quando você a conserta. O fato é que os padrões são uma ferramenta útil em todo o projeto, quando bem aplicados. Nas seções a seguir, usaremos o mesmo processo de exploração de padrão que usamos na seção anterior para resolver problemas em nosso sistema atual.
Atualizações de dados de mercado piscando.
Os traders querem que as células da mesa pisquem quando novos dados de mercado são recebidos por um título, indicando claramente mudanças. O cliente Java recebe mensagens com novos dados que acionam uma atualização do cache de dados do cliente e, eventualmente, piscam na tabela. O problema é que as atualizações vêm com bastante frequência. A pilha de threads da GUI está ficando sobrecarregada e, eventualmente, congelando o cliente, já que ele não pode responder à interação do usuário. Vamos supor que o flash é otimizado e se concentrar no fluxo de dados das mensagens através do processo de atualização. Um exame dos dados de desempenho mostra que o aplicativo cliente está recebendo várias atualizações por segundo; algumas atualizações ocorreram com menos de um milissegundo de intervalo. Dois padrões que parecem ajudar a desacelerar o fluxo de mensagens são Agregador e Filtro de Mensagens.
Um primeiro pensamento é implementar um Filtro de Mensagens para controlar a velocidade do fluxo de mensagens, lançando as atualizações recebidas por um curto período de tempo após a mensagem de referência. Como exemplo, digamos que vamos ignorar mensagens dentro de 5 milissegundos uma da outra. O Filtro de Mensagens pode armazenar em cache a hora da última mensagem aceitável e rejeitar qualquer coisa recebida nos próximos 5 milissegundos. Embora outras aplicações possam não ser capazes de resistir à perda de dados de tal forma, isso é perfeitamente aceitável em nosso sistema devido à frequência de atualizações de preços.
Filtro de mensagens baseado em tempo.
O problema com essa abordagem é que nem todos os campos de dados são atualizados ao mesmo tempo. Cada título possui aproximadamente 50 campos de dados exibidos ao usuário, incluindo o preço. Percebemos que nem todo campo é atualizado em todas as mensagens. Se o sistema ignorar mensagens consecutivas, pode muito bem estar jogando dados importantes.
O outro padrão de interesse é o Agregador. O Agregador é usado para gerenciar a reconciliação de várias mensagens relacionadas em uma única mensagem, reduzindo potencialmente o fluxo de mensagens. O Agregador pode manter uma cópia dos dados de ligação da primeira mensagem agregada e, em seguida, atualizar apenas as mensagens sucessivas de campos novos ou alterados. Eventualmente, os dados de ligação agregados serão passados ​​em uma mensagem para o cliente. Por enquanto, vamos supor que o Agregador enviará uma mensagem a cada 5 milissegundos, como o Filtro de Mensagens. Mais tarde, vamos explorar outra alternativa.
Agregador com atualizações sucessivas parciais.
O Agregador, como qualquer outro padrão, não é uma bala de prata; tem suas vantagens e desvantagens que precisam ser exploradas. Um potencial menos é que a implementação de um Agregador reduziria o tráfego de mensagens em grande quantidade em nosso caso apenas se muitas mensagens estivessem chegando em um tempo relativamente curto em relação ao mesmo vínculo. Por outro lado, não conseguiríamos nada se o cliente Java receber apenas atualizações para um campo em todos os títulos de traders. Por exemplo, se recebermos 1000 mensagens em um período de tempo especificado com 4 títulos de interesse, reduziríamos o fluxo de mensagens de 1.000 para 4 mensagens durante esse período. Alternativamente, se recebermos 1000 mensagens no mesmo período com 750 títulos de interesse, teremos reduzido o fluxo de mensagens de 1.000 para 750 mensagens; relativamente pouco ganho para a quantidade de esforço. A quick analysis of the message updates proves that the Java client receives many messages updating fields of the same bond, and therefore related messages. So, Aggregator is in fact a good decision.
What's left is to determine how the Aggregator will know when to send a message it has been aggregating. The pattern describes a few algorithms for the Aggregator to know when to send the message. These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others. The problem with all of these approaches is that the aggregator is controlling the message flow, not the client. And the client is the major bottleneck in this case, not the message flow.
This is because the Aggregator is assuming the consumers of its purged messages (the client application in this case) are Event-Driven Consumer s, or consumers that rely on events from an external source. We need to turn the client into a Polling Consumer , or a consumer that continuously checks for messages, so the client application can control the message flow. We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration. This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods. We can easily implement this by sending a Command Message to the Aggregator initiating an update. The Aggregator will respond with a Document Message containing the set of updated fields that the client will process.
The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system. Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity.
Major Production Crash.
With the performance of the flashing fixed, we are now in production. One day the entire system goes down. MQSeries crashes, bringing several components down with it. We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue (an implementation of the Dead Letter Channel ). The queue grows so large that it brings down the entire server. After exploring the messages in the dead letter queue we find they are all expired market data messages. This is caused by “slow consumers, ” or consumers that do not process messages fast enough. While messages are waiting to be processed, they time out (see the Message Expiration pattern) and are sent to the Dead Letter Channel . The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great – messages expire before the target application can consume them. We need to fix the message flow and we turn to patterns for help slowing down the message flow.
A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem. The system design relies on the client application to immediately forward market data update messages to the trading venues. This means the system cannot wait to collect messages and aggregate them. So the Aggregator must be abandoned.
There are two other patterns that deal with the problem of consuming messages concurrently: Competing Consumers and Message Dispatcher . Starting with Competing Consumers , the benefit of this pattern is the parallel processing of incoming messages. This is accomplished using several consumers on the same channel. Only one consumer processes each incoming message leaving the others to process successive messages. Competing Consumers , however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication. Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message. This results in more work without any gain and completely misses the goal of the pattern. This approach also has to be abandoned.
On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a вЂ˜pool’. Each consumer can run its own execution thread. One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel . This achieves the parallel processing benefit of Competing Consumers , but works on Publish-Subscribe Channel s.
The Message Dispatcher in context.
Implementing this in our system is simple. We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers. When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message. The result of which is a Message Listener (the Dispatcher) that always returns immediately. This guarantees a steady flow of message processing regardless of the message flow rate. Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s. With this infrastructure, messages can be received by the client application at almost any rate. If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel .
The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns. We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel. This greatly improved the problem, but did not completely fix it. This is because the real problem was the client becoming a bottleneck. This couldn’t be fixed with a thousand patterns. We later addressed this problem by refactoring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway. So patterns can help design and maintain a system, but don’t necessarily make up for poor upfront design.
Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns. We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems. Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems. Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems.

Come Affrontare i Mercati coi Trading System.
Noto per essere l'unico quattro volte campione del mondo di Trading (2008, 2009, 2010 e 2012), Andrea Unger è trader professionsta dal 2001 e parte del Comitato Scientifico della SIAT (Società Italiana Analisi Tecnica).
Autore apprezzato, è spesso ospite di convegni in Europa, Stati Uniti e Asia.
Impara le basi del trading automatico!
Ecco quello che imparerai:
I Falsi Miti del Trading Il Corretto Approccio al Trading Gli Errori più Comuni dei Trader alle Prime Armi Il Trading come Business Trading Part-Time o Full-Time? L'Evoluzione del Trader di Successo I Tipi di Mercato Gli Strumenti Cosa Sono i Trading System Il Backtesting Il Timeframe Costruire un Trading System Le Famiglie di Trading System L'Overfitting Il Rumore Domande a cui Rispondere Prima di Entrare nel Mercato Un Sistema Parametrico Un Sistema su un Mercato Specifico Implementare la Strategia Come Capire se la Strategia si è Rotta e Come Procedere Dove Prendere Idee di Trading La Psicologia I Costi di un Trading Professionale.
Inizia subito il tuo percorso verso l'eccellenza nel trading automatico!
Ti aspettiamo dall'altra parte.
Curriculum.
Andrea, ho acquistato per la prima volta un tuo corso di formazione e sinceramente ne sono rimasto molto soddisfatto! :-)
Oltre ad essere chiaro e semplice nei concetti, dimostri di essere un vero e proprio Leader del settore finanziario.
Per questo mi affianco alla tua vasta esperienza per l'approccio a questo mondo assai difficile.
Perguntas frequentes.
Tutti i contenuti del corso sono in italiano ma alcune parti del sito non sono direttamente traducibili.
Ad ogni modo non preoccuparti: se ti trovi in difficoltà contattaci subito e ti aiuteremo a risolvere il problema!

Комментариев нет:

Отправить комментарий