Exercício programa para MAC5796



Documentos relacionados
A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Introdução a Java. Hélder Nunes

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

SISTEMAS DISTRIBUÍDOS

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Orientação a Objetos

Sistemas Paralelos e Distribuídos /2004 Curso: Matemática /Informática Sistemas Distribuídos /2004 Curso: Ensino da Informática

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Manual de Integração

Invocação de Métodos Remotos

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Tutorial para envio de comunicados e SMS

PAINEL GERENCIADOR DE S

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

INF1013 MODELAGEM DE SOFTWARE

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

Manual SAGe Versão 1.2 (a partir da versão )

insfcanceof new public switch transient while byte continue extends for int null

Alertas ComStop Manual de Instruções

Tutorial para envio de comunicados

Projeto de Software Orientado a Objeto

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Síntese das discussões do fórum Livro-APF: Julho/2010

Manual de Utilização

Implementando uma Classe e Criando Objetos a partir dela

Manual de utilização da Ferramenta para disparo de E-mkt

MANUAL TISS Versão

Manual do sistema SMARsa Web

Sistemas Distribuídos

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Escritório Virtual Administrativo

Operador de Computador. Informática Básica

MANUAL DO CIDADÃO. Para acessar a página do E-SIC clique no link do e-sic na página inicial do site (figura 1):

Sistema de Cancelamento Eletrônico. Manual de utilização do sistema pelo cartório

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

Assessoria Técnica de Tecnologia da Informação - ATTI. Projeto de Informatização da. Secretaria Municipal de Saúde do. Município de São Paulo

Cartilha da Nota Fiscal Eletrônica do Hábil Empresarial Profissional 7.0. Obrigado por usar nosso software! Koinonia Software Ltda.

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

Manual Do Usuário Processo Licitação

Manual Portal Ambipar

Java : Comunicação Cliente-Servidor.

Prototype, um Design Patterns de Criação

O Komunik é uma ferramenta de comunicação interna que permite a interação completa entre todos os setores de uma empresa.

1- Requisitos mínimos. 2- Instalando o Acesso Full. 3- Iniciando o Acesso Full pela primeira vez

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

PARANÁ GOVERNO DO ESTADO

Cadastro de Corretores Manual do Usuário

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Grupo I [7v] 1. [1,0] Apresente o conteúdo do IDL relativo a este programa. Assuma PROGRAM=62015 e VERSION=1.

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

MANUAL DO ALUNO PARA NAVEGAR NO AMBIENTE VIRTUAL DE APRENDIZAGEM - AVA

Safeweb DLL biblioteca para desenvolvimento

NOTA FISCAL ELETRÔNICA

Sistema de Compras TV Globo

Manual de utilização do site de contatos

Especificação de Requisitos

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro

Sumário INTRODUÇÃO... 4 PROTOCOLO ARP...5 ARP - ADDRESS RESOLUTION PROTOCOL...5 FUNCIONAMENTO DO PROTOCOLO ARP...5 CACHE ARP... 6

Um pouco do Java. Prof. Eduardo

Software. Gerenciamento de Manutenção

ÍNDICE MANUAL SITE ADMINISTRÁVEL TV. 1. Introdução 2. Acessando o site administrável/webtv SITE ADMINISTRÁVEL 3. CONFIGURAÇÕES

Exercícios de Revisão Java Básico

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Design de IHC Design da Comunicação Modelos de Interação

BEM-VINDO AO dhl PROVIEW

Manual de Utilização do Sistema de Digitação de Pedidos Off-line

- Acessar o sistema. Para acessar o sistema digite o endereço eletronico e clique em login na barra de menus.

Manual de Integração

3 Dicas MATADORAS Para Escrever s Que VENDEM Imóveis

Enterprise Java Beans

Manual do Usuário CFCWeb BA

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

MANUAL DO SISTEMA GT WEB CALL. Teledata

Desenvolvendo Websites com PHP

1. Escritório Virtual Atualização do sistema Instalação e ativação do sistema de Conexão...5

Manual Passo a Passo

PORTAL DE COMPRAS SÃO JOSÉ DO RIO PRETO

Análise de Ponto de Função

MANUAL DO USUÁRIO. Guia de orientações e conceitos para manipulação da plataforma Miraklon. VERSÃO Vigência

Gravando uma Áudio Conferência

Como mandar mensagens OSC pelo Flash via Flosc

Manual Ilustrado Repasse de Honorários Médicos

1 Essa é a tela de login do Sistema de Atendimento Online, siga o passo a passo abaixo.

Licenciamento por volume da Adobe

SISTEMA DE GERENCIAMENTO DE PROJETOS - REDMINE MANUAL DE USO

AQUI SEGUEM OS TÓPICOS TRATADOS NESSE GUIA, PARA QUE VOCÊ APRENDA A USAR O SISTEMA CLUBE TURISMO MOBILE.

Transcrição:

Exercício programa para MAC5796 Walter Mascarenhas e Helton Rosa 9 de setembro de 2008 Resumo Esse documento explica dois aspectos do exercício programa para MAC5796: o processo de invocação remota de métodos em Java (RMI) e a versão simplificada do protocolo FIX que será usada nesse exercício programa. 1 Introdução Para melhor apreciar a parte teórica do curso MAC5796, você deverá implementar uma versão prática de uma estratégia de negociação, como descrita neste texto. O exercício programa procura oferecer um meio termo entre os milhões de detalhes da implementação real de uma estratégia de negociação e as discussões puramente teóricas sobre o assunto. Você deverá gastar algum tempo lidando como os detalhes técnicos descritos nas próximas seções (para aprender sobre o mundo real), mas passada essa fase poderá se dedicar à produção da sua estratégia vencedora de negociação. Na prática, a infraestrutura de comunicação entre corretoras e bolsas é um aspecto muito importante da negociação eletrônica. Essa infraestrutura envolve aspectos de hardware e software que fogem muito do escopo de MAC5796. Para que você tenha pelo menos um gostinho do que ocorre nessa área, usaremos uma tecnologia de comunicação entre processos chamada RMI. Essa tecnologia, ligada à linguagem Java, permitirá que o seu programa que implementa a sua estratégia de negociação, se comunique com um simulador de uma bolsa de valores e negocie nela. Portanto, você precisará aprender Java e RMI. A seção 2 te dará um empurrão inicial nessa direção, mas esperamos que a partir dela você se vire e aprenda o que tiver que aprender por si só. Atualmente, na maioria das bolsas, a infraestrutura do parágrafo acima transmite mensagens no formato FIX, que pode ser pensado como uma língua universal de comunicação no mercado financeiro. FIX não é tão complicado assim e como parte do exercício programa você experimentará com esse protocolo: as 1

mensagens enviadas e recebidas pelo seu programa estarão nesse formato. Usaremos no curso uma versão mínima do FIX que permite executar as tarefas básicas necessárias para a negociação eletrônica. Essa versão mínima está descrita na seção 3. 2 RMI A comunicação com a bolsa do curso de MAC5796 ocorre como na figura abaixo: Nessa figura, Simulador é o simulador que receberá e executará as ordens. IBolsa é a interface RMI publicada pelo simulador para que as corretoras o acessem. ICorretora é a interface publicada pela sua estratégia para que o simulador a acesse. SuaEstrategia é o seu programa, escrito na linguagem Java e que publica a sua ICorretora. Para enviar mensagens ao simulador a sua estratégia referenciará um objeto que implementa a interface IBolsa via RMI 1. import java.rmi.remote; import java.rmi.remoteexception; public interface IBolsa extends Remote { public String enviarmensagem( String mensagem ) throws RemoteException; Isso pode ser feito como no exemplo abaixo 1 Para uma descrição de RMI, veja http://www.guj.com.br/java.tutorial.artigo.37.1.guj. 2

try { IBolsa bolsa = (IBolsa) Naming.lookup( "rmi://localhost/bolsaservice" ); bolsa.enviarmensagem("bom dia!!!!"); catch( MalformedURLException e ) { System.out.println(); System.out.println( "MalformedURLException: " + e.tostring() ); catch( RemoteException e ) { System.out.println(); System.out.println( "RemoteException: " + e.tostring() ); catch( NotBoundException e ) { System.out.println(); System.out.println( "NotBoundException: " + e.tostring() ); catch( Exception e ) { System.out.println(); System.out.println( "Exception: " + e.tostring() ); Esse trecho de código enviará uma mensagem de Bom dia!!! ao simulador, que por sua vez responderá de forma não muito amigável pois ele só aceita mensagens no formato FIX. Por outro lado, para receber ExecutionReports e dados de mercado(veja a seção sobre FIX abaixo), você precisará cadastrar a sua estratégia no RMIRegistry, através de um objeto que implementa a interface ICorretora: import java.rmi.remote; import java.rmi.remoteexception; public interface ICorretora extends Remote { public String enviarmensagem( String mensagem ) throws RemoteException; O cadastro pode ser feito, por exemplo, assim: import java.rmi.naming; public class MinhaCorretora extends UnicastRemoteObject implements ICorretora { public String enviarmensagem(string mensagem) throws RemoteException { return "Agora não, depois eu mando"; 3

public class MinhaEstrategia { public MinhaEstrategia() { public static void main(string[] args) { try { ICorretora corretora = new MinhaCorretora(); Naming.rebind("rmi://localhost:1099/Corretora"+meuID+"Service", corretora); catch( Exception e ) { System.out.println( "Trouble: " + e ); O método main acima permite que o simulador obtenha uma referência à sua corretora acessando a entrada "rmi://localhost:1099/corretora"+meuid+"service" no RMIRegistry e mande mensagens à ela (o meuid é um identificador individual seu que será definido pelo professor). 3 O protocolo FIX O protocolo FIX é um padrão cada vez mais utilizado para a troca de mensagens no mercado financeiro. Uma mensagem FIX é composta por campos texto, na forma tag= valor, separados pelo caracter \2. Toda mensagem tem um cabeçalho e um rodapé, descritos na subseção 3.1, e um corpo. Grosso modo há dois tipos de mensagens: tratamento de ordens e dados de mercado. As mensagens de tratamento de ordens, descritas na seção 3.2, estão relacionadas à execução, cancelamento e alteração de ofertas. Os dados de mercado são enviados pela bolsa com informações sobre o estado do livro de ordens e os negócios realizados. Eles são descritos na seção 3.4. 3.1 Cabeçalho e rodapé das mensagens Todas as mensagens tem um cabeçalho com os campos descritos abaixo e terminam com 10=n, onde n é um CheckSum da mensagem, que será ignorado nesse 4

exercício programa. Cabeçalho 8 BeginString string Deve ser preenchido com FIX.4.4 9 BodyLength int Número de bytes do corpo da mensagem (excluindo header e check sum) 35 MsgType string Tipo da mensagem. Pode ser X,W, Y, V, D, F, j, 8, 9 49 SenderCompID string Signatário da mensagem. BOLSA ou id fornecida ao aluno. 56 TargetCompID string Destinatário da mensagem. BOLSA ou id fornecida ao aluno. 52 SendingTime UTCTimestamp Tempo UTC do envio da mensagem. O cabeçalho de uma mensagem enviada à Bolsa para pedido de dados de mercado seria: 8=FIX.4.4 9=50 35=V 49=agente007 56=Bolsa 52=04/09/2008 00:00:00 10=5 lembrando que o espaço em branco que separa os campos são na verdade o caracter \2.Em 9=50, 50 é o número de bytes de 35=V até o \2 antes do 10=5(rodapé). 3.2 Instruções Esta seção descreve as ordens relativas ao tratamento de ofertas. Há mensagens para envio, cancelamento e mudança de ofertas e respostas a elas. 3.2.1 New Order Single(MsgType = D) New order single é a mensagem usada para fazer ofertas. 5

New order single (D) Campo Nome Formato Obrigatório Descrição 11 ClOrdID string Sim Id atribuído à ordem pelo aluno que a enviou 54 Side Char Sim 1 = compra, 2 = venda 38 OrderQty int Sim número de contratos 110 MinQty int Não quantidade mínima a ser executada (pode ser 0) 111 MaxFloor int Não Número máximo de contratos exibidos no livro. 40 OrderType char Sim 2 = limitada, 4 = stop limitada, K = a mercado com resto como limitada 44 Price double Se for limitada Preço por contrato 99 StopPx int Se for stop Preço de disparo Por exemplo, caso o id da última ordem tenha sido 2000 e desejemos lançar uma ordem StopLimit de compra de 100 ações com preço de disparo de R$9.00 e preço de compra R$10.00, que só aceite um mínimo de 10 ações por negócio e onde o livro mostre no máximo 20 ações, devemos enviar como corpo da mensagem o seguinte:... 11=2001 54=1 38=100 110=10 111=20 40=4 44=9.00 99=10.00... 3.2.2 Execution Report(MsgType=8) Após a corretora enviar uma mensagem, ela receberá como resposta uma outra mensagem do tipo Execution Report que indicará o efeito da mensagem enviada. 6

Execution report (8) 37 OrderId string Identificador atribuído à ordem pela bolsa 11 ClOrdId string Identificador atribuído à ordem enviada, pelo cliente 150 ExecType char Ação geradora do relatório. 0 = nova, 4 = cancelamento de oferta, 8 = rejeição, F = negócio, H = cancelamento de negócio 39 OrdStatus Char Estado da ordem. 0 = nova, 1 = parcialmente executada 2 = executada, 4 = cancelada, 8 = rejeitada 52 SendingTime UTCTimestamp Tempo UTC do envio da mensagem. Como resposta à New Order Single do exemplo anterior, o cliente poderá receber a seguinte mensagem:... 37=2010 11=2001 150=0 39=0 52=04/09/2008 00:00:00... Neste caso a Bolsa aceitou a ordem e lhe atribuiu o OrderID=2010, mas a oferta ainda não foi executada. 3.3 Order Cancel Request( MsgType=F) Caso o cliente tenha se arrependido de alguma ordem, ele poderá tentar cancelá-la. 7

Order Cancel Request (F) 41 OrigClOrderID string ClOrdID da ordem que o cliente deseja cancelar 37 OrderID string OrderID atribuído pela Bolsa para a ordem que o cliente deseja cancelar 11 ClOrdID string Id atribuído à esta ordem de cancelamento, pelo aluno que a enviou 54 Side int Tipo de oferta: 1 = compra, 2 = venda 60 TransactTime UTCTimestamp Horário de emissão da mensagem expresso em UTC A seguir pedimos o cancelamento da oferta lançada no exemplo anterior:... 41=2001 37=2010 11=2061 54=1 52=04/09/2008 00:00:10... 3.3.1 Order Cancel Reject(MsgType=9) Se uma ordem já tiver sido executada, ela não poderá ser cancelada. Neste caso, em resposta à solicitação F, o cliente receberá uma menssagem Order Cancel Reject(9), informando que é tarde demais para cancelar a oferta. 8

Order Cancel Reject(9) 37 OrderID string É o OrderID atribuído à ordem pela Bolsa, exceto quando o campo CxlRjreason = ordem desconhecida nesta mensagem 11 ClOrderID string Id único atribuído pela Bolsa para a ordem de cancelamento. 41 OrigClOrderID string OrderID atribuído à ordem pelo cliente 54 Side int Lado da oferta: 1 = compra, 2 = venda. 102 CxlRejReason int Codigo que identifica o motivo da rejeição de cancelamento. Valores aceitos: 0 = tarde demais para cancelar 1 = ordem desconhecida 99 = outros 58 Text string CONDICIONAL! Descrição do erro se CxlRejReson = 99(outros). Em outros casos poderá conter informações adicionais Continuando no exemplo anterior, caso seu pedido de cancelamento tenha sido negado, você receberá a seguinte mensagem:... 37= 2010 11=3001 41=2001 54=1 102=0... 3.4 Dados de mercado Estratégias de negociação coerentes, se baseiam em dados de mercado. Para receber esses dados o investidor envia à Bolsa mensagens do tipo Market Data Request(V). 9

Market Data Request (V) 262 MDReqID string Deve ser único em todo o sistema 267 NoMDEntryTypes int Números de registros a serem solocitados. Por enquanto todos os aqui mostrados deverão ser passados. -> 269 MDEntryType char Tipos de regstros de dados de mercado que a corretora solicitante deseja receber Valores aceitos: 0 = Oferta de compra 1 = Oferta de venda 2 = negócios 4 = preço de abertura 5 = preço de fechamento 7 = preço máximo do dia 8 = preço mínimo do dia 9 = preço VWAP do dia B = volume de negócios X = topo do livro - ofertas de venda Z = topo do livro - ofertas de compra Aqui temos um exemplo incorreto de pedido de dados de mercado.... 262=007.1 267=11 269=0 269=1... Esse esemplo é incorreto pois o nosso simulador só a aceita requisição para TO- DAS as informações. Ou seja, é tudo ou nada. Portanto a requisição correta seria:... 262=007.1 267=11 269=0 269=1 269=2 269=4 269=5 269=7 269=8 269=9 269=B 269=X 269=Z... 3.5 Market Data Request Reject(MsgType = Y) Como a nossa Bolsa só aceita o pacote completo, caso o cliente faça algo parecido com o primeiro exemplo de Market Data Request, ele receberá como retorno a mensagem descrita no exemplo logo após esta tabela de definição. 10

Market Data Request Reject (Y) 262 MDReqID string Identificador da mensagem de requisição que resultou em rejeição 281 MDReqRejReason char Motivo da rejeição de dados de mercado. Valores aceitos 0 = símbolo desconhecido 1 = MDReqID duplicado 2 = largura de banda insuficiente 3 = permissões insuficients 4 = SubscriptionRequestType nãosuportado 6 = MDUpdateType não suportado 8 = MDEntryType não-suportado Y = MDReqID não encontrado Z = solicitação inválida 58 Text String Texto descritivo do motivo da rejeição. Exemplo:... 262=007.1 281=Z 3.6 Market Data Snapshot Full Refresh( MsgType=W) Ao requisitar os dados pela primeira vez você receberá todas as informações em uma única mensagem, formatada conforme a tabela a baixo: 11

Market Data Snapshot Full Refresh (W) 262 MDReqID string Identificador da mensagem de requisição que resultou em rejeição 269 MDEntryType char Tipos de dados de mercado que a corretora deseja receber: Valores aceitos: 0 = Oferta de compra 1 = Oferta de venda 2 = negócios 7 = preço máximo do dia 8 = preço mínimo do dia B = volume de negócios X = topo do livro - ofertas de venda Z = topo do livro - ofertas de compra 270 MDEntryPx double Preçodo registro de dados do mercado 271 MDEntrySize long Quantidade ou volume representado pelo registro de dados de mercado. 37 OrderID String Identificador único da ordem atribuído pela Bolsa 290 MDEntryPositionNo int Exibe a posição de uma ordem de compra ou venda no livro, respeitando a ordenção de cada fila. Digamos que o livro possua 4 ofertas de compra a preços R$130.0, R$129.0, R$129.0 e R$128.0, respectivamente, que não foram realizados negócios ainda. A mensagem enviada ao cliente seria: 262=007.1 269=1 270=130.0 271=20 37=3045 290=2 269=1 270=129.0 271=10 37= 3047 290=1 269=1 270=129.0 271=20 37=3046 290=3 269=1 270=128.0 271=20 37=3048 290=2 269=7 270=130.0 269=8 270=128.0 269=B 270=0.0 269=X 270=0.0 269=Z 270=130.0 3.6.1 Market Data Incremental Refresh(MsgType=X) Depois da primeira mensagem com todos os valores relevantes da Bolsa, para não sobrecarregar a banda de comunicação, mensagens incrementais de atualização, do tipo X, serão enviadas ao cliente sempre que houver alguma mudança no livro 12

de ofertas da Bolsa. Market Data Incremental Refresh (X) 268 NoMDEntries int Númerode registros a serem passados 279 MDUpdateAction Char Tipo de atualização de dados de mercado: 0 = novo; 1 = alterar; 2 = excluir 269 MDEntryType char Tipos de dados de mercado que a corretora deseja receber: Valores aceitos: 0 = Oferta de compra 1 = Oferta de venda 2 = negócios 4 = preço de abertura 5 = preço de fechamento 7 = preço máximo do dia 8 = preço mínimo do dia 9 = preço VWAP do dia B = volume de negócios X = topo do livro - ofertas de venda Z = topo do livro - ofertas de compra 278 MDEntryId string Identificador do registro de dados de mercado. Pode ser ignorado 270 MDEntryPx double Preçodo registro de dados do mercado 271 MDEntrySize long Quantidade ou volume representado pelo registro de dados de mercado. 37 OrderID String Identificador único da ordem atribuído pela Bolsa 290 MDEntryPositionNo int A posição da ordem de compra ou venda no livro, respeitando a ordenação de cada fila. No exemplo abaixo, duas novas ordensde venda chegaram à Bolsa e 3 negócios foram efetuados: 262=007.1 269=2 270=130.0 271=20 37=3049 290=1 269=2 270=130.0 271=10 37=3049 269=2 270=129.0 271=10 37=2049 269=0 270=129.0 271=10 37=3050 290=1 269=2 270=129.0 271=10 37=3050 13

3.7 Business message reject (MsgType=j) Caso a Bolsa receba uma mensagem com formato inválido, ela retornará uma mensagem j: Business message reject (j) 372 RefMsgType string Tipode mensagem FIX a qual é feita a referência 379 BusinessRejectRefID string Valor do campo ID, no nível de aplicação, na mensagem ã qual é feita a referência 380 BusinessRejectReason int Código que identifica o motivo da rejeição. Valores aceitos: 0 = outros 1 = identificador desconhecido 2 = instrumento desconhecido 3 = tipo de mensagem não suportado 4 = aplicação não disponível 5 = falta de campo condicionalmente obrigatório 6 = Não-autorizado 58 Text String Mensagem para explicar o motivo da rejeição, se disponível. Um típico exemplo é o seguinte: 372=D 380=3, na qual 380=3 indica tipo de mensagem não suportado. 14