BR122013024230A2 - Negociação eletrônica com algoritmo definido pelo usuário - Google Patents

Negociação eletrônica com algoritmo definido pelo usuário Download PDF

Info

Publication number
BR122013024230A2
BR122013024230A2 BR122013024230-9A BR122013024230A BR122013024230A2 BR 122013024230 A2 BR122013024230 A2 BR 122013024230A2 BR 122013024230 A BR122013024230 A BR 122013024230A BR 122013024230 A2 BR122013024230 A2 BR 122013024230A2
Authority
BR
Brazil
Prior art keywords
event
block
code
algorithm
order
Prior art date
Application number
BR122013024230-9A
Other languages
English (en)
Inventor
Lane Richard
Unetich Michael
Lidor Daniel
Edwards Nathan
Original Assignee
Trading Technologies International, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Trading Technologies International, Inc. filed Critical Trading Technologies International, Inc.
Publication of BR122013024230A2 publication Critical patent/BR122013024230A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04847Interaction techniques to control parameter settings, e.g. interaction with sliders or dials
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Theoretical Computer Science (AREA)
  • Finance (AREA)
  • Accounting & Taxation (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Business, Economics & Management (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • Technology Law (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Stored Programmes (AREA)
  • User Interface Of Digital Computer (AREA)

Description

(54) Título: NEGOCIAÇÃO ELETRÔNICA COM ALGORITMO DEFINIDO PELO USUÁRIO (51) Int. Cl.: G06Q 40/04; G06F 3/048 (52) CPC: G06Q 40/04,G06F 3/048 (30) Prioridade Unionista: 01/04/2010 US 61/320,061, 01/04/2010 US 61/320, 06109/03/2010 US 61/312,003, 01/04/2010 US 61/320,06109/03/2010 US 61/312, 00314/10/2010 US 61/393,313, 01/04/2010 US 61/320,06109/03/2010 US 61/312, 00314/10/2010 US 61/393,31315/10/2010 US 12/905,709, 01/04/2010 US 61/320, 06109/03/2010 US 61/312,00314/10/2010 US 61/393,31315/10/2010 US 12/905, 70915/10/2010 US 12/905,726, (...) (73) Titular(es): TRADING TECHNOLOGIES INTERNATIONAL, INC.
(72) Inventor(es): RICHARD LANE; MICHAEL UNETICH; DANIEL LIDOR; NATHAN EDWARDS (74) Procurador(es): DANNEMANN, SIEMSEN, BIGLER & IPANEMA MOREIRA (86) Pedido Internacional: PCT US2010053172 de 19/10/2010 (87) Publicação Internacional: WO
2011/049936 de 28/04/2011
Figure BR122013024230A2_D0001
1/113
Relatório Descritivo da Patente de Invenção para NEGOCIAÇÃO ELETRÔNICA COM ALGORITMO DEFINIDO PELO USUÁRIO.
Pedido dividido do BR112012009233-2, depositado em
19/10/2010.
REFERÊNCIA CRUZADA COM PEDIDOS RELACIONADOS
Este pedido reivindica o benefício do Pedido Provisório US N2
61/253.315, denominado Trading Application with Futures Ranking and Order Tool, Price Levei Indicator Tool, and Market Change Audio Indicator Tool, depositado em 20 de outubro de 2009, do Pedido Provisório US N2
61/253.324, denominado System and Method for Building User-Defined Algorithms for Electronic Trading Exchange, depositado em 20 de outubro de 2009; do Pedido Provisório US Ne 61/263.300, denominado System and Method for Building User-Defined Algorithms for Electronic Trading Exchange, depositado em 20 de novembro de 2009; do Pedido Provisório US N15 61/312.003, denominado System and Method for Launching Automated
Trading Applications, depositado em 9 de março de 2010; do Pedido Provisório US N2 61/318.685, denominado System and Method for Virtualizing User-Defined Algorithms for Electronic Trading Exchange, depositado em 29 de março de 2010; do Pedido Provisório US Ns 61/320.061, denominado
System and Method for Automating Feedbabck-Based User-Defined Algorithms for Eletronic Trading Exchange, depositado em 1 de abril de 2010; do Pedido Provisório US Ns 61/393.313, denominado User-Defined Algorithm Electronic Trading, depositado em 14 de outubro de 2010; do Pedido Não Provisório US N2 12/905.709, denominado User-Defined Algorithm Electro25 nic Trading, depositado em 15 de outubro de 2010; e do Pedido Não Provisório US N2 12/905.726, denominado Virtualizing for User-Defined Algorithm Electronic Trading, depositado em 15 de outubro de 2010. Cada um destes pedidos é incorporado neste documento por referência em sua totalidade. ANTECEDENTES
A tecnologia presentemente descrita é direcionada para sistemas de negociação eletrônica. Mais particularmente, algumas concretizações são direcionadas para negociação eletrônica por algoritmo definido pe2/113
Io usuário.
Um sistema de negociação eletrônica geralmente inclui um dispositivo cliente em comunicação com uma bolsa de valores eletrônica que pode ser vir como um hospedeiro para o dispositivo cliente. Tipicamente, o sistema de negociação eletrônica proporcionar eletronicamente corresponder ordens para comprar e vender objetos negociáveis a serem negociados. Um objeto negociável é um item que pode ser negociado. Ações, opções, contratos de futuros, títulos e mercadorias são alguns exemplos de objetos negociáveis.
A bolsa eletrônica transmite dados do mercado para o dispositivo cliente. Os dados do mercado podem incluir, por exemplo, dados de preço, dados de profundidade do mercado, dados de últimas quantidades negociadas, dados relacionados com um mercado para o objeto negociável, e/ou combinações dos mesmos. O dispositivo cliente recebe os dados do mercado a partir da bolsa eletrônica.
Em alguns sistemas de negociação eletrônica, um dispositivo cliente recebe e processa os dados do mercado sem exibir os dados do mercado em um dispositivo de vídeo. Por exemplo, um sistema de negociação de algoritmo de caixa preta pode executar automaticamente e sem exibir dados do mercado. Entretanto, em outros sistemas de negociação eletrônica, o dispositivo cliente exibe os dados do mercado processador em um dispositivo de vídeo. O dispositivo cliente pode incluir software que cria uma tela de negociação. Em geral, a tela de negociação permite que um usuário participe de uma sessão de negociação eletrônica. Por exemplo, uma tela de negociação pode permitir que um usuário visualize os dados do mercado, submeta uma ordem de negociação para a bolsa eletrônica, obtenha uma cotação de mercado, monitore uma posição, e/ou combinações dos mesmos.
Em alguns sistemas de negociação eletrônica, o dispositivo cliente envia ordens de negociação para a bolsa eletrônica. Entretanto, em outros sistemas de negociação eletrônica, outros dispositivos, tais como dispositivos do lado do servidor, são responsáveis por enviar a uma ou mais
3/113 ordens de negociação para a bolsa eletrônica. Ao receber a ordem de negociação, a bolsa eletrônica coloca a ordem em um livro de ordens da bolsa e tenta associar a quantidade da ordem de negociação com a quantidade de uma ou mais ordens de negociação de lado oposto. A título de exemplo, uma ordem de venda é um lado oposto para uma ordem de compra com o mesmo preço. De forma similar, uma ordem de compra é um lado oposto para uma ordem de venda com o mesmo preço. A quantidade não correspondente uma ordem de negociação é mantida no livro de negociações da bolsa até que a quantidade de uma ordem de negociação seja correspondida pela bolsa eletrônica. A quantidade não correspondida de uma ordem de negociação também pode ser removida do livro de negociações quando uma ordem de negociação é cancelada, pelo dispositivo cliente ou pela bolsa eletrônica. Quando da correspondência da ordem de negociação, a bolsa eletrônica pode enviar uma confirmação para o dispositivo cliente dizendo que a quantidade da ordem de negociação foi correspondida.
Bolsas eletrônicas têm tornado isto possível que um crescente número de participante esteja ativo em um mercado em qualquer dado tempo. O aumento no número de participantes potenciais do mercado tem vantajosamente levado, entre outras coisas, a um mercado mais competitivo e a uma maior liquidez. Em um ambiente competitivo, como a negociação eletrônica, onde cada segundo ou uma fração de segundo é considerado ao interceptar oportunidades de negociação, é desejável oferece ferramentas que ajudem a um participante a efetivamente competir no mercado ou mesmo dar uma vantagem em relação aos outros.
Alguns sistemas atuais incluem sistemas de negociação algorítmicos que podem permitir avaliação e reação mais rápidas as alterações na informação do mercado. Entretanto, tais sistemas tipicamente exigem programadores com conhecimentos para desenvolvem algoritmos de negociação, levam dias (ou mesmo meses) para testar e depurar, e o processo de desenvolvimento e depuração deve ser repetido quando um negociador decide em relação a uma abordagem diferente ou deseja uma modificação junto à lógica do algoritmo.
4/113
SUMÁRIO
As concretizações descritas neste documento incluem, mas não estão limitadas, aos vários dispositivos, sistemas, métodos e produtos de programa de computador.
Algumas concretizações proporcionam botões de bloco de construção e uma área de algoritmo para definir um algoritmo. Algumas concretizações permitem o ajuste tanto dos parâmetros como da lógica de um algoritmo rapidamente, mesmo durante uma única sessão de negociação. Algumas concretizações proporcionam avaliação dinâmica de uma expressão à medida que o algoritmo está sendo definido. Algumas concretizações reduzem os riscos de algoritmos tradicionalmente programados tal como erros de sintaxe, lógica não clara e a necessidade de um programador que não seja negociador para desenvolver o algoritmo como especificado por um negociador por reduzir ou eliminar a escrita de código de programação por um usuário. Algumas concretizações proporcionam uma única aplicação para construir, depurar e simular (com dados reais de mercado) um algoritmo todo o tempo. Em adição, a aplicação única também pode proporcionar iniciar a feitura de ordens utilizando o algoritmo.
Algumas concretizações proporcionam uma área de superfície de desenho do projeto e blocos para projetar um algoritmo. Algumas concretizações proporcionam blocos com funcionalidade complexa para uso em um algoritmo. Algumas concretizações proporcionam blocos de agrupamento colocados na área de superfície de desenho do projeto. Algumas concretizações proporcionam blocos de grupo virtualizados permitindo a instanciação dinâmica de partes de um algoritmo para manipular eventos descontínuos particulares. Algumas concretizações permitem ajustar tanto os parâmetros como a lógica de um algoritmo rapidamente, mesmo durante uma única sessão de negociação. Algumas concretizações proporcionam realimentação dinâmica para blocos à medida que o algoritmo está sendo projetado. Algumas concretizações proporcionam aspectos de segurança para reduzir erros potenciais quando um algoritmo é projetado. Algumas concretizações proporcionam a operação de alguma ou de todas as partes de um algoritmo
5/113 quando uma conexão entre um dispositivo cliente e um servidor de algoritmo é interrompida. Algumas concretizações reduzem os riscos de algoritmos tradicionalmente programados tais como erros de sintaxe, lógica não clara, e a necessidade de um programador que não é o negociador para desenvolver o algoritmo como especificado por um negociador por reduzir ou eliminar a escrita de código de programação por um usuário. Algumas concretizações proporcionam uma única aplicação para construir, depurar e simular (com dados reais do mercado) um algoritmo, tudo ao mesmo tempo. Em adição, a aplicação única também pode proporcionar iniciar a feitura de ordens utilizando o algoritmo.
Algumas concretizações proporcionam iniciar a feitura de uma ordem a ser gerenciada por um algoritmo selecionador como um tipo de ordem. Algumas concretizações proporcionam iniciar a feitura de uma ordem a ser gerenciada por um algoritmo de negociação definidos pelo usuário a partir de um eixo geométrico de valores. Algumas concretizações proporcionam alterar uma variável para um algoritmo enquanto o algoritmo está gerenciando uma ordem. Algumas concretizações proporcionam manualmente modificar uma ordem sendo gerenciada por um algoritmo. Algumas concretizações proporcionam designar para uma ordem não gerenciada um algoritmo para gerenciar a ordem. Algumas concretizações proporcionam exibir ordem de trabalho sendo gerenciadas por diferentes algoritmos de negociação definidos pelo usuário em um eixo geométrico de valores.
Algumas concretizações proporcionam uma ferramenta de classificação. Algumas concretizações proporcionam a exibição de uma classificação de objetos negociáveis selecionados a ser utilizada para feitura da ordem. Algumas concretizações proporcionam selecionar uma estratégia de execução para iniciar ordens baseadas na classificação.
Outras concretizações são descritas abaixo. Em adição, modificações podem ser feitas junto às concretizações descritas sem afastamento do espírito ou do escopo das invenções.
BREVE DESCRIÇÃO DOS DESENHO
Concretizações ilustrativas são descritas neste documento com
6/113 referência aos desenhos seguintes:
a figura 1 ilustra um diagrama de blocos de um sistema de negociação eletrônica no qual algumas concretizações podem ser empregadas.
A figura 2A ilustra uma interface de negociação de acordo com algumas concretizações.
A figura 2B ilustra uma interface de seleção de instrumento de acordo com algumas concretizações.
As figuras 2C até 2I ilustram a construção de uma definição para um algoritmo em uma interface de negociação de acordo com algumas concretizações.
A figura 2J ilustra uma interface de negociação de acordo com algumas concretizações.
A figura 3A ilustra um diagrama de blocos de um sistema de negociação eletrônica no qual algumas concretizações podem ser empregadas
A figura 3B ilustra uma interface de negociação de acordo com algumas concretizações.
A figura 3C ilustra exemplos de blocos que podem ser utilizados na interface de negociação de acordo com algumas concretizações.
As figuras 3D-1 até 3D-7 ilustram código de programação ilustrativo gerado de acordo com algumas concretizações.
As figuras 3E até 3R ilustram interfaces de negociação de acordo com algumas concretizações.
As figuras 4A até 4F ilustram interfaces de negociação de acordo com algumas concretizações.
A figura 5 ilustra uma ferramenta de classificação de acordo com algumas concretizações.
A figura 6 ilustra um diagrama de blocos de um dispositivo de computação de acordo com algumas concretizações.
O sumário anterior, bem como a descrição detalhada seguinte, serão mais bem entendidos quando lidos em conjunto com os desenhos,, os
7/113 quais apresentam algumas concretizações.
Os desenhos são para o propósito de ilustrar algumas concretizações, mas deve ser entendido que as presentes invenções não estão limitadas às disposições e instrumentalidades apresentadas nos desenhos. DESCRIÇÃO DETALHADA
I. Sistema de Negociação Eletrônica Ilustrativo
A figura 1 ilustra um diagrama de blocos de um sistema de negociação eletrônica 100 no qual algumas concretizações podem ser empregadas. O sistema 100 inclui um dispositivo cliente 110, um dispositivo de interconexão de rede 120, e uma bolsa eletrônica 130. O dispositivo cliente 110 está em comunicação com o dispositivo de interconexão de rede 120. O dispositivo de interconexão de rede 120 está em comunicação com a bolsa 130.
Como utilizado neste documento, a frase em comunicação com pode incluir em comunicação direta e em comunicação indireta através de um óu mais componentes intermediários.
Em operação, o dispositivo cliente 110 pode enviar ordens para comprar ou vender objetos negociáveis na bolsa 130. Por exemplo, um usuário pode utilizar o dispositivo cliente 110 para enviar as ordens. As ordens são enviadas através do dispositivo de interconexão de rede 120 para a bolsa 130. Em adição, os dados do mercado são enviados a partir da bolsa 130 através do dispositivo de interconexão de rede 120 para o dispositivo cliente 110. O usuário também pode utilizar o dispositivo cliente 110 para monitorar estes dados do mercado e basear uma decisão para enviar uma ordem para um objeto negociável nos dados do mercado.
O objeto negociável é qualquer coisa que possa ser negociada com uma quantidade ou preço. Por exemplo, produtos financeiros tais como ações, opções, títulos, futuros, moeda, garantias, derivativos de fundos, títulos imobiliários, commodities, eventos negociados, mercadorias e coleções e/ou combinações dos mesmos podem ser objetos negociáveis. Um objeto negociável pode ser real ou sintético. Um objeto negociável real inclui produtos que são listados por uma bolsa. Um objeto negociável sintético in8/113 clui produtos que são definidos pelo usuário e não são listados por uma bolsa. Por exemplo, um objeto negociável sintético Poe incluir uma combinação de produtos reais (ou outro sintético) tais como uma margem sintética criada por um negociante utilizando um dispositivo cliente 110.
O dispositivo cliente 110 pode incluir uma ou mais plataformas eletrônicas de computação tais como um dispositivo de mão, laptop, computador de mesa, estação de trabalho com um único processador ou com múltiplos núcleos, servidor com múltiplos processadores, e/ou grupamentos de computadores, por exemplo. Por exemplo, enquanto logicamente representado como um único dispositivo, o dispositivo cliente 110 pode incluir um terminal de negociação em comunicação com um servidor, onde coletivamente o terminal de negociação e o servidor são o dispositivo cliente 10. O terminal de negociação pode proporcionar uma tela de negociação para um usuário e pode comunicar comandos para o servidor para processamento adicional das entradas do usuário através da tela de negociação, tal como efetuar ordens.
O dispositivo cliente 110 geralmente é possuído, operador, controlador, programado, configurado, ou de outro modo utilizado, por um usuário. Como utilizado neste documento, a palavra usuário pode incluir, mas não está limitada a um humano (por exemplo, um negociante) ou a um dispositivo de negociação eletrônica (por exemplo, incluindo um processador e memória ou um sistema de negociação algorítmico). Um ou mais usuários podem estar envolvidos na propriedade, operação, controle, programação, configuração, ou outro uso, por exemplo.
O dispositivo cliente 110 pode incluir uma ou mais aplicações de negociação. A aplicação (aplicações) de negociação pode, por exemplo, processar dados do mercado por dispor e exibir os dados do mercado nas janelas de negociação e de representação gráfica. Os dados do mercado podem ser recebidos a partir da bolsa 130, por exemplo. Como outro exemplo, os dados do mercado podem ser recebidos a partir de um ambiente de simulação que proporciona dados históricos e/ou simula uma bolsa, mas não efetua negociações do mundo real. Este processamento pode ser baseado
9/113 nas preferências do usuário, por exemplo. A aplicação (aplicações) de negociação pode incluir uma ferramenta de negociação automática tal como uma ferramenta automática de negociação de margem, por exemplo. A uma ou mais aplicações de negociação podem ser distribuídas através do um ou mais dispositivos de computação do dispositivo cliente 110. Por exemplo, alguns componentes de uma aplicação de negociação podem ser executados em uma estação de trabalho de negociação e outros componentes da aplicação de negociação podem ser executados em um servidor em comunicação com a estação de trabalho.
O dispositivo cliente 110 pode incluir uma estação de trabalho de negociação eletrônica, um dispositivo de negociação portátil, um sistema de negociação algorítmico tal como um sistema caixa preta ou caixa cinza, um sistema de negociação embutido, e/ou uma ferramenta de negociação automática, por exemplo. Por exemplo, o dispositivo cliente 110 pode ser um sistema de computação executando uma cópia do X_TRADER®, uma plataforma de negociação eletrônica proporcionada pela Trading Technologies International, Inc., de Chicago, Illinois. Como outro exemplo, o dispositivo cliente 10 pode ser um dispositivo de computação executando uma ferramenta de negociação automática tal como Autospreader® e/ou Autotrader™, também proporcionadas pela Trading Technologies International, Inc.
Aplicações de negociação podem ser armazenadas em um meio legível por computador do dispositivo cliente 110. Em algumas concretizações, certos componentes de uma aplicação de negociação podem ser armazenados em uma estação de trabalho de negociação e outros componentes da aplicação de negociação podem ser armazenados em um servidor em comunicação com a estação de trabalho. Em algumas concretizações, um ou mais componentes de uma aplicação de negociação podem ser carregados no meio legível por computador do dispositivo cliente 110 a partir de outro meio legível por computador. Por exemplo, a aplicação de negociação (e as atualizações para a aplicação de negociação) pode ser armazenada por um fabricante, desenvolvedor, ou por um editor em um ou mais CDs ou DVDs, os quais são então proporcionados para alguém responsável por car10/113 regar a aplicação no dispositivo cliente 110 ou para um servidor a partir do qual o dispositivo cliente 110 recupera a aplicação de negociação. Como outro exemplo, o dispositivo cliente 110 pode receber a aplicação de negociação (ou atualizados para a aplicação de negociação) a partir de um servidor, por exemplo, via a Internet ou uma rede interna. O dispositivo cliente 110 pode receber a aplicação de negociação e atualizações quando solicitadas pelo dispositivo cliente 110 (distribuição por demanda) e/ou não solicitadas pelo dispositivo cliente 110 (distribuição por envio).
O dispositivo cliente 110 é adaptado para enviar ordens para comprar ou vender um objeto negociável. O dispositivo cliente 110 também pode ser adaptado para cancelar ordens, alterar ordens, e/ou consultar uma bolsa, por exemplo. Como outro exemplo, o dispositivo cliente 110 pode ser adaptado para enviar ordens para uma bolsa simulada em um ambiente de simulação que não efetua negociações no mundo real.
As ordens enviadas pelo dispositivo cliente 10 podem ser enviadas quando da solicitação por um usuário ou automaticamente, por exemplo. Por exemplo, um negociador pode utilizar uma estação de trabalho de negociação eletrônica para efetuar uma ordem em relação a um objeto negociável particular, manualmente proporcionando vários parâmetros para a ordem, tais como um preço e/ou a quantidade da ordem. Como outro exemplo, uma ferramenta de negociação automática pode calcular um ou mais parâmetros para uma ordem e automaticamente enviar a ordem. Em alguns casos, uma ferramenta de negociação automática pode preparar a ordem a ser enviada, mas não realmente enviar a mesma sem confirmação a partir do usuário.
Em algumas concretizações, o dispositivo cliente 110 inclui uma interface com o usuário. A interface com o usuário pode incluir um ou mais dispositivos de vídeo para apresentar uma interface baseada em texto ou gráfica de uma aplicação de negociação para um usuário, por exemplo. Por exemplo, os dispositivos de vídeo podem incluir monitores de computador, monitores de dispositivo de mão, projetores, e/ou televisões. A interface com o usuário pode ser utilizada pelo usuário para especificar ou inspecionar pa11/113 râmetros para uma ordem utilizando uma aplicação de negociação. A interface com o usuário pode incluir um ou mais dispositivos de entrada para receber entrada a partir de um usuário, por exemplo. Por exemplo, os dispositivos de entrada podem incluir um teclado, TrackBall, mouse com dois ou três botões, e/ou tela sensível ao toque. A interface com o usuário pode incluir outros dispositivos para interagir com o usuário. Por exemplo, a informação pode ser proporcionada de forma auditiva para um usuário através de um alto-falante e/ou recebida através de um microfone.
Em algumas concretizações, uma aplicação de negociação pode incluir uma ou mais telas de negociação para permitir a um negociante interagir com um ou mais mercados. Telas de negociação podem permitir aos negociantes obterem e observarem informações do mercado, estabelecer parâmetros de entrada de ordem, entrar e cancelar ordens, e/ou monitorar posições enquanto implementando várias estratégias de negociação, por exemplo. Por exemplo, uma aplicação de negociação pode receber informação (tal como preço de cotação, quantidade de oferta, preço de venda, quantidade da venda, preços e quantidades para vendas passadas, e/ou outras informações relacionadas com o mercado) a partir da bolsa 130 que, por sua vez, pode ser exibida com uma interface com o usuário do dispositivo cliente 110. Baseada na informação recebida, a tela de negociação pode exibir uma faixa de níveis de preço e as quantidades de compra e venda para os níveis de preço com respeito aos objetos negociáveis. De modo a proporcionar ao negociante informações de negociação pertinentes, a tela de negociação pode exibir uma faixa de preços (e as quantidades de compra e venda correspondentes) ao redor do mercado interno. A informação pode ser continuamente ou regularmente proporcionada para a aplicação de negociação, o que permite que a aplicação de negociação atualize a tela de negociação com as informações atuais do mercado. Um negociante pode utilizar a tela de negociação para efetuar ordens de compra e venda para os objetos negociáveis ou para de outro modo negociar os objetos negociáveis baseado nas informações exibidas, por exemplo.
As telas de negociação podem exibir uma ou mais ferramentas
12/113 de negociação. As ferramentas de negociação são ferramentas eletrônicas que permitem, ajudam, e/ou facilitam a negociação eletrônica. Ferramentas de negociação ilustrativas incluem, mas não estão limitadas aos gráficos, tabelas de negociação, ferramentas de entrada de ordem, ferramentas de negociação automática, ferramentas de cálculo de margem, ferramentas de gerenciamento de risco, ferramentas de parâmetro de ordem, sistemas de entrada de ordem, grades de mercado, janelas de preenchimento, e janelas de ordem de compra e venda, combinações dos mesmos, outras ferramentas eletrônicas utilizadas para negociação, preparar uma negociação, ou ge10 renciar negociações.
Em algumas concretizações, o dispositivo cliente 110 inclui uma aplicação de negociação algorítmica. Por exemplo, o dispositivo cliente 110 pode incluir uma aplicação de negociação de caixa preta ou de caixa cinza. Como outro exemplo, o dispositivo cliente 110 pode incluir uma aplicação de negociação que algoritmicamente processa dados do mercado, mas proporcionar uma interface com o usuário para permitir que um usuário manualmente efetue ordens baseado no processamento algorítmico ou manipule ordens que foram efetuadas automaticamente. Uma aplicação de negociação algorítmica é uma aplicação de negociação que inclui um algoritmo pro20 cessador automaticamente para executar algumas ações. Ou seja, a aplicação de negociação inclui uma série automatizada de instruções para executar ações definidas. As ações podem incluir processar os dados do mercado de um modo particular, efetuar uma ordem, modificar uma ordem existente, apagar uma ordem, abster-se de efetuar uma ordem, selecionar em relação a qual objeto(s) negociável atuar, determinar um preço no qual colocar ou para qual modificar uma ordem, determinar uma quantidade na qual efetua uma ordem ou modificar uma ordem para ficar na quantidade, determinar se uma ordem deve ser para comprar ou vender, e retardar uma ação durante um período de tempo, por exemplo.
Como utilizado neste documento, um algoritmo (também referido como um algoritmo de negociação) é especificado por uma definição que inclui expressões lógicas e parâmetros que descrevem o algoritmo a ser uti13/113 lizado na negociação. Expressões lógicas especificam a relação entre os parâmetros e podem gerar mais parâmetros. Parâmetros podem incluir, por exemplo, entradas nas expressões lógicas do algoritmo. A definição de um algoritmo pode ser, pelo menos em parte, especificada pela aplicação de negociação algorítmica. Por exemplo, uma aplicação de negociação algorítmica pode permitir que um usuário somente especifique parâmetros a serem utilizados pelas expressões lógicas predefinidas. Como outro exemplo, uma aplicação de negociação algorítmica pode permitir que um usuário especifique algumas ou todas as expressões lógicas e alguns ou todos os parâme10 tros. Um algoritmo de negociação onde as expressões lógicas são especificadas por um usuário é um algoritmo de negociação definido pelo usuário.
Em algumas concretizações, as ordens a partir do dispositivo Cliente 110 são enviadas para a bolsa 130 através do dispositivo de interconexão de rede 120. O dispositivo cliente 10 pode se comunicar com o dispo15 sitivo de interconexão de rede 120 utilizando uma rede de área local, uma rede de longa distância, uma rede privada virtual, uma linha T1, uma linha T3, uma linha ISDN, um ponto de presença, e/ou a Internet, por exemplo.
O dispositivo de interconexão de rede 120 é adaptado para se comunicar com o dispositivo cliente 10 e com a bolsa 130. O dispositivo de interconexão de rede 120 facilita a comunicação entre o dispositivo cliente 110 e a bolsa 130. Por exemplo, o dispositivo de interconexão de rede 120 pode receber ordens a partir do dispositivo cliente 110 e transmitir as ordens para a bolsa 130. Como outro exemplo, o dispositivo de interconexão de rede 130 pode receber dados do mercado a partir da bolsa 130 e transmitir os dados do mercado para o dispositivo cliente 110.
Em algumas concretizações, o dispositivo de interconexão de rede 120 executa processamento em relação aos dados comunicados entre o dispositivo cliente 110 e a bolsa 130. Por exemplo, o dispositivo de interconexão de rede 120 pode processar uma ordem recebida a partir do dispo30 sitivo cliente 110 em um formato de dados aceitável pela bolsa 130. De forma similar, o dispositivo de interconexão de rede 120 pode transformar os dados do mercado em um formato específico da bolsa recebido a partir da
14/113 bolsa 130 em um formato entendido pelo dispositivo cliente 10. O processamento do dispositivo de interconexão de rede 120 também inclui rastrear ordens a partir do dispositivo cliente 110 e atualizar a condição da ordem baseado nas confirmações de preenchimento recebidas a partir da bolsa 130, por exemplo. Como outro exemplo, o dispositivo de interconexão de rede 120 pode aglutinar dados do mercado a partir da bolsa 120 e proporcionar os mesmos para o dispositivo cliente 120.
Em algumas concretizações, o dispositivo de interconexão de rede 120 proporciona serviços diferentes de processar dados comunicados entre o dispositivo cliente 110 e a bolsa 130. Por exemplo, o dispositivo de interconexão de rede 120 pode proporcionar processamento de risco.
O dispositivo de interconexão de rede 120 pode incluir uma ou mais plataformas eletrônicas de processamento tais como um dispositivo de mão, laptop, computador de mesa, estação de trabalho com processador único ou múltiplos processadores, servidor com múltiplos processadores, e/ou agrupamentos de computadores, por exemplo.
O dispositivo de interconexão de rede 120 pode incluir uma ou mais aplicações do dispositivo de interconexão de rede. A aplicação (aplicações) do dispositivo de interconexão de rede pode, por exemplo, manipular o processamento de ordem e o processamento dos dados do mercado. Este processamento pode ser baseado em preferências do usuário, por exemplo.
Em algumas concretizações, o dispositivo de interconexão de rede 120 se comunica com a bolsa 130 utilizando uma rede de área local, uma rede de longa distância, uma rede privada virtual, uma linha T1, uma linha T3, uma linha ISDN, um ponto de presença, e/ou a Internet, por exemplo.
Em geral, a bolsa 130 pode ser possuída, operada, controlada, ou utilizada por uma entidade de bolsa de valores. Entidades de bolsa de valores ilustrativas incluem o CME Group, o London International Financial Futures and Options Exchange (LIFFE), o IntercontinentalExchange (ICE), e Eurex. A bolsa 130 pode ser um sistema eletrônico de equilíbrio, tal como um computador, servidor, ou outro dispositivo de computação, que
15/113 <
seja adaptado para permitir que os objetos negociáveis, por exemplo, oferet cidos para negociação pela bolsa, sejam comprados e vendidos.
A bolsa 130 é adaptada para corresponder ordens para comprar e vender objetos negociáveis. Os objetos negociáveis podem ser listados 5 para negociação pela bolsa 130. As ordens podem incluir ordens recebidas a partir do dispositivo cliente 110, por exemplo. As ordens podem ser recebidas a partir do dispositivo cliente 110 através do dispositivo de interconexão de rede 120, por exemplo. Em adição, as ordens podem ser recebidas a partir de outros dispositivos em comunicação com a bolsa 130. Ou seja, tipica10 mente, a bolsa 130 estará em comunicação com uma variedade de outros dispositivos clientes (os quais podem ser similares ao dispositivo cliente 110) que também proporcionam ordens para serem correspondidas.
A bolsa 130 é adaptada para proporcionar dados do mercado. Os dados do mercado podem ser proporcionados, por exemplo, para o dis15 positivo cliente 110. Os dados do mercado podem ser proporcionados para o dispositivo cliente 110 através do dispositivo de interconexão de rede 120, por exemplo. Os dados do mercado podem incluir dados que representam o mercado interno, por exemplo. O mercado interno é o preço de venda mais baixo (também referido como melhor preço de venda) e o preço de compra mais alto (também referido como melhor preço de compra) em um momento particular no tempo. Os dados do mercado também podem incluir a profundidade do mercado. A profundidade do mercado se refere às quantidades disponíveis no mercado interno e também pode ser referir às quantidades disponíveis além do mercado interno. Assim, o mercado interno pode ser considerado o primeiro nível de profundidade do mercado. Uma flutuação mínima além do mercado interno pode ser considerada o segundo nível de profundidade do mercado, por exemplo. Em certas concretizações, a profundidade do mercado é proporcionada para todos os níveis de preço. Em certas concretizações, a profundidade do mercado é proporcionada para menos do que todos os níveis de preço. Por exemplo, a profundidade do mercado pode ser proporcionada somente para os primeiros cinco primeiros níveis de preço em qualquer lado do mercado interno. Os dados do mercado também
16/113 podem incluir informação tal como o último preço negociado (LTP), a última quantidade negociada (LTQ), e informação de preenchimento da ordem.
Em algumas concretizações, o sistema 100 inclui mais do que um dispositivo cliente 110. Por exemplo, múltiplos dispositivos clientes simi5 lares ao dispositivo cliente 110, discutido acima, podem estar em comunicação com o dispositivo de interconexão de rede 120 para enviar ordens para a bolsa 130.
Em algumas concretizações, o sistema 100 inclui mais do que um dispositivo de interconexão de rede 120. Por exemplo, múltiplos disposi10 tivos de interconexão de rede similares ao dispositivo de interconexão de rede 120, discutido acima, podem estar em comunicação com o dispositivo cliente 110 e com a bolsa 130. Tal disposição pode ser utilizada para proporcionar redundância caso um dispositivo de interconexão de rede 120 falhe, por exemplo.
Em algumas concretizações, o sistema 100 inclui mais do que uma bolsa 130. Por exemplo, o dispositivo de interconexão de rede 120 pode estar em comunicação com múltiplas bolsas similares à bolsa 130, discutida acima. Tal disposição pode permitir que o dispositivo cliente 110 negocie em mais do que uma bolsa através do dispositivo de interconexão de rede
120, por exemplo.
Em algumas concretizações, o sistema 100 inclui mais do que uma bolsa 130 e mais do que um dispositivo de conexão de rede 120. Por exemplo, múltiplos dispositivos de interconexão de rede 120, discutidos acima, podem estar em comunicação com múltiplas bolsas similares às bolsas
130, discutida acima. Cada dispositivo de interconexão de rede pode estar em comunicação com uma ou mais bolsas diferentes, por exemplo. Tal disposição pode permitir que um ou mais dispositivos clientes 110 negocie em mais do que uma bolsa (e/ou proporcionar conexões redundantes para múltiplas bolsas), por exemplo.
Em algumas concretizações, o dispositivo cliente 110 inclui um ou mais dispositivos de computação ou componentes de processamento. Em outras palavras, a funcionalidade do dispositivo cliente 110 pode ser e17/113 xecutada por mais do que um dispositivo de computação. Por exemplo, um dispositivo de computação pode gerar ordens a serem enviadas para a bolsa 130 enquanto outro dispositivo de computação pode proporcionar uma interface gráfica com o usuário para um negociador. Em algumas concretizações, o dispositivo de conexão de rede 120 inclui um ou mais dispositivos de computação ou componentes de processamento. Em outras palavras, a funcionalidade do dispositivo de interconexão de rede 120 pode ser executada por mais do que um dispositivo de computação. Em algumas concretizações, a bolsa 130 inclui um ou mais dispositivos de computação ou componentes de processamento. Em outras palavras, a funcionalidade da bolsa 130 pode ser executada por mais do que um dispositivo de computação.
Em algumas concretizações, o dispositivo de conexão de rede 120 é parte do dispositivo cliente 110. Por exemplo, os componentes do dispositivo de interconexão de rede 120 podem ser parte da mesma plataforma de computação que o dispositivo cliente 110. Como outro exemplo, a funcionalidade do dispositivo de interconexão de rede 120 pode ser executada por componentes do dispositivo cliente 110. Em algumas concretizações, o dispositivo de interconexão de rede 120 não está presente. Tal disposição pode ocorrer quando o dispositivo cliente 110 não precisa utilizar o dispositivo de interconexão de rede para se comunicar com a bolsa 130, por exemplo. Por exemplo, se o dispositivo cliente 110 tiver sido adaptado para se comunicar diretamente com a bolsa 130.
Êm algumas concretizações, o dispositivo de interconexão de rede 120 está fisicamente localizado no mesmo local que o dispositivo cliente 110. Em algumas concretizações, o dispositivo de interconexão de rede 120 está fisicamente localizado no mesmo local que a bolsa 130. Em algumas concretizações, o dispositivo cliente 110 está fisicamente localizado no mesmo local que a bolsa 130. Em algumas concretizações, o dispositivo de interconexão de rede 120 está fisicamente localizado em um local separado tanto do dispositivo cliente 110 como da bolsa 130.
Enquanto não apresentado para o propósito de clareza, em algumas concretizações, o sistema 100 pode incluir outros dispositivos que
18/113 *
são específicos para a arquitetura de comunicações, tais como middleware, *
firewalls, concentradores, comutadores, roteadores, equipamento de comunicação específico da bolsa, modems, gerenciadores de segurança, e/ou dispositivos de criptografia / decriptografia.
Os componentes, elementos, e/ou funcionalidade do sistema
100 discutidos acima podem ser implementados sozinhos ou em combinação de várias formas de hardware, firmware e/ou como um conjunto de instruções em software, por exemplo. Algumas concretizações podem ser proporcionadas com um conjunto de instruções residindo em um meio legível por computador, tal como uma memória, disco rígido, CD-ROM, DVD, EPROM, e/ou servidor de arquivo, para execução em um computador de propósito geral ou em outro dispositivo de processamento.
II. Construtor de Ordem Algorítmica
Algumas concretizações proporcionam botões de bloco de cons15 trução e uma área de algoritmo para definir um algoritmo. Algumas concretizações permitem o ajuste tanto de parâmetros como da lógica de um algoritmo rapidamente, mesmo durante uma única sessão de negociação. Algumas concretizações proporcionam avaliação dinâmica de uma expressão à medida que o algoritmo está sendo definido. Algumas concretizações redu20 zem os riscos dos algoritmos tradicionalmente programados tais como erros de sintaxe, lógica não clara, e a necessidade de um programador que não é o negociante para desenvolver o algoritmo como especificado por um negociador por reduzir ou eliminar a escrita de código de programação por um usuário. Algumas concretizações proporcionam uma única aplicação para construir, depurar e simular (com dados reais do mercado) um algoritmo, tudo ao mesmo tempo. Em adição, a aplicação única também pode proporcionar iniciar a feitura de ordens utilizando o algoritmo.
A figura 2A ilustra uma interface de negociação 200 de acordo com algumas concretizações. A interface de negociação 200 é uma interface de negociação para uma aplicação de negociação algorítmica referida como Construtor de Ordem Algorítmica (AOB). O AOB permite que um negociante crie um algoritmo para uma ordem a ser feita. Entretanto, deve ser enten19/113 dido que os elementos da interface de negociação 200 ilustrada podem ser incorporados em outras interfaces de negociação.
A interface de negociação 200 inclui um botão de seleção de instrumento 201, uma grade de mercado 202, uma área de entrada de ordem indicativa simulada 203, uma opção de cobertura automática 204, uma quantidade de risco 205, uma área de variável 206, uma área de algoritmo 210 e botões de bloco de construção 215. A área de algoritmo 210 inclui uma área de preço 211, uma área de quantidade 212 e uma área condicional 213.
Em operação, um algoritmo é definido na área de algoritmo 210 pela utilização de um ou mais botões de bloco de construção 215 para construir uma expressão na área de preço 211, na área de quantidade 212, e/ou na área condicional 213. Valores preestabelecidos para variáveis definidas pelo usuário no algoritmo podem ser especificados utilizando a área de variável 206. Uma vez que o algoritmo tenha sido definido, a área de entrada de ordem indicativa simulada 203 pode ser utilizada para indicar como a lógica da expressão irá se comportar. Uma ordem a ser gerenciada de acordo com o algoritmo definido pode então ser iniciada utilizando uma interface de negociação.
O botão de seleção de instrumento 201 proporciona a seleção de um instrumento (isto é, um objeto negociável) com a qual uma ordem a ser efetuada se relaciona. Como ilustrado na figura 2A, o botão de seleção de instrumento 201 já foi utilizado para selecionar o calendar spread GEH1GEM1, como indicado pelo nome do instrumento selecionado sendo exibido no botão de seleção de instrumento 201. Se um instrumento ainda não tiver sido selecionado, o botão de seleção de instrumento 201 pode exibir Seleciona Instrumento, ou proporcionar alguma outra indicação de que um instrumento ainda não foi selecionado.
Quando da ativação do botão de seleção de instrumento 201 (por exemplo, por selecionar o mesmo com um ponteiro ou tocar o mesmo em uma tela sensível ao toque), uma interface de seleção de instrumento pode ser exibida para permitir a seleção do instrumento.
A figura 2B ilustra uma interface de seleção de instrumento 220
20/113 de acordo com algumas concretizações. A interface de seleção de instrumento 220 exibe uma lista de produtos negociáveis e permite a um usuário especificar um objeto negociável particular a ser negociado por seguir uma árvore de instrumentos. A árvore de instrumentos permite que o usuário selecione o instrumento, o tipo de instrumento (por exemplo, margens ou futuros), e o contrato particular a ser indicado, por exemplo. Por exemplo, como ilustrado, o calendar spread GEH1-GEM1 foi selecionado.
Referindo-se novamente à figura 2A, a grade de mercado 202 exibe informações do mercado para um objeto negociável. O objeto negociável pode ser o instrumento selecionado com o botão de seleção de instrumento 201, por exemplo. Como outro exemplo, o objeto negociável pode ser outro objeto negociável selecionado por um usuário. A grade de mercado 202 pode exibir preço de compra e/ou de venda, quantidade de compra e/ou de venda, último preço negociado e/ou informação de quantidade para o objeto negociável, por exemplo. Por exemplo, a grande de mercado 202 pode exibir os preços do mercado interno e as quantidades para o instrumento selecionado.
A área de entrada de ordem indicativa simulada 203 proporciona a geração de realimentação para avaliar aspectos operacionais de um algoritmo definido na área de algoritmo 210. Um usuário pode simular a feitura de uma ordem hipotética para comprar ou vender o instrumento selecionado com a área de entrada de ordem indicativa simulada 203 para indicar como a lógica da expressão irá se comportar. Um preço e/ou quantidade para a ordem hipotética também pode ser especificado com a área de entrada de ordem indicativa simulada 203. Adicionalmente, em algumas concretizações, a área de entrada de ordem indicativa simulada 203 pode ser configurada (por exemplo, pela seleção de uma caixa de verificação) para iniciar a feitura de uma ordem real para comprar ou vender o instrumento selecionado, onde a ordem é gerenciada de acordo com o algoritmo definido.
A opção de cobertura automática 204 proporciona a especificação de que uma contraordem deve ser feita quando uma ordem iniciada é preenchida. A contraordem é uma ordem para vender quando a ordem pre21/113 enchida foi uma ordem para comprar e a contraordem é uma ordem para comprar quando a ordem preenchida foi uma ordem para vender. A quantidade da contraordem pode ser a mesma que a quantidade preenchida, por exemplo. A contraordem é inicialmente feita em um preço de saída lucrativo, tal como um incremento negociável (como definido pela bolsa) a partir do preço da ordem preenchida, por exemplo. Por exemplo, se a ordem preenchida comprou uma quantidade de 10 em um preço de 100, a contraordem pode ser uma venda de uma quantidade de 10 ao preço de 101. Como outro exemplo, se a ordem preenchida vendeu uma quantidade de t a um preço de 100, a contraordem pode ser para comprar uma quantidade de 5 ao preço de 99.
A quantidade de risco 205 é utilizada com a opção de cobertura automática 204. Quando a quantidade no mercado no nível de preço da contraordem cai abaixo da quantidade de risco especificada 205, então, o nível de preço da contraordem é alterado para ser o preço da ordem preenchida correspondente. Neste caso, a ordem preenchida é dita como sendo possível de risco e não existe lucro na negociação. Em algumas concretizações, a contraordem pode ser feita em um preço para fechar a posição independente do lucro ou perda.
A área de variável 206 proporciona a especificação e a modificação de variáveis definidas pelo usuário utilizadas na área de algoritmo 210. A área de variável 206 exibe cada nome de variável e seu valor. A área de variável pode ser selecionada para alterar um nome de variável e/ou seu valor. As variáveis também podem ser referidas como parâmetros do algoritmo.
A área de algoritmo 210 proporciona a definição de um algoritmo para gerenciar uma ordem. A área de algoritmo 210 inclui a área de preço 211, a área de quantidade 212, e a área condicional 213. Cada área corresponde a um aspecto diferente do algoritmo.
Os botões do bloco de construção 215 são utilizados para construir expressões na área de algoritmo 210 para definir o algoritmo. As expressões são avaliadas para determinar um valor para cada área da área de
22/113 algoritmo 210. Uma expressão inclui um ou mais elementos especificados com os botões do bloco de construção 215. O uso dos botões do bloco de construção 215 é discutido em mais detalhes abaixo.
Uma vez que o algoritmo tenha sido definido na área de algoritmo 210, uma ordem para comprar ou vender pode então ser iniciada com uma interface de negociação. Por exemplo, em adição a proporcionar a iniciação de uma ordem hipotética, em algumas concretizações, a área de entrada de ordem indicativa simulada 203 também pode proporcionar iniciação de uma ordem real. Como outro exemplo, interfaces de negociação similares a estas discutidas abaixo podem ser utilizadas para iniciar uma ordem. A ordem iniciada é então gerenciada de acordo com o algoritmo definido.
A área de preço 211 é avaliada para determinar o preço no qual a ordem sendo gerenciada deve ser colocada. A área de preço 211 avalia um número representando o preço. Se a área de preço 211 estiver em branco, então o preço especificado na área de entrada de ordem indicativa simulada 203 é utilizado. Se a área de preço 211 inclui uma expressão, um preço especificado na área de entrada de ordem indicativa simulada 203 pode ser ignorado. A área de preço 21 pode avaliar um valor diferente em momentos diferentes, tal como quando os dados do mercado se alteram. Se for assim, a ordem sendo gerenciada é alterada para funcionar no novo preço. Isto pode ser obtido por apagar a ordem e efetuar uma nova ordem no novo preço ou pela utilização de um comando cancela / substitui, por exemplo.
A área de quantidade 212 é avaliada para determinar a quantidade para a qual a ordem sendo gerenciada deve ser colocada. A área de quantidade 212 avalia um número representando a quantidade. Se a área de quantidade 212 estiver em branco, então a quantidade especificada na área de entrada de ordem indicativa simulada 203 é utilizada. Se a área de quantidade 212 incluir uma expressão, uma quantidade especificada na área de entrada de ordem indicativa simulada 203 pode ser ignorada. A área de quantidade 212 pode avaliar um valor diferente em momentos diferentes, tal como quando os dados do mercado se alteram. Se for assim, a ordem sendo gerenciada é alterada para funcionar na nova quantidade. Isto pode ser rea23/113 lizado pelo apagamento da ordem e pela colocação de uma nova ordem com a nova quantidade ou pela utilização de um comando altera quantidade da ordem, por exemplo. Se a área de quantidade 212 for avaliada como 0, a ordem sendo gerenciada pode ser removida do mercado até que a área de quantidade 212 seja avaliada como um valor que não é zero. Isto pode ser similar para a área condicional 213 sendo avaliada como falsa, como discutido abaixo.
Em algumas concretizações, a área de algoritmo 210 não inclui a área de quantidade 212. Ao invés disso, a quantidade pode ser fixa ou predefinida. Por exemplo, uma interface de negociação para gerenciar ordens de cobertura (por exemplo, ordens que são automaticamente efetuadas quando outra ordem para um objeto negociável de uma estratégia de negociação é preenchida; isto também pode ser referido como interface gerenciadora de cobertura) pode utilizar uma quantidade que é baseada na quantidade preenchida da outra ordem e assim, é predeterminada a partir da perspectiva do algoritmo. Assim, uma área de algoritmo em tal interface de negociação, a qual pode permitir que um algoritmo seja utilizado para trabalhar ordens de cobertura, pode não incluir uma área de quantidade 212 devido ao valor de quantidade não precisar ser especificado desde que ele é predeterminado na hora que o algoritmo é utilizado.
A área condicional 213 é avaliada para determinar se o algoritmo deve estar ativo. A área condicional 213 é avaliada em relação a um valor booleano. Quando a área condicional 213 é avaliada como sendo verdadeira, o algoritmo está ativo. Quando a área condicional 213 é avaliada como falsa, o algoritmo está inativo. A área condicional 213 pode ser avaliada em relação a um valor diferente em momentos diferentes, tal quando os dados do mercado se alteram. Quando o algoritmo está ativo, a ordem sendo gerenciada é informada para o mercado e trabalhada de acordo com o preço e quantidade determinados, como discutido acima. Quando o algoritmo está inativo, a ordem sendo gerenciada é removida do mercado. Isto pode ser realizado pela remoção da ordem, por exemplo.
Em algumas concretizações, a área de algoritmo 210 não inclui
24/113 a área condicional 213. Ao invés disso, o algoritmo pode simplesmente sempre estar ativo uma vez que a ordem seja iniciada. Por exemplo, em uma interface gerenciadora de cobertura, devido a poder ser desejado que a ordem de cobertura seja preenchida o mais rápido possível, o algoritmo gerenciando a ordem de cobertura pode sempre estar ativo.
Se as expressões na área de preço 211, na área de quantidade 212, e/ou na área condicional 213 não forem avaliadas como o tipo apropriado de valor (um número para a área de preço 211 e para a área de quantidade 212 e um valor booleano para a área condicional 213), a expressão é inválida. Para indicar que a expressão é inválida, o fundo da área particular pode ser alterado de verde (indicando uma expressão válida) para vermelho (indicando uma expressão inválida). Quando uma expressão em uma das áreas da área de algoritmo 210 é inválida, uma ordem não pode ser executada.
Em algumas concretizações, outros indicadores além (ou em adição) à cor de fundo podem ser utilizados para indicar que a expressão em uma área da área de algoritmo 210 é inválida. Por exemplo, um padrão de fundo diferente, uma cor ou estilo de borda diferente, uma mensagem de texto tal como Pronto ou Invalido,, e/ou um ícone de um ponto de exclamação, pode ser utilizado.
Se a ordem sendo gerenciada de acordo com o algoritmo for preenchida, uma contraordem pode ser automaticamente feita baseada na opção de cobertura automática 204 e na quantidade de risco 205, como discutido acima.
Como discutido acima, os botões do bloco de construção 215 são utilizados para construir expressões na área de algoritmo 210 para definir um algoritmo. Os botões do bloco de construção 215 também podem ser referidos como ícones, ícones móveis, botões de ícone, botões móveis, ou elementos de interface com o usuário, por exemplo. As expressões incluem elementos (expressões lógicas e parâmetros) e são avaliadas para determinar um valor para cada área da área de algoritmo 210. Um botão do bloco de construção 215 pode ser selecionado e colocado em uma área particular
25/113 da área de algoritmo 210 para construir uma expressão. Por exemplo, um usuário pode arrastar e soltar um ou mais botões do bloco de construção 215 em uma ou mais das áreas da área de algoritmo 210, tal como a área de preço 211, a área de quantidade 212, e/ou a área condicional 213. Como outro exemplo, um usuário pode selecionar um botão do bloco de construção 215, por exemplo, por clicar no mesmo e então ele pode ser colocado na área de algoritmo mais recentemente utilizada 210. A colocação de um botão do bloco de construção 215 na área de algoritmo 210 coloca um elemento na expressão sendo construída na área de algoritmo 210. Como discutido acima, alguns elementos em uma expressão podem incluir elementos adicionais que atuam como sub-expressões, por exemplo.
Tipos de botões do bloco de construção 215 incluem: instrumentos, constantes, operadores aritméticos, operadores lógicos, operadores de precedência, construções se-então-senão, e variáveis. Os botões do bloco de construção instrumento especifica atributos do instrumento selecionado, tal como preço de oferta e quantidade de venda, por exemplo. Os botões do bloco de construção de valor constante especificam valores constantes numéricos e booleanos, por exemplo. Os botões do bloco de construção de operador aritmético incluem operações aritméticas tais como adição (+), subtração multiplicação (*), e divisão (/). Em adição, os botões do bloco de construção de operador aritmético podem incluir operações aritméticas específicas do lado da ordem, tais como +/-, a qual é adição para ordens de compra e subtração para ordens de venda (ou adição para ordens de venda e subtração para ordens de compra, como especificado por um usuário). Os botões do bloco de construção de operação lógico incluem operações lógicas tais como E, OR e NÃO e comparações tais como maior do que (>), menor do que (<), maior ou igual (>=), menor ou igual (<=), e igual (=), por exemplo. Em adição, os botões do bloco de construção de operador lógico podem incluir operações lógicas específicas do lado da ordem tais como >/<, que é maior do que para ordens de compra e menor do que para ordens de venda (ou maior do que para ordens de vendas e menor do que para ordens de compra, como especificado por um usuário). Os bo26/113 tões do bloco de construção de operador de precedência incluem parênteses ((e)) Em algumas concretizações, os botões do bloco de construção de operador de precedência podem ser utilizados para formar sub-expressões compreendidas dos elementos entre os parênteses. O botão do bloco de construção da construção se-então-senão permite especificar valores condicionais, por exemplo. O botão do bloco de construção da construção seentão-senão proporciona partes onde sub-expressões podem ser construídas utilizando um ou mais elementos. Os botões do bloco de construção de variável especificam uma variável definida pelo usuário que pode ter seu valor alterado utilizando a área de variável 206, como discutido acima, por exemplo.
As figuras 2C até 2I ilustram a construção de uma definição para um algoritmo em uma interface de negociação 200 de acordo com algumas concretizações.
Como ilustrado na figura 2C, o botão do bloco de construção de instrumento 231 é selecionado e colocado na área de preço 21 como o bloco de construção de instrumento 232. O bloco de construção de instrumento 232 permite que um usuário selecione qual atributo do instrumento selecionado deve ser utilizado a partir da lista 233. O preço de oferta do instrumento foi selecionado. Assim, a área de preço 211 contendo o bloco de construção do instrumento 232 (especificado para ser o preço de oferta do instrumento) é estimada para o preço de oferta instantâneo do instrumento no mercado.
Exemplos de atributos do instrumento selecionado incluem preço de venda, preço de compra, quantidade para venda, quantidade para compara, último preço negociado, última quantidade negociada, volume, pregão alto, pregão baixo, quantidade de venda / compra não implícita (também referida como quantidade real de compra / venda), preço de liquidação, incremento negociável mínimo (também referido como tamanho de flutuação), e número de ordens na fila em um preço (também referido como efetivo). Em adição, atributos especiais específicos do lado da ordem podem ser especificados (não apresentados), tais como preço de venda*, preço de com27/113 pra*, quantidade de venda*, e quantidade compra*, por exemplo. Para estes atributos especiais, o valor especificado é utilizado para ordens de compra e o oposto do valor especificado é utilizado para ordens de venda. Por exemplo, se preço de venda* for selecionado, então a expressão é estimada para o preço de compra para uma ordem de compra e para o preço de venda para uma ordem de venda.
Como ilustrado na Fig. 2D, o botão do bloco de construção de operação aritmético de subtração 241 é selecionado e colocado na área de preço 211 como o bloco de construção de subtração 242. Agora, a expressão na área de preço 21 inclui o bloco de construção de instrumento 232 e o bloco de construção de subtração 242.
Entretanto, a expressão na área de preço 211 está agora inválida e não pode ser estimada (preço de venda - não é sintaticamente significativo). Isto pode ser manipulado de forma ao tipo da área sendo inválido, como discutido acima. Ou seja, desde que a expressão na área de preço 211 é inválida, o fundo da área de preço 211 é alterada de verde (indicando uma expressão válida) para vermelho (indicando uma expressão inválida).
Como ilustrado na figura 2E, o botão do bloco de construção de valor de constante numérica 251 é selecionado e colocado na área de preço 211 como o bloco de construção de valor constante 252. O usuário especificou que o bloco de construção de valor constante 252 deve possuir um valor de 0,5. A expressão na área de preço 211 agora é novamente válida (observe que o fundo foi alterado de vermelho de volta para verde) e é estimada para o preço de venda instantâneo do instrumento menos 0,5.
Como ilustrado na figura 2F, o botão do bloco de construção da construção se-então-senão 261 é selecionado e colocado na área de quantidade 212 como o bloco de construção da construção se-então-senão 262. O bloco de construção da construção se-então-senão 262 inclui uma parte SE 263, uma parte ENTÃO 264 e uma parte SENÃO 265. Sub-expressões de um ou mais elementos (incluindo blocos de construção da construção seentão-senão aninhados) podem ser construídas em cada parte do bloco de construção da construção se-então-senão 262. Quando o bloco de constru28/113 ção da construção se-então-senão 262 é estimado, seu valor é determinado como a seguir. A parte SE 263 é estimada para determinar um valor booleano. Quando o valor booleano determinado a partir da parte SE 263 é estimado para verdadeiro, então o bloco de construção da construção se-entãosenão 262 é estimado para o valor da expressão na parte ENTÃO 264. Quando o valor Booleano determinado a partir da parte SE 263 é estimado para falso, então o bloco de construção da construção se-então-senão 262 é estimado para o valor da expressão na parte SENÃO 265.
Os botões do bloco de construção 215 também são utilizados para construir expressões nas partes do bloco de construção da construção se-então-senão 262. Como ilustrado, a parte SE 263 inclui uma expressão parcialmente construída para comparação para determinar se quantidade de venda do instrumento é maior do que alguma coisa. Entretanto, desde que esta expressão não é sintaticamente significativa, ela é inválida. Observe que, por conseqüência, o fundo da parte SE 263 fica vermelho e não verde para indicar isto. Adieionalmente, devido ao bloco de construção da construção se-então-senão 262 não for válido (devido a sua parte SE 263 não ser válida), a expressão na área de quantidade 212 não é válida e, portanto, ela também tem um fundo vermelho.
Como ilustrado na figura 2G, o bloco de construção da construção se-então-senão 262 agora inclui expressões válidas em cada uma de suas partes e, portanto, a expressão para a área de quantidade 212 também é válida.
Como ilustrado na figura 2H, os blocos de construção da construção se-então-senão podem ser aninhados. A parte SENÃO 265 do bloco de construção da construção se-então-senão 262 inclui outro bloco de construção da construção se-então-senão 266. Como ilustrado, desde que o bloco de construção da construção se-então-senão 266 não inclui qualquer expressão em qualquer uma de suas partes, ele não pode ser estimado e, portanto, é uma expressão inválida na parte SENÃO 265 do bloco de construção da construção se-então-senão 262. Por conseqüência, a parte SENÃO 265 possui um fundo vermelho para indicar que sua expressão é inválida.
29/113
Adicionalmente, devido à parte SENÃO 265 possuir uma expressão inválida, o bloco de construção da construção se-então-senão 262 não possui uma expressão válida e, portanto, o fundo da área de quantidade 212 é vermelho.
Como ilustrado na figura 21, a expressão na parte IF 263 do bloco de construção da construção se-então-senão 262 inclui blocos de construção de variável 273, 274, 275 e 276. Os blocos de construção de variável 273, 274, 275 e 276 podem ser colocados pela utilização de um botão do bloco de construção de variável ou pela seleção de uma opção quando utilizando o botão do bloco de construção de valor constante para indicar que o valor constante deve ser uma variável. O bloco de construção de variável 273 exibe o nome da variável (M_TH_1) e seu valor (5000). Isto pode representar, por exemplo, um limite mínimo. Como discutido acima, a área de variável 206 exibe cada nome de variável e seu valor. Como ilustrado, a área de variável 206 inclui uma coluna de nome 271 com entradas para cada bloco de construção de variável 273, 274, 275 e 276 e uma coluna de valor preestabelecido 272 com entradas de valores preestabelecidos correspondentes para cada variável. Um usuário pode selecionar uma entrada de valor preestabelecido na coluna de valor preestabelecido 272 para alterar o valor preestabelecido do respectivo bloco de construção de variável, de modo que o novo valor preestabelecido é utilizado na estimativa da expressão na área de quantidade 212. De forma similar, o usuário pode selecionar uma entrada de nome na coluna de nome 271 para alterar o nome do respectivo bloco de construção de variável. Os blocos de construção de variável 273, 274, 275 e 276 podem permitir que um usuário manipule o comportamento do algoritmo, ao invés da lógica subjacente, pela alteração do valor da variável, a qual atua como um parâmetro para o algoritmo, por exemplo.
A interface de negociação 200 proporciona um aspecto de estimativa ao Vico. O aspecto de estimativa ao Vico, como ilustrado nas figuras 2C até 2I, proporciona uma exibição de um valor de estimativa para uma expressão. O valor de estimativa dinâmica pode ser proporcionado à medida que o algoritmo está sendo definido, por exemplo. O valor de estimativa ao Vico pode ser exibido em relação à expressão sendo estimada, por exemplo.
30/113
A estimativa pode ser executada sempre que uma expressão altera ou o valor de um bloco de construção na expressão altera. A estimativa também pode ser executada periodicamente ou continuamente. Em algumas concretizações, o valor de estimativa dinâmica pode ser proporcionado para elementos individuais de uma expressão.
Como ilustrado na figura 2C, como discutido acima, o preço de venda do instrumento foi selecionado como o atributo para o bloco de construção de instrumento 232. A estimativa dinâmica 282 da área de preço 211 exibe 8,5, o qual é o preço de venda atual para o instrumento (também apresentado na grade de mercado 202). Como ilustrado na figura 2D, como discutido acima, a expressão na área de preço 211 é inválida e, portanto, nenhuma estimativa dinâmica é exibida devido à expressão não poder ser avaliada. Como ilustrado na figura 2E, a estimativa dinâmica 282 da área de preço 211 exibe um 8, o qual é o preço de venda do instrumento (8,5) menos o valor constante (0,5).
Em adição à estimativa dinâmica da área de preço 211, da área de quantidade 212, e da área condicional 213, a estimativa dinâmica pode ser executada para expressões dentro destas áreas. Por exemplo, como ilustrado na figura 2G, estimativas dinâmicas são proporcionadas para cada uma das Partes do bloco de construção da construção se-então-senão 262 bem como para a própria área de quantidade 212. A estimativa dinâmica 283 para a parte SE 263 é Verdadeira devido à quantidade de venda do instrumento (863) ser maior ou igual do que 60. A estimativa dinâmica 284 para a parte ENTÃO 264 é 2 devido à expressão na parte ENTÃO 264 ser apenas o valor constante 2. De forma similar, a estimativa dinâmica 285 para a parte SENÃO 265 é 1 devido à expressão na parte SENÃO 265 ser apenas o valor constante 1. A estimativa dinâmica 286 para a área de quantidade 212 é então 2 devido à estimativa do bloco de construção da construção se-entãosenão ser o valor da parte ENTÃO 264 devido à parte SE 263 se estimada como verdadeira.
Os botões do bloco de construção 215 e a área de algoritmo 210 da interface de negociação 200 permitem a um usuário, tal como um negoci31/113 ante ou não programador, reduzir o tempo e o risco necessário para desenvolver um algoritmo. Isto é obtido em parte pela redução ou eliminação dos erros de sintaxe (por exemplo, devido às complexidades de linguagens de programação particulares) e pelo aprovisionamento da estimativa dinâmica e realimentação para o algoritmo sendo construído (por exemplo, por indicar erros e permitir a depuração da lógica enquanto o algoritmo está sendo construído).
Uma vez que um algoritmo tenha sido definido na área de algoritmo 210, ele pode ser salvo. Um algoritmo também pode receber um nome (por exemplo, enquanto o algoritmo está sendo construído e/ou quando o algoritmo é salvo). O algoritmo salvo pode então ser chamado ou referenciado no futuro com a interface de negociação 200 ou com outra interface de negociação. Por exemplo, o algoritmo salvo pode ser carregado com a interface de negociação 200 de modo que ele possa ser editado ou reutilizado em outra ordem. Como outro exemplo, o algoritmo salvo pode ser referenciado como um tipo de ordem a partir de outra interface de negociação como discutido abaixo.
A figura 2J ilustra uma interface de negociação 290 de acordo com algumas concretizações. A interface de negociação 290 é um boleto de ordem adaptado para proporcionar a inicialização de uma ordem gerenciada por um algoritmo, onde o algoritmo é definido especificamente para esta ordem.
A interface de negociação 290 inclui uma área de algoritmo 299, um botão de ordem de algoritmo 294, e botões de bloco de construção 295. A área de algoritmo 299 inclui uma área de preço 292, uma área de quantidade 293 e uma área condicional 294. A área de preço 291 é similar à área de preço 211 discutida acima. A área de quantidade 292 é similar à área de quantidade 212 discutida acima. A área condicional 293 é similar à área condicional 213 discutida acima. Os botões do bloco de construção 295 são similares aos botões do bloco de construção 215 discutidos acima.
A interface de negociação 290 pode ser utilizada para iniciar a feitura de típicas ordens de negociação. Em adição, o botão de ordem de
32/113 algoritmo 294 pode ser selecionado para habilitar a área de algoritmo 299. Quando habilitada, a área de algoritmo 299 proporciona a definição de um algoritmo utilizando a área de preço 291, a área de quantidade 292 e a área condicional 293 de uma maneira similar a esta discutida acima para a interface de negociação 200. Uma vez que o algoritmo tenha sido definido na área de algoritmo 299 e iniciado, ele é gerenciado de acordo com o algoritmo definido de uma maneira similar a esta discutida acima para a interface de negociação 200.
De forma similar, uma área de algoritmo e botões de bloco de construção similares a estes na interface de negociação 200 e 290 podem ser incorporados em outros componentes de uma aplicação de negociação. Por exemplo, uma interface gerenciadora de cobertura pode ser adaptada para incorporar aspectos similares de modo que um algoritmo possa ser definido e especificado para gerenciar uma ordem de cobertura.
Os componentes, elementos e/ou funcionalidade da interface de negociação 200 e da interface de negociação 290 discutidos acima podem ser implementados sozinhos ou em combinação em várias formas em hardware, firmware, e/ou como um conjunto de instruções em software, por exemplo. Algumas concretizações podem ser proporcionadas como um conjunto de instruções residindo em um meio legível por computador, tal como uma memória, disco rígido, CD-ROM, DVD, EPROM, e/ou servidor de arquivo, para execução em um computador de propósito geral ou por outro dispositivo de processamento.
III. Laboratório de Projeto de Algoritmo
Algumas concretizações proporcionam uma área de superfície de desenho de projeto e blocos para projetar um algoritmo. Algumas concretizações proporcionam blocos com funcionalidade complexa para uso em um algoritmo. Algumas concretizações proporcionam blocos de grupamento colocados na área de superfície de desenho do projeto. Algumas concretizações proporcionam blocos de grupo virtualizados permitindo a instanciação dinâmica de partes de um algoritmo para manipular eventos descontínuos particulares. Algumas concretizações permitem o ajuste tanto de parâme33/113 tros como da lógica de um algoritmo rapidamente, mesmo durante uma única sessão de negociação. Algumas concretizações proporcionam realimentação para blocos à medida que o algoritmo está sendo projetado. Algumas concretizações proporcionam aspectos de segurança para reduzir erros potenciais quando um algoritmo é projetado. Algumas concretizações proporcionam a operação de alguma parte ou de todas as partes de um algoritmo quando uma conexão entre um dispositivo cliente e um servidor de algoritmo é interrompida. Algumas concretizações reduzem os riscos de algoritmos tradicionalmente programados tais como erros de sintaxe, lógica não clara, e a necessidade de um programado que não é o negociante para desenvolver o algoritmo como especificado por um negociante pela redução ou eliminação da escrita de código de programação por um usuário. Algumas concretizações proporcionam uma única aplicação para construir, depurar, e simular (com dados reais do mercado) um algoritmo e tudo ao mesmo tempo. Em adição, a aplicação única também Poe proporcionar a iniciação da feitura de ordens utilizando o algoritmo.
A figura 3A ilustra um diagrama de blocos de um sistema de negociação eletrônica 300 no qual algumas concretizações podem ser empregadas. O sistema 300 inclui um ou mais dispositivos clientes 301, um ou mais servidores de algoritmo 302, e uma ou mais bolsas eletrônicas 303. Cada dispositivo cliente 301 está em comunicação com um ou mais servidores de algoritmo 302. Cada servidor de algoritmo 302 está em comunicação com uma ou mais bolsas 303. Em adição, em algumas concretizações, apesar de não apresentado na figura 3A, um dispositivo cliente 301 também pode estar em comunicação com uma ou mais bolsas 303. A comunicação com uma bolsa por um dispositivo cliente 301 e/ou por um servidor de algoritmo 302 pode ser feita através de um dispositivo de interconexão de rede similar ao dispositivo de interconexão de rede 120 discutido acima, por exemplo.
O dispositivo cliente 301 pode ser similar ao dispositivo cliente 110, discutido acima, por exemplo. Em algumas concretizações, o dispositivo cliente 301 pode ser referido como um terminal negociador. A bolsa 303
34/113 pode ser similar à bolsa 130, discutida acima, por exemplo.
Em algumas concretizações, o servidor de algoritmo 302 está localizado fisicamente próximo ou em uma bolsa 303. Em algumas concretizações, o servidor de algoritmo 302 é parte do dispositivo cliente 301.
Em operação, um algoritmo para negociação eletrônica pode ser projetado em um dispositivo cliente 301. O algoritmo então pode ser comunicado para um servidor de algoritmo 302. O servidor de algoritmo 302 executa o algoritmo para executar a negociação eletrônica com a bolsa 303. Dados do mercado podem ser recebidos pelo servidor de algoritmo 302 para uso pelo algoritmo. Em adição, os dados do mercado podem ser recebidos pelo dispositivo cliente 301 para uso ao projetar o algoritmo. Os dados do mercado podem ser recebidos a partir da bolsa 303, por exemplo. Como outro exemplo, os dados do mercado podem ser recebidos a partir de um simulador ou a partir de dados armazenados / históricos.
A figura 3B ilustra uma interface de negociação 310 de acordo com algumas concretizações. A interface de negociação 310 é uma interface de negociação para uma aplicação de negociação algorítmica referida como Laboratório de Projeto de Algoritmo (ADL). O ADL permite que um negociante projete um algoritmo para negociação eletrônica. Entretanto, deve ser entendido que os elementos da interface de negociação ilustrada 310 podem ser incorporados em outras interfaces de negociação.
A interface de negociação 310 inclui uma área de superfície de desenho de projeto 311, uma área de lista de blocos 312, uma área de variável 313, e uma área de controle 314. Em algumas concretizações, uma ou mais dentre estas áreas podem estar em janelas ou barras de ferramentas separadas. Por exemplo, a área de lista de blocos 312 pode estar em uma janela separada da área de superfície de desenho do projeto 311.
Em operação, um algoritmo é definido na área de superfície de desenho do projeto 31 pela utilização de um ou mais blocos a partir da área de lista de blocos 312. Valores preestabelecidos para variáveis definidas pelo usuário no algoritmo podem ser especificados utilizando a área de variável 313. Uma vez que o algoritmo tenha sido definido, o algoritmo pode ser
35/113 simulado utilizando controles na área de controle 314 para indicar como a lógica do algoritmo irá se comportar. Uma ordem a ser gerenciada de acordo com o algoritmo definido pode então ser iniciada utilizando uma interface de negociação.
A área de superfície de desenho do projeto 31 proporciona a definição de um algoritmo. A área de superfície de desenho do projeto 311 também pode ser referida como área de quadro branco. A área de superfície de desenho do projeto 311 proporciona um ambiente de programação visual para projetar o algoritmo. Projetar um algoritmo inclui construir, testar, simular e/ou avaliar o algoritmo.
Em algumas concretizações, a área de superfície de desenho do projeto 311 é o foco primário da interface para a aplicação de negociação 310 e pode ser um espaço branco grande, por exemplo. Na área de superfície de desenho do projeto 311, blocos podem ser dispostos de acordo com a preferência do usuário. Em algumas concretizações, a área de superfície de desenho do projeto 31 proporciona linhas de grade que podem ser utilizadas para dispor os blocos. Em algumas concretizações, a área de superfície de desenho do projeto 311 inclui uma exibição de vista geral ou mapa que pode ser utilizado para navegar através de um algoritmo grande com vários blocos. Em algumas concretizações, a área de superfície de desenho do projeto 31 pode ser ampliada ou diminuída de modo que um usuário possa ver mais ou menos do algoritmo em um momento.
Os blocos são colocados na área de superfície de desenho do projeto 311 e conectados para definirem o algoritmo. Os blocos a serem colocados podem ser selecionados a partir da área de lista de blocos 312. Uma vez que um bloco tenha sido colocado, então ele pode ser conectado com outros blocos colocados.
A área de lista de blocos 312 inclui um ou mais blocos que podem ser selecionados e colocados na área de superfície de desenhos do projeto 311. Os blocos representam diferentes funcionalidades que podem ser combinadas de acordo com a preferência do usuário para construir um algoritmo.
36/113
Em geral, os blocos possuem entradas e saídas. Entretanto, certos blocos podem possuir somente entradas e outros podem possuir somente saídas. Por exemplo, um bloco de pausa pode possuir somente uma entrada. Como outro exemplo, um bloco de número pode possuir somente uma saída.
As entradas e as saídas dos blocos são de um dentre dois tipos principais: contínuas ou descontínuas. Uma entrada / saída do tipo contínua, em qualquer ponto no tempo particular (por conseqüência, contínua) possui um valor. Uma entrada / saída do tipo descontínua recebe / proporciona eventos descontínuos (mensagens / objetos individuais) correspondendo às ações / eventos específicos que ocorrem em algum momento particular. Quando ocorre uma ação / evento específico, um evento descontínuo correspondente pode ser gerado.
Em adição ao tipo principal de entrada / saída, uma entrada / saída pode possuir tipos particulares de valores. Por exemplo, uma entrada contínua pode possuir um tipo de valor de Booleano, número, número inteiro, número com ponto flutuante, ou instrumento. Como outro exemplo, um bloco pode possuir duas entradas contínuas de um tipo de valor variável, onde o tipo de valor para as duas entradas pode ser Booleano ou numérico, por exemplo, mas, deve corresponder. Um bloco de iguais, o qual pega duas entradas e compara as mesmas para emitir um Booleano indicando se as entradas são iguais pode possuir entradas variáveis, de modo que ele pode ser utilizado para comparar Booleanos ou números ou instrumentos, por exemplo. Como outro exemplo, uma saída descontínua pode possuir um tipo de valor de confirmação de cumprimento. Ou seja, a saída descontínua pode proporcionar eventos descontínuos de confirmação de cumprimento. Como outro exemplo, uma saída descontínua pode proporcionar mais do que um tipo de evento descontínuo para ações tais como confirmações de solicitação de ordem (indicando que uma ordem foi feita), confirmações de cumprimento (indicando se uma ordem foi cumprida ou parcialmente cumprida), confirmações de alteração de ordem (indicando se parâmetros de uma ordem em andamento, tais como preço ou quantidade, foram alterados), con37/113 firmações de remoção de ordem (indicando se uma ordem em andamento foi removida ou cancelada), ou confirmações de negociação (indicando se uma negociação ocorreu). Como outro exemplo, um evento descontínuo pode estar vazio pelo fato de que isto indica que somente um evento ocorreu. Um evento descontínuo vazio pode, por exemplo, ser ativado por um temporizador, por uma alteração em um valor Booleano, ou utilizado para ativar uma parte de um algoritmo em um momento particular (tal como hora do dia ou hora quando certas condições do mercado tiverem sido atendidas, por exemplo). Um evento descontínuo de um tipo particular pode incluir diferentes informações de um evento descontínuo de outro tipo. Por exemplo, uma confirmação de ordem pode incluir informações tais como um identificador da ordem e/ou um instrumento. Como outro exemplo, um evento descontínuo de confirmação de cumprimento pode incluir informação tal como um identificador da ordem, preço, quantidade, instrumento e/ou hora de um cumprimento. Como outro exemplo, uma confirmação de remoção de ordem pode incluir um identificador da ordem, o instrumento, e/ou a hora da remoção. Como outro exemplo, um evento descontínuo vazio pode não incluir qualquer informação (ou pode incluir somente o tempo no qual o evento ocorreu). Um evento descontínuo pode incluir informação definida pelo usuário. Por exemplo, uma confirmação de cumprimento de um evento descontínuo para uma ordem cumprida para o instrumento A pode incluir informação do mercado definida pelo usuário tal como preço de venda no instrumento B na hora do cumprimento no instrumento A.
Em algumas concretizações, um bloco inclui indicadores do tipo principal para suas entradas / saídas. Por exemplo, entradas / saídas contínuas podem ser indicadas com uma cor de fundo particular, cor de primeiro plano, padrão de fundo, cor da borda, estilo da borda, formato, símbolo, número, texto e/ou fonte particular e entradas / saídas descontínuas podem ser indicadas com outra cor, padrão, borda, formato, símbolo, número, texto e/ou fonte.
Em algumas concretizações, um bloco inclui indicadores do tipo de valor para suas entradas / saídas. Por exemplo, entradas / saídas com
38/113 um tipo de valor particular podem ser indicadas com uma for de fundo, primeiro plano, padrão de fundo, cor da borda, estilo da borda, formato, símbolo, número, texto e/ou fonte particular e entradas / saias com um tipo de valor diferente podem ser indicadas com outra cor, padrão, borda, formato, símbolo, número, texto e/ou fonte.
Em algumas concretizações, o tipo principal e/ou o tipo de valor de uma entrada ou saída é exibido em uma janela instantânea quando um cursor é posicionado próximo do bloco. Em algumas concretizações, informações sobre a configuração de um bloco são exibidas em uma janela instantânea quando um cursor é posicionado próximo do bloco.
Os blocos representam diferentes funcionalidades. Na interface de negociação 310, os blocos forma separados em quatro categorias gerais de funcionalidade: blocos básicos, blocos de negociação, blocos descontínuos e blocos de miscelânea. Entretanto, estes grupamentos são para organização e utilização conveniente por um usuário; os blocos não precisam ser agrupados e um grupo do bloco não necessita aspectos particulares. Alguns blocos podem apropriadamente se encaixar em mais do que uma categoria e outras organizações ou grupamentos de blocos também podem ser empregados.
Os blocos básicos geralmente possuem entradas e saídas contínuas e proporcionam operações aritméticas (por exemplo, adição, subtração, multiplicação e divisão), operações lógicas (por exemplo, E, OU e comparação, tal como igualdade, maior do que e menor do que), valores constantes (por exemplo, número e Booleano), e construções se-então-senão.
Os blocos de negociação geralmente proporcionam funcionalidade mais complexa relacionada com manipular uma ordem (por exemplo, fazer uma ordem, modificar uma ordem existente, ou remover uma ordem) ou informação relacionada com a ordem (por exemplo, uma confirmação de cumprimento). Os blocos de negociação podem possuir tanto entradas e saídas contínuas como descontínuas. Por exemplo, um bloco criador de mercado pode possuir entradas contínuas para especificar um instrumento, preço, quantidade e condição para cotar uma ordem e pode possuir uma
39/113 saída contínua de quantidade em andamento e uma saída descontínua para proporcionar notificações de cumprimento. Os blocos de negociação permitem que os usuários, incluindo não programadores (tais como negociantes), utilizem uma ambiente de projeto visual (tal como este proporcionado pelo ADL) para criarem e empregarem os algoritmos de negociação. Os blocos de negociação podem permitir o projeto mais rápido e preciso de um algoritmo se comparados com um programador típico com menos etapas ou instruções se comparados com outras plataformas de programação visual.
Os blocos descontínuos geralmente possuem entradas e saídas descontínuas e proporcionam operações baseadas na ocorrência de eventos descontínuos. Por exemplo, um bloco gerador pode gerar uma ocorrência de um evento descontínuo. Como outro exemplo, um bloco extrator de valor pode extrair um valor a partir de um evento descontínuo e tornar o mesmo disponível como um valor contínuo para outra parte do algoritmo. Como outro exemplo, um bloco seqüenciador pode ser utilizado para controlar a sequência na qual blocos subsequentes são processados em resposta a um evento descontínuo. Alguns blocos descontínuos podem armazenar dados a serem referenciados em um momento subseqüente. Por exemplo, um bloco acumulador de valor pode receber um evento descontínuo e extrair um valor especificado pelo usuário a partir do mesmo. O valor extraído pode ser acumulado com valores extraídos a partir de cada evento descontínuo recebido.
Os blocos de miscelânea proporcionam uma variedade de funcionalidades que podem não necessariamente se encaixar nas categorias discutidas acima. Por exemplo, estes blocos podem proporcionar cálculos de propósito especial ou mais complexos ou podem adicionar controle adicional para a execução do próprio algoritmo. Adicionalmente, os blocos de miscelânea podem proporcionar ferramentas mais precisas para controlar risco, converter números em valores negociáveis, ou utilizar o tempo (preciso ou decorrido) como uma entrada ou variável.
A figura 3C ilustra exemplos de blocos 320 que podem ser utilizados na interface de negociação 310 de acordo com algumas concretizações. Blocos ilustrativos a partir de cada uma das categorias identificadas
40/113 acima são ilustrados. Os blocos básicos ilustrativos incluem o bloco adiciona 321 e o bloco se-então-senão 322. Os blocos de negociação ilustrativos incluem o bloco criador de mercado 323, o bloco condicional compra / vende 324, e o bloco manipulador de ordem 325. Blocos descontínuos ilustrativos incluem o bloco extrator de valor 326 e o bloco ramificação 327. Blocos de miscelânea ilustrativos incluem o bloco anotação 328 e o bloco pausa 329. Cada um destes blocos, juntos com outros exemplos de blocos que podem estar incluídos em algumas concretizações são discutidos em mais detalhes abaixo.
Os blocos básicos podem incluir os blocos adiciona, subtrai, multiplica, divide, maior do que, menor do que, maior ou igual do que, menor ou igual do que, E, OU, igual, SE-ENTÃO-SENÃO, número, Booleano e constante, por exemplo.
Um bloco adiciona pode adicionar duas ou mais entradas numéricas contínuas para produzir uma saída numérica contínua. O bloco adiciona pode possuir um formato triangular com um símbolo mais (+) no meio, duas entradas contínuas no lado esquerdo, e uma saída contínua no lado direito. O bloco adiciona também pode ser referido como um bloco adicionador.
Um bloco subtrai pode subtrair uma entrada numérica contínua (por exemplo, a entrada de baixo) de uma segunda entrada numérica contínua (por exemplo, a entrada de cima) para produzir uma saída numérica contínua. O bloco subtrai pode possuir um formato triangular com um símbolo menos (-) no meio, duas entradas contínuas no lado esquerdo, e uma saída contínua no lado direito.
Um bloco multiplica pode multiplicar duas entradas numéricas contínuas para produzir uma saída numérica contínua. O bloco multiplicador pode possuir um formato triangular com um símbolo de multiplicação (X ou *) no meio, duas entradas contínuas no lado esquerdo e uma saída contínua no lado direito.
O bloco divide pode dividir uma entrada numérica contínua (por exemplo, a entrada de cima) por uma segunda entrada contínua (por exem41/113 pio, a parte de baixo) para produzir uma saída numérica contínua. O bloco divide pode possuir um formato triangular com um símbolo de divisão (/ ou -?) no meio, duas entradas contínuas no lado esquerdo, e uma saída contínua no lado direito.
Um bloco maior do que pode comparar duas entradas numéricas contínuas para determinar se uma entrada (por exemplo, a entrada de cima) é maior do que uma segunda entrada (por exemplo, a entrada de baixo). A saída é uma saída Booleana contínua de VERDADEIRO se a primeira entrada for maior do que a segunda entrada e FALSO para todas as outras condições. O bloco maior do que pode possuir um formato retangular no lado direito e um formato arqueado no lado direito com um símbolo maior do que (>) no meio, duas entradas numéricas contínuas no lado esquerdo e uma saída Booleana contínua no lado direito.
Um bloco menor do que pode comparar duas entradas numéricas contínuas para determinar se uma entrada (por exemplo, a entrada de cima) é menor do que uma segunda entrada (por exemplo, a entrada de baixo). A saída é uma saída Booleana contínua de VERDADEIRO se a primeira entrada for menor do que a segunda entrada e FALSO para todas as outras condições. O bloco menor do que pode possuir um formato retangular no lado direito e um formato arqueado no lado direito com um símbolo menor do que (<) no meio, duas entradas numéricas contínuas no lado esquerdo, e uma saída Booleana contínua no lado direito.
Um bloco maior ou igual pode comparar duas entradas numéricas contínuas para determinar se uma entrada (por exemplo, a entrada de cima) é maior ou igual a uma segunda entrada (por exemplo, a entrada de baixo). A saída é uma saída Booleana contínua VERDADEIRO se a primeira entrada for maior ou igual à segunda entrada e FALSO para todas as outras condições. O bloco maior ou igual pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com um símbolo maior ou igual (>= ou >) no meio, duas entradas numéricas contínuas no lado esquerdo e uma saída Booleana contínua no lado direito.
Um bloco menor ou igual pode comparar duas entradas numéri42/113 cas contínuas para determinar se uma entrada (por exemplo, a entrada de cima) é menor ou igual a uma segunda entrada (por exemplo, a entrada de baixo). A saída é uma saída Booleana contínua de VERDADEIRO se a primeira entrada for menor ou igual à segunda entrada e FALSO para todas as outras condições. O bloco menor ou igual pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com um símbolo de menor ou igual (<= ou <) no meio, duas entradas numéricas contínuas no lado esquerdo e uma saída Booleana contínua no lado direito.
Um bloco E pode executar uma conjunção lógica de duas entradas Booleanas contínuas de modo que se uma primeira entrada (por exemplo, a entrada de cima) for VERDADEIRO e uma segunda entrada (por exemplo, a entrada de baixo) for VERDADEIRO, então a saída Booleana é VERDADEIRO. Se qualquer uma das entradas for FALSO, então o valor de saída é FALSO. O bloco E pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto Έ no meio, duas entradas Booleanas contínuas no lado esquerdo e uma saída Booleana contínua no lado direito.
Um bloco OU pode executar uma disjunção lógica de duas entradas Booleanas contínuas de modo que qualquer uma das entradas for VERDADEIRO, então a saída Booleana é VERDADEIRO. Se ambas as entradas forem FALSO, então o valor de saída é FALSO. O bloco OU pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto OU no meio, duas entradas Booleanas contínuas no lado esquerdo e uma saída Booleana contínua no lado direito.
O bloco igual a pode comparar duas entradas contínuas para determinar se uma entrada (por exemplo, a entrada de cima) é igual a uma segunda entrada (por exemplo, a entrada de baixo). As entradas podem ser de tipo de valor variável de modo que o bloco igual a pode aceitar valores tais como número, Booleano, ou instrumento, contanto que cada entrada seja do mesmo tipo. A saída é uma saída Booleana contínua de VERDADEIRO se as duas entradas forem iguais e de FALSO para todas as outras condições. O bioco igual a pode possuir um formato retangular no lado esquerdo e um
43/113 formato arqueado no lado direito com um símbolo igual a (=) no meio, duas entradas variáveis contínuas no lado esquerdo e uma saída Booleana contínua no lado direito. O bloco igual a também pode ser referido como um bloco de igualdade.
Um bloco SE-ENTÃO-SENÃO pode possuir três entradas contínuas: uma entrada Se Booleana, uma entrada ENTÃO variável, e uma entrada SENÃO variável. O bloco SE-ENTÃO-SENÃO possui uma saída variável contínua. Se o valor de entrada SE for VERDADEIRO, a saída é o valor da entrada ENTÃO. Se o valor de entrada SE for FALSO, a saída é o valor da entrada SENÃO. O bloco SE-ENTÃO-SENÃO pode possuir um formato retangular com um símbolo ? no meio, uma entrada SE Booleana contínua e duas entradas SENÃO e ENTÃO variáveis contínuas no lado esquerdo, e uma saída variável contínua no lado direito.
Um bloco de número pode possuir uma saída numérica contínua que proporciona um valor numérico especificado pelo usuário. Quando coletado, o usuário pode ser solicitado a entrar com o valor numérico para o bloco de número. Alternativamente, o bloco de número pode ser preestabelecido para um valor predefinido tal como 1. Em adição, o valor pode ser especificado para a quantidade do boleto de ordem ou preço do boleto de ordem. Se for assim, o valor do bloco de número será o respectivo valor especificado quando uma ordem for iniciada para ser gerenciada utilizando o algoritmo. O valor especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de número e a utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com um valor. O valor especificado também pode ser alterado se o bloco de número for especificado para ser variável utilizando a área de variável 313 discutida acima. O bloco de número pode possuir um formato circular com o número especificado no meio e uma saída numérica contínua no lado direito. Este bloco também pode ser referido como bloco de número constante.
Um bloco de Booleano pode possuir uma saída Booleana contínua que proporciona um valor Booleano especificado pelo usuário. Quando
44/113 colocado, o usuário pode ser solicitado a entrar com o valor Booleano para o bloco de Booleano. Alternativamente, o bloco de Booleano pode ser preestabelecido para um valor predefinido tal como VERDADEIRO. O valor especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de Booleano e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com um valor. O valor especificado também pode ser alterado se o bloco de Booleano for especificado como sendo variável utilizando a área de variável 313 discutida abaixo. O bloco de Booleano pode possuir um formato circular com o valor Booleano especificado exibido de forma textual no meio e uma saída Booleana contínua no lado direito. Este bloco também pode ser referido como um bloco de Booleano constante.
Em algumas concretizações, o bloco de número e o bloco de Booleano podem ser consolidados em um único bloco tal como um bloco de constante. Um bloco de constante pode possuir uma saída variável contínua que proporciona um valor especificado pelo usuário. Quando colocado, o usuário pode ser solicitado e entrar com o tipo de valor e o valor para o bloco de constante. Alternativamente, o bloco de constante pode ser preestabelecido para um tipo de valor predefinido tal como numérico e um valor predefinido tal como 1. Em adição, o valor pode ser especificado para a quantidade do boleto de ordem ou para o preço do boleto de ordem. Se for assim, o valor do bloco de constante será o respectivo valor especificado quando uma ordem é iniciada para ser gerenciada utilizando o algoritmo. O valor especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de constante e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com um valor. O valor especificado também pode ser alterado se o bloco de constante for especificado para ser variável utilizando a área de variável 313 discutida acima. O bloco de constante pode possuir um formato circular com o valor especificado exibido de forma textual no meio e uma saída variável contínua no lado direito. Em algumas concretizações, o bloco de constante também pode suportar a especificação de um instrumento para valor, similar
45/113 ao bloco de instrumento discutido abaixo.
Os blocos de negociação incluem os blocos de instrumento, de atributo do instrumento, de criador de mercado, de criador de perna, de margem customizada, de compra / venda responsiva, de compra / venda condicional, de manipulador de ordem, de instrumento SE-ENTÃO-SENÃO, de atributo de instrumento no preço, de margem entre, de negociação, de ordem, de calculador de cumprimento, e de acumulador de cumprimento, por exemplo.
Um bloco de instrumento pode possuir uma saída de instrumento contínua que proporciona um nome de instrumento. O nome de instrumento pode ser um instrumento listado pela bolsa ou um instrumento sintético, por exemplo. Quando colocado, o usuário pode ser solicitado a especificar o nome do instrumento para o bloco de instrumento. O nome de instrumento pode ser selecionado a partir de uma lista, por exemplo. Alternativamente, o bloco de instrumento pode ser preestabelecido para um valor predefinido. O valor especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de instrumento e utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com um valor. O valor especificado também pode ser alterado se o bloco de instrumento for especificado para ser variável utilizando a área de variável 313.
Um bloco de atributo de instrumento pode possuir uma entrada de instrumento contínua e uma saída numérica contínua. O bloco de atribuo de instrumento pode pegar um nome de instrumento e emitir um valor para um atributo especificado deste instrumento. Os atributos podem incluir melhor quantidade de venda, melhor preço de venda, melhor quantidade de compra, melhor preço de compra, volume, preço mais alto da sessão, preço mais baixo da sessão, incremento mínimo negociável, último preço negociado, última quantidade negociada, quantidade total (quantidade total negociada no último preço negociado, até que uma negociação ocorra em um novo preço), preço de liquidação a partir da sessão de negociação anterior, melhor quantidade de venda (não subtendida), melhor quantidade de compra
46/113 (não subtendida), efetivo de venda (número de ordens no mercado no melhor preço de venda), efetivo de compra (número de ordens no mercado no melhor preço de compra), ou posição (inventor geral do usuário em um instrumento particular). Quando colocado, o usuário pode ser solicitado a entrar com o atributo a ser proporcionado pelo bloco de atributo do instrumento. Alternativamente, o bloco de atributo do instrumento pode ser preestabelecido para um valor predefinido tal como uma quantidade de venda. O atributo especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de atributo do instrumento e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com um atributo. O atributo especificado também pode ser alterado se o bloco de atributo do instrumento for especificado para ser variável utilizando a área de variável 313 discutida abaixo.
Um bloco de criador de mercado pode submeter uma ordem de compra ou de venda para um objeto negociável especificado por uma entrada de instrumento contínua em um preço e quantidade especificados por duas entradas numéricas contínuas, quando a entrada Booleana contínua de condição é VERDADEIRA. A entrada de condição é opcional e é preestabelecida para VERDADEIRA se nenhuma entrada for proporcionada. O bloco de criador de mercado pode remover a ordem quando a entrada de condição é FALSA. O bloco de criador de mercado também pode modificar o preço ou a quantidade de uma ordem existente se os respectivos valores de entrada de preço e quantidade alterarem. O valor especificado na entrada de quantidade representa a quantidade máxima desejada de cumprimento, levando em consideração cumprimentos anteriores. Por exemplo, se o valor de entrada de quantidade de 5 for proporcionado, uma ordem para 5 pode ser informada em um mercado e se uma quantidade de 3 for cumprida, uma ordem de 2 irá continuar a ser trabalhada, mesmo se a entrada de preço alterar. Se a entrada de quantidade alterar, a ordem trabalhada será para a nova quantidade especificada menos a quantidade já cumprida de 3. O bloco de criado de mercado pode proporcionar uma ou mais saídas descontínuas que proporcionam confirmação de cumprimento e/ou eventos descontínuos de
47/113 solicitação de ordem. O bloco de criador de mercado pode incluir uma opção para especificar que ordens geradas pelo bloco de criador de mercado devem permanecer no livro de ordens mesmo se o algoritmo for apagado, suspenso, parado ou pausado. Este aspecto pode ser útil para partes de cobertura de algoritmos, por exemplo. O bloco de criador de mercado pode incluir uma opção para especificar que uma ordem gerada pelo bloco de criador de mercado é para ser marcado como congelado enquanto ele é exibido no livro de ordens, o que pode tornar mais fácil identificar um algoritmo funcionando de forma não apropriada ou incompleto (se, por exemplo, não se espera que as ordens permaneçam no livro de ordens). O bloco de criador de mercado também pode incluir uma opção para especificar um indicador de cor ou de texto para ser associado com ordens colocados pelo bloco de criador de mercado para tomar as mesmas mais fáceis de identificar em uma janela de ordem, por exemplo.
Um bloco criador de perna pode submeter ordens de compra ou de venda para objetos negociáveis de pernas de uma margem customizada, onde os objetos negociáveis para cada perna são especificados por uma entrada de instrumento contínua. O preço e a quantidade desejada para a margem customizada são especificados pelas duas entradas numéricas contínuas. O bloco criador de perna trabalha uma ordem (ordens) individual para a margem quando a entrada Booleana contínua de condição é VERDADEIRA. A entrada de condição é opcional e é preestabelecida para VERDADEIRA se nenhuma entrada for proporcionada. O bloco criador de perna pode apagar a ordem (ordens) quando a entrada de condição é FALSA. O bloco criador de perna também pode modificar o preço e/ou a quantidade de uma ordem (ordens) em andamento se os valores de entrada de preço e/ou de quantidade alterarem. O valor especificado na entrada de quantidade representa a quantidade máxima desejada de cumprimento da margem, levando em consideração cumprimentos anteriores. Por exemplo, se o valor de entrada de quantidade de 5 for proporcionado, uma ordem para 5 pode ser informada no mercado e se uma quantidade de 3 for cumprida, uma ordem de 2 irá continuar a ser trabalhada, mesmo se a entrada de preço alterar. Se a
48/113 entrada de quantidade alterar, a ordem trabalhada será para a nova quantidade especificada menos a quantidade já cumprida de 3. O bloco criador de perna pode proporcionar uma ou mais saídas descontínuas que proporcionam cumprimento de margem, solicitação de ordem, e/ou eventos descontínuos de cumprimento de leg. Após os instrumentos terem sido proporcionados para as pernas da margem, o criador de perna pode ser configurado, por exemplo, por selecionar o bloco criador de perna e utilizar uma ação tal como um item de menu ou clique duplo para ser solicitado a especificar parâmetros e configurações. Parâmetros que podem ser especificados para cada perna da margem incluem múltiplo (o coeficiente da perna de margem), quantidade de negociação (quantidade para cada perna da margem, onde um número positivo é uma compra e um número negativo é uma venda), mercado de trabalho? (alterna se a perna da margem irá cotar ativamente), alteração líquida (alterna entre converter o cálculo de margem customizada para uma alteração líquida ao invés do preço), paga flutuação mínima de preço (número de incrementos mínimos de preço através dos quais a margem customizada irá entrar com uma ordem de limite em uma perna de tendência; um número positivo significa mais agressivo para ser cumprido, um número negativo significa menos agressivo para ser cumprido), e proporção de tendência (unidades de quantidade requeridas de existir em uma perna de tendência de modo a trabalhar uma unidade de quantidade em uma perna e cotação; esta pode ser uma proporção da quantidade entre as duas pernas ou uma quantidade limite na perna de tendência, por exemplo). Configurações que podem ser especificadas incluem lado (compra ou venda da margem customizada), sempre trabalha dentro do mercado interno (alterna pelo fato de que, quando verdadeiro, o bloco criador de perna somente irá trabalhar ordens de perna individual que aparecem no melhor mercado ou mercado interno e, em algumas concretizações, somente irá trabalhar a perna mais provável de ser cumprida como determinado pelo exame da ofertas do mercado / proporções de tamanho de compra), desabilita modo de sniping (lance no último instante) (alterna o comportamento preestabelecido que se o bloco criador de perna puder obter o preço de margem desejado,
49/113 ele irá apagar as ordens atuais em andamento e simultaneamente submeter ordens em todas as pernas para serem cumpridas no preço de margem desejado; quando desabilitado, o bloco criador de perna somente irá trabalhar a perna mercado de trabalho? especificada mesmo se o preço desejado se tornar momentaneamente disponível), tamanho de recorte (quantidade a ser trabalhada em um momento de forma incrementai até que a quantidade total tenha sido cumprida como definido pela entrada de quantidade de margem proporcionada), e indicador (especifica um indicador definido pelo usuário associado com um evento descontínuo de cumprimento de margem para tornar identificar os mesmo mais facilmente). O bloco criador de perna pode incluir uma opção para especificar que as ordens geradas pelo bloco criador de perna devem permanecer no livro de ordens mesmo se o algoritmo for apagado, interrompido, parado, ou pausado. O bloco criador de perna pode incluir uma opção para especificar que uma ordem gerada pelo bloco criador de perna é para ser marcado como congelado enquanto ele é exibido no livro de ordens, o que pode tornar mais fácil identificar um algoritmo funcionando de forma imprópria ou incompleto (se, por exemplo, não for esperado que as ordens permaneçam no livro de ordens). O bloco criador de perna também pode incluir uma opção para especificar um indicador de cor ou de texto para ser associado com ordens feitas pelo bloco criador de perna para tornar as mesmas mais fáceis de identificar em uma janela de ordem, por exemplo. Este bloco também pode ser referido como um bloco de margem automática ou como um bloco criador de margem.
Um bloco de margem customizada pode submeter ordens de compra ou de venda para objetos negociáveis de pernas de uma margem customizada, onde a margem customizada é proporcionada como um instrumento a Partir de uma aplicação externa. O preço e a quantidade desejada para a Margem customizada são especificados pelas duas entradas numéricas contínuas. O bloco de margem customizada trabalha uma ordem (ordens) individual para a margem quando a entrada Booleana contínua de condição é VERDADEIRA. A entrada de condição é opcional e é preestabelecida para VERDADEIRA se nenhuma entrada for proporcionada. O bloco
50/113 de margem customizada pode apagar a ordem (ordens) quando a entrada de condição é FALSA. O bloco de margem customizada também pode modificar o preço e/ou a quantidade de uma ordem (ordens) em andamento se o os valores de entrada de preço e/ou de quantidade alterarem. O valor especificado na entrada de quantidade representa a quantidade de cumprimento desejada máxima da margem, levando em consideração cumprimentos anteriores. Por exemplo, se o valor de entrada de quantidade de 5 for proporcionado, se uma quantidade de 3 for cumprida, uma ordem de 2 continua a ser trabalhada, mesmo se a entrada de preço alterar. Se a entrada de quantidade alterar, a ordem trabalhada será para a nova quantidade especificada menos a quantidade já cumprida de 3. O bloco de margem customizada pode incluir uma entrada Booleana opcional para permitir o dimensionamento dinâmico das quantidades da ordem das pernas das ordens individuais ao invés de requerer que a quantidade de ordem original esteja presente nas pernas de cobertura. O bloco de margem customizada pode proporcionar uma ou mais saídas descontínuas que proporcionam confirmação de cumprimento e/ou eventos descontínuos de solicitação de ordem. Quando colocado, o usuário pode ser solicitado a especificar um instrumento projetado customizado a partir de uma aplicação externa, onde o instrumento projetado customizado proporciona dados de mercado sintéticos representando uma estratégia de negociação. Alternativamente, o instrumento projetado customizado especificado pode ser especificado e/ou alterado pelo usuário durante o projeto do algoritmo, por exemplo, por selecionar o bloco de margem customizada e utilizar uma ação tal como um item de menu ou clique duplo para ser solicitado a especificar o instrumento projetado customizado a partir de uma aplicação externa. Adicionalmente, .durante o projeto do algoritmo, um usuário pode especificar configurações que podem incluir desabilita ‘modo de sniping (lance no último segundo antes que alguém possa superar) (alterna o comportamento preestabelecido pelo fato de que se o bloco de margem customizada puder alcançar o preço de margem desejado, ele irá apagar as ordens atuais em andamento e simultaneamente submeter ordens em todas as pernas para serem cumpridas no preço de margem de51/113 sejado; quando desabilitado, o bloco de margem customizada somente irá trabalhar as pernas de cotação especificadas mesmo se o preço desejado se tornar momentaneamente disponível) e tamanho de corte (quantidade a ser trabalhada em um momento de forma incrementai até que a quantidade total tenha sido cumprida como definido pela entrada de quantidade de margem proporcionada). O bloco de margem customizada pode incluir uma opção para especificar que as ordens geradas pelo bloco de margem customizada devem permanecer no livro de ordens mesmo se o algoritmo for apagado, congelado, parado ou pausado. O bloco de margem customizada pode incluir uma opção para especificar que uma ordem gerada pelo bloco de margem customizada é para ser marcada como congelada enquanto ela é exibida no livro de ordens, o que pode tornar mais fácil identificar um algoritmo funcionando de forma imprópria ou incompleto (se, por exemplo, não for esperado que as ordens permaneçam no livro de ordens). O bloco de margem customizada também pode incluir uma opção para especificar um indicador de cor ou de texto para ser associado com ordens feitas pelo bloco de margem customizada para tornar as mesmas mais fáceis de identificar em uma janela de ordem, por exemplo. Em algumas concretizações, um bloco de margem customizada pode proporcionar um instrumento projetado customizado específico a partir de uma aplicação externa como uma saída de instrumento contínua. Em algumas concretizações, um bloco de margem customizada pode proporcionar um valor específico numérico ou Booleano a partir de uma aplicação externa como, uma saída numérica ou Booleana contínua. Este bloco também pode ser referido como um bloco de estratégia customizada ou como um bloco de aplicação externa customizada.
Um bloco de compra / venda responsivo pode iniciar a feitura de uma ordem de compra ou de venda para um instrumento especificado por uma entrada de instrumento contínua quando um evento descontínuo é recebido em uma entrada descontínua. O preço e/ou a quantidade no qual executar a ordem pode ser proporcionado pelas entradas numéricas contínuas. Alternativamente, o preço e/ou a quantidade podem ser especificados por equações definidas pelo usuário que são avaliadas para determinar o
52/113 respectivo valor de preço ou quantidade a ser utilizado. Em algumas concretizações, um dentre o preço e a quantidade pode ser proporcionado por uma entrada numérica contínua e o outro pode ser proporcionado pela avaliação de uma equação definida pelo usuário. A equação (equações) especificada para o preço e/ou a quantidade (se utilizados) pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, por selecionar o bloco de compra / venda responsivo e utilizar uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com a equação (equações). Uma equação pode ser informada de forma textual ou utilizando botões do bloco de construção similares aos botões de bloco de construção 215 discutidos acima, por exemplo. Uma vez que o bloco de compra / venda responsivo tenha iniciado a execução da ordem, a ordem não é atualizada baseado nas alterações subseqüentes nos valores proporcionados de preço e/ou de quantidade. O bloco de compra / venda responsivo pode incluir uma opção para especificar que as ordens geradas pelo bloco de compra / venda responsivo devem permanecer no livro de ordens mesmo se o algoritmo for apagado, congelado, parado, ou pausado. O bloco de compra / venda responsivo pode incluir uma opção para especificar que uma ordem gerada pelo bloco de compra / venda responsivo é para ser marcada como congelada enquanto ela é exibida no livro de ordens, o que pode tornar mais fácil identificar um algoritmo funcionando de forma imprópria ou incompleto (se, por exemplo, não for esperado que as ordens permaneçam no livro de ordens). O bloco de compra / venda responsivo também pode incluir uma opção para especificar um indicador de cor ou de texto para ser associado com ordens executadas pelo bloco de compra / venda responsivo para tornar mais fácil as mesmas de identificar em uma janela de ordem, por exemplo.
Um bloco de compra / venda condicional pode iniciar a execução de uma ordem de compra ou de venda para um instrumento especificado por uma entrada de instrumento contínua em um preço e quantidade especificados por duas entradas numéricas contínuas, quando a entrada Booleana contínua de condição é VERDADEIRA. A entrada de condição é opcional e preestabelecida para VERDADEIRA se nenhuma entrada for proporcionada.
53/113
O bloco de compra / venda condicional não apaga a ordem quando ao valor da entrada de condição é FALSO (mas a execução de uma ordem não é iniciada até que a entrada de condição se torne VERDADEIRA). O bloco de compra / venda condicional pode somente submeter uma ordem por vez. Em algumas concretizações, o bloco de compra / venda condicional irá continuar a submeter ordens (uma por vez) para tentar alcançar o valor de quantidade inicialmente proporcionado, mesmo se as ordens puderem ser apagadas (por exemplo, por outro bloco no algoritmo ou manualmente por um usuário). Uma vez que o bloco de compra / venda condicional tenha iniciado a execução da ordem, a ordem não é atualizada baseado nas alterações subseqüentes nos valores proporcionados de preço e/ou quantidade. O bloco de compra / venda condicional pode proporcionar uma ou mais saídas descontínuas que proporcionam confirmação de cumprimento e/ou eventos descontínuos de solicitação de ordem. O bloco de compra / venda condicional pode incluir uma opção para especificar que ordens geradas pelo bloco de compra / venda condicional devem permanecer no livro de ordens mesmo se o algoritmo for apagado, congelado, parado ou pausado. O bloco de compra / venda condicional pode incluir uma opção para especificar que uma ordem gerada pelo bloco de compra / venda condicional é para ser marcada como congelada enquanto ela é exibida no livro de ordens, o que pode tornar mais fácil identificar um algoritmo funcionando de forma imprópria ou incompleto (se, por exemplo, não for esperado que as ordens permaneçam no livro de ordens). O bloco de compra / venda condicional também pode incluir uma opção para especificar um indicador de cor ou de texto para ser associado com as ordens colocadas pelo bloco de compra / venda condicional para tornar as mesmas mais fáceis de identificar em uma janela de ordem, por exemplo.
Um bloco manipulador de ordem pode receber um evento de ordem em uma entrada descontínua e gerenciar a ordem correspondente baseado nos valores de preço e de quantidade proporcionados por duas entradas numéricas contínuas. Se um valor proporcionado em uma entrada Booleana contínua se tornar VERDADEIRO, a ordem é apagada. O bloco mani54/113 pulador de ordem pode proporcionar uma ou mais saídas descontínuas que proporcionam eventos descontínuos de confirmação de cumprimento, confirmação de remoção, e/ou confirmação de alteração. O bloco manipulador de ordem pode proporcionar quantidade em andamento e/ou quantidade cumprida em saídas numéricas contínuas. O bloco manipulador de ordem pode incluir uma opção para especificar que ordens gerenciadas pelo bloco manipulador de ordem devem permanecer no livro de ordens mesmo se o algoritmo for apagado, congelado, parado ou pausado.
Um bloco de instrumento SE-ENTÃO-SENÃO pode possuir três entradas contínuas: uma entrada SE Booleana, uma entrada ENTÃO de instrumento, e uma entrada SENÃO de instrumento. O bloco de instrumento SE-ENTÃO-SENÃO possui uma saída de instrumento contínua. Se o valor da entrada SE for VERDADEIRO, a saída é o valor de instrumento da entrada ENTÃO. Se o valor da entrada SE for FALSO, a saída é o valor de instrumento da entrada SENÃO. O bloco de instrumento SE-ENTÃO-SENÃO pode possuir um formato retangular com um símbolo ? no meio, uma entrada Se Booleana contínua e duas entradas SENÃO e ENTÃO de instrumento contínuas no lado esquerdo, e uma saída de instrumento contínua no lado direito. O bloco de instrumento SE-ENTÃO-SENÃO é similar ao bloco SE-ENTÃO-SENÃO discutido acima, mas especializado para valores de instrumento.
Um bloco de atributo de instrumento no preço pode possuir uma entrada de instrumento contínua, uma entrada numérica contínua, e uma saída numérica contínua. O bloco de atributo de instrumento no preço pode pegar um nome de instrumento (proporcionado pela entrada de instrumento contínua) e um preço (proporcionado pela entrada numérica contínua) e emitir um valor para um atributo especificado deste instrumento no preço especificado. Os atributos podem incluir quantidade de venda, quantidade de compra, quantidade de venda real (não subentendida), quantidade de compra real (não subentendida), efetivo de venda (número de ordens de venda no mercado no preço especificado), e efetivo de compra (número de ordens de compra no mercado no preço especificado). Quando colocado, o usuário
55/113 pode ser solicitado a entrar com o atributo a ser proporcionado pelo bloco de atributo de instrumento no preço. Alternativamente, o bloco de atributo de instrumento no preço pode ser preestabelecido para um valor predefinido tal como a quantidade de venda. O atributo especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seção do bloco de atributo de instrumento no preço e utilizar uma ação tal como um item de menu ou clique duplo para ser solicitado a informar um atributo. O atributo especificado também pode ser alterado se o bloco de atributo do instrumento no preço for especificado como sendo variável utilizando a área de variável 313 discutida abaixo.
Um bloco de margem entre pode possuir duas entradas de instrumento contínuas e uma saída de instrumento contínua. O bloco de margem entre pode pegar dois nomes de instrumento (por exemplo, um a partir de uma entrada de perna frontal e o outro a partir de uma entrada de perna traseira) e emitir um nome de instrumento correspondendo à margem listada pela bolsa dos dois instrumentos proporcionados (por exemplo, perna frontal - perna traseira). Por exemplo, um bloco de margem entre pode ser utilizado para fazer referência a uma margem entre dois instrumentos diferentes tais como CLZO (December Crude 2010) e CLF1 (Jan Crude 2011). Estas pernas podem ser referidas como a perna frontal e perna traseira, respectivamente. A saída correspondente do bloco margem entre é o instrumento de margem listado pela bolsa, neste exemplo, o instrumento listado pela bolsa CLZ0-CLF1 (o mercado de margem de December 2010 January 2011). Este bloco pode ser utilizado para melhorar a segurança da programação para reduzir erros no processo de corretamente referenciar margens entre instrumentos. Por exemplo, os dois instrumentos de entrada podem ser denotados como variáveis que podem ser alteradas quando o algoritmo está executando ou especificados para serem margens listadas pela bolsa diferentes para diferentes ordens sendo gerenciadas pelo algoritmo. O bloco margem entre proporciona segurança por encontrar o instrumento de margem listada correto sem precisar que uma terceira variável seja estabelecida ou alterada para corresponder as duas variáveis de ins56/113 trumento individuais. O bloco de margem entre também pode ser utilizado para localizar ou pesquisar a existência de certas margens listadas pela bolsa.
Um bloco de negociação pode proporcionar dados de negociação em eventos descontínuos em uma saída de evento descontínuo para um instrumento proporcionado em uma entrada de instrumento contínua. Os eventos descontínuos incluem valores de preço de negociação e de quantidade de negociação associados com cada negociação. Os dados de negociação podem ser recebidos a partir de uma bolsa, por exemplo. O preço de negociação e a quantidade de negociação podem ser extraídos a partir de eventos descontínuo por um bloco extrator de valor, por um bloco acumulador de valor, por um bloco de mínimo descontínuo, e/ou por um bloco de máximo descontínuo, por exemplo.
Um bloco de ordem pode permitir que uma ordem existente (ou seja, uma ordem que já foi executada fora do algoritmo e não está sendo gerenciada por outro algoritmo) seja gerenciada de acordo com o algoritmo definido. Por exemplo, o bloco de ordem pode ser utilizado para proporcionar tipos particulares de rotinas de cobertura automática para limitar ordens que foram feitas manualmente por um usuário. O bloco de ordem proporciona uma saída de instrumento contínua do instrumento para o qual é a ordem existente. O bloco de ordem também proporciona uma saída descontínua para eventos descontínuos de ordem relacionados com a ordem tais como confirmação de cumprimento. Em algumas concretizações, se um algoritmo definido incluir um bloco de ordem ele pode ser apresentado em uma lisa de algoritmos disponíveis a serem aplicados para uma ordem existente em uma interface de negociação que inclui uma janela de ordem, por exemplo. Como outro exemplo, um identificador de ordem pode ser proporcionado como uma variável para o algoritmo quando ele é executado ou especificado no próprio bloco de ordem. Quando aplicado para a ordem existente, o algoritmo definido incluindo o bloco de ordem pode então gerenciar a ordem de acordo com o algoritmo.
Um bloco calculador de cumprimento pode proporcionar uma sa57/113 ida descontínua para eventos descontínuos de cumprimento de margem. O bloco calculador de cumprimento pode ser utilizado quando o algoritmo compra / vende uma margem customizada utilizando um bloco criador de perna ou um bloco de margem customizada. O bloco calculador de cumprimento recebe múltiplas entradas de instrumento contínuas e uma saída descontínua para cada perna de execução de negociação (cumprimento), as primeiras proporcionando os instrumentos para as pernas e as últimas proporcionando eventos descontínuos para confirmações de cumprimento. Após os instrumentos terem sido proporcionados para as pernas da margem, o bloco calculador de cumprimento pode ser configurado, por exemplo, pela seleção do bloco calculador de cumprimento e utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a especificar parâmetros e configurações. Parâmetros que podem ser especificados para cada perna da margem incluem múltiplo (o coeficiente da perna de margem), quantidade de negociação (quantidade de cada perna de margem, onde um número positivo é uma compra e um número negativo é uma venda), e alteração líquida (alterna seja para converter o cálculo de margem customizada para uma alteração líquida ao invés do preço). Configurações que podem ser especificadas incluem lado (compra ou venda da margem customizada para o calculador de cumprimento) e indicador (especifica um indicador definido pelo usuário associado com o evento descontínuo de cumprimento de margem para tornar identificar o mesmo mais fácil).
Um bloco acumulador pode receber uma ordem ou evento descontínuo de cumprimento em uma entrada descontínua e proporcionar em uma saída numérica contínua a quantidade acumulada para os eventos descontínuos recebidos. Por exemplo, se um bloco acumulador for conectado com um bloco criador de mercado, o bloco acumulador pode aumentar o valor de sua saída numérica contínua para cada evento descontínuo de cumprimento parcial recebido a partir do bloco criador de mercado. Este bloco pode ser utilizado para manter um rastro do número total de cumprimentos, por exemplo. O bloco acumulador pode ser um bloco de passagem de modo que cada evento descontínuo recebido é passado através de uma saí58/113 da descontínua correspondente. O bloco acumulador pode incluir uma entrada descontínua de reinicialização que, quando recebendo um evento, irá reiniciar a quantidade acumulada para 0. O bloco acumulador pode ser similar ao bloco acumulador de valor discutido abaixo, mas com funcionalidade mais restrita devido ao mesmo acumular somente a quantidade cumprida.
Blocos descontínuos podem incluir os blocos gerador, extrator de valor, acumulador de valor, balde de valores, média móvel descontínua, estado, ramificação, multiplexador, funil, seqüenciador, mínimo descontínuo e máximo descontínuo, por exemplo.
Um bloco gerador pode proporcionar um evento descontínuo em uma saída descontínua sempre que uma condição for VERDADEIRA. A condição pode ser proporcionada por uma entrada Booleana contínua de modo que sempre que a entrada de condição se tornar VERDADEIRA, um evento é gerado. Alternativamente, a condição pode ser especificada para ser um evento talo como no início (a condição é VERDADEIRA quando o algoritmo é iniciado, e FALSA depois disso de modo que um único evento descontínuo é proporcionado quando o algoritmo é iniciado), na alteração (a condição é VERDADEIRA sempre que o valor de entrada Booleano contínuo alterar de modo que indo de VERDADEIRO para FALSO ou de FALSO para VERDADEIRO, ambas geram um evento descontínuo), a cada X (a condição é VERDADEIRA uma vez a cada intervalo de tempo especificado, onde o intervalo pode ser especificado em minutos, segundos, ou milissegundos).
Um bloco extrator de valor pode receber um evento descontínuo em uma entrada descontínua e extrair um valor especificado pelo usuário a partir do evento. Alternativamente, o bloco extrator de valor pode, quando o evento descontínuo é recebido, estimar uma equação definida pelo usuário para determinar o valor extraído. O valor extraído pode então ser proporcionado em uma saída contínua. O tipo de valor da saída depende do tipo do valor extraído. As expressões seguintes podem estar disponíveis para uso ao especificar o valor a ser extraído a partir do evento descontínuo: instrumento (proporcionando o instrumento associado com o evento descontí59/113 nuo), quantidade de cumprimento (proporcionando a quantidade de cumprimento associada com o evento descontínuo), quantidade da ordem (proporcionando a quantidade da ordem associada com o evento descontínuo), preço da ordem (proporcionando o preço da ordem associado com o evento descontínuo), quantidade executada (proporcionando a acumulação de cumprimentos com respeito à quantidade da ordem), quantidade em andamento (proporcionando a acumulação de uma quantidade da ordem não executada em um preço de ordem específico), quantidade de negociação (proporcionando a quantidade de uma negociação executada em uma bolsa), preço de negociação (proporcionando o preço de uma negociação executada em uma bolsa), e variável (proporcionando o valor de uma variável específica definida pelo usuário ou o valor de qualquer outra saída de bloco no algoritmo que não é parte de um bloco de grupo virtualizado). Em algumas concretizações, o bloco extrator de valor pode fazer referência a um valor a partir de outra saída do bloco. O valor pode ser referenciado utilizando uma expressão variável discutida acima ou o valor pode ser proporcionado para uma entrada variável contínua do bloco extrator de valor, por exemplo. O bloco extrator de valor pode ser um bloco de passagem de modo que cada evento descontínuo recebido é passado através de uma saída descontínua correspondente.
Um bloco acumulador de valor pode receber um evento descontínuo em uma entrada descontínua e extrair um valor especificado pelo usuário a partir do evento para acumular o valor à medida que cada evento descontínuo é recebido. O valor acumulado é proporcionado em uma saída numérica contínua. As expressões seguintes podem estar disponíveis para uso ao especificar o valor a ser extraído a partir do evento descontínuo: preço de cumprimento (proporcionado o preço de cumprimento associado com o evento descontínuo), quantidade de cumprimento (proporcionando a quantidade de cumprimento associada com o evento descontínuo), quantidade da ordem (proporcionando a quantidade da ordem associada com o evento descontínuo), preço da ordem (proporcionando o preço da ordem associado com o evento descontínuo), quantidade executada (proporcionando a
60/113 acumulação de cumprimentos com respeito à quantidade da ordem), quantidade em andamento (proporcionando a acumulação de uma quantidade da ordem não executada em um preço de ordem específico), quantidade de negociação (proporcionando a quantidade de uma negociação executada em uma bolsa), preço de negociação (proporcionando o preço de uma negociação executada em uma bolsa), e variável (proporcionando o valor de uma variável específica definida pelo usuário ou o valor de qualquer outra saída de bloco no algoritmo que não é parte de um bloco de grupo virtualizado). O bloco acumulador de valor pode ser um bloco de passagem de modo que cada evento descontínuo recebido é passado através de uma saída descontínua correspondente. O bloco acumulador de valor pode incluir uma entrada descontínua de reinicialização que, quando recebendo um evento, irá reiniciar o valor acumulado para 0. O bloco acumulador de valor é similar ao bloco acumulador discutido acima, mas suporta configuração mais flexível de qual valor é acumulado.
O bloco de caçamba de valor pode proporcionar a criação de uma tabela de pares de valores chave. A tabela pode ser, por exemplo, uma tabela hash. A chave para a tabela do bloco de caçamba de valor é referido como um furo da caçamba. O valor para a tabela correspondendo a um furo da caçamba particular (ou seja, a chave da tabela) é referido como valor da caçamba. O bloco de caçamba de valor recebe um evento descontínuo em uma entrada descontínua. Quando o evento descontínuo é recebido, uma equação definida pelo usuário para o furo da caçamba é avaliada para determinar a entrada apropriada na tabela. Uma equação definida pelo usuário para o valor da caçamba é então avaliada para determinar um novo valor da caçamba para a entrada na tabela correspondendo ao furo da caçamba determinado. Como discutido abaixo, o novo valor da caçamba pode ser combinado com ou substituir o valor da caçamba anterior. Quando colocado, o usuário pode ser solicitado a informar as equações para o furo da caçamba e para o valor da caçamba. Alternativamente, o bloco de caçamba de valor pode ser preestabelecido para equações predefinidas tais como um furo da caçamba de 0 e um valor da caçamba de 0. As equações especificadas
61/113 podem ser alteradas pelo usuário durante o projeto do algoritmo, por exemplo, pela seleçãado bloco de caçamba de valor e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com uma ou ambas as equações de furo da caçamba e de valor da caçamba. As equações podem ser informadas de forma textual ou utilizando os botões do bloco de construção similares aos botões do bloco de construção 215 discutidos acima, por exemplo. Expressões disponíveis para uso ao especificar as equações (que podem ser proporcionadas pelos botões do bloco de construção) podem incluir instrumento (proporcionando o instrumento associado com o evento descontínuo), preço de cumprimento (proporcionando o preço de cumprimento associado com o evento descontínuo), quantidade da ordem (proporcionando a quantidade da ordem associada com o evento descontínuo), preço da ordem (proporcionando o preço da ordem associado com o evento descontínuo), quantidade executada (proporcionando a acumulação de cumprimentos com respeito à quantidade da ordem), quantidade em andamento (proporcionando a acumulação de uma quantidade da ordem não executada em um preço de ordem específico), quantidade de negociação (proporcionando a quantidade de uma negociação executada em uma bolsa), preço de negociação (proporcionando o preço de uma negociação executada em uma bolsa), e variável (proporcionando o valor de uma variável específica definida pelo usuário ou o valor de qualquer outra saída de bloco no algoritmo que não é parte de um bloco de grupo virtualizado). Como parte de especificar a equação de caçamba de valor, um usuário também pode configurar como um novo valor da caçamba é combinado com o valor da caçamba anterior. Por exemplo, o novo valor da caçamba pode ser adicionado para o valor da caçamba anterior (proporcionando uma soma dos valor da caçambas determinados para o mesmo furo da caçamba para cada evento descontínuo recebido). Como outro exemplo, uma média dos valor da caçambas determinada para o mesmo furo da caçamba pode ser determinada. Como outro exemplo, o novo valor da caçamba pode substituir o valor da caçamba anterior (proporcionando o valor mais recente como o valor da caçamba para um furo da caçamba particular). O
62/113 caçamba de valor pode ser preestabelecido para a soma dos valor da caçambas para um furo da caçamba particular, por exemplo. O bloco de caçamba de valor pode ser um bloco de passagem de modo que cada evento descontínuo recebido é passado através de uma saída descontínua correspondente. O bloco de caçamba de valor também pode possuir uma entrada numérica contínua de furo de modo que o valor da caçamba correspondente para o furo da caçamba proporcionado é proporcionado em uma saída numérica contínua de valor. O bloco de caçamba de valor pode incluir uma entrada descontínua de reinicialização que, quando recebendo um evento, irá reiniciar a tabela armazenada.
Um bloco de média móvel descontínua pode proporcionar uma média móvel para um valor determinado pela avaliação de uma equação especificada definida pelo usuário cada vez que um evento descontínuo é recebido em uma entrada descontínua. O número de pontos de dados a ser utilizado ao determinar a média móvel é especificado por uma entrada numérica contínua. A média móvel é proporcionada para uma saída numérica contínua. O bloco de média móvel descontínua pode manter uma lista dos pontos de dados avaliados até que o número de pontos de dados especificado pela entrada correspondente tenha sido alcançado, ponto no qual o ponto de dado mais recente pode ser adicionado para a lista, o mais antigo removido da lista, e a média móvel ser calculada através dos pontos de dados na lista. Quando colocado, o usuário pode ser solicitado a entrar com a equação a ser avaliada. Alternativamente, o bloco de média móvel descontínua pode ser preestabelecido para um valor predefinido tal como 0 para a equação. A equação especificada pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de média móvel descontínua e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com uma equação. A equação pode ser informada de forma textual ou utilizando botões de bloco de construção similares aos botões do bloco de construção 215 discutidos acima, por exemplos. Expressões disponíveis para uso ao especificar a equação (que pode ser proporcionada pelos botões do bloco de construção) podem incluir
63/113 instrumento (proporcionando o instrumento associado com o evento descontínuo), preço de cumprimento (proporcionando o preço de cumprimento associado com o evento descontínuo), quantidade de cumprimento (proporcionando a quantidade de cumprimento associada com o evento descontínuo), quantidade da ordem (proporcionando a quantidade da ordem associada com o evento descontínuo), preço da ordem (proporcionando o preço da ordem associado com o evento descontínuo), quantidade executada (proporcionando a acumulação de cumprimentos com respeito à quantidade da ordem), quantidade em andamento (proporcionando a acumulação de uma quantidade da ordem não executada em um preço de ordem específico), quantidade de negociação (proporcionando a quantidade de uma negociação executada em uma bolsa), preço de negociação (proporcionando o preço de uma negociação executada em uma bolsa), e variável (proporcionando o valor de uma variável específica definida pelo usuário ou o valor de qualquer outra saída de bloco no algoritmo que não é parte de um bloco de grupo virtualizado). O bloco de média móvel descontínua também pode pegar uma entrada descontínua que é uma entrada de reinicialização. Quando o evento descontínuo é recebido pela entrada de reinicialização, os pontos de dados gravados são descartados. Isto pode resultar na saída de média móvel sendo 0 ou Não é um Número (NaN). O bloco de média móvel descontínua também pode proporcionar uma saída Booleana contínua de OK que indica se um número suficiente de pontos de dados foram gravados para completamente calcular a média móvel. A saída OK é FALSA até que o número necessário de pontos de dados tenha sido gravado e VERDADEIRA depois disso (até a reinicialização). Por exemplo, se a entrada de número de pontos de dados proporcionar um valor de 20, 20 pontos de dados (ou seja, 20 avaliações da equação especificada, cada um ativado pela recepção de um evento descontínuo) terão que ser gravados antes da saída OK se tornar VERDADEIRA. O bloco de média móvel descontínua também pode proporcionar uma saída numérica contínua de número de pontos de dados que indica o número de pontos de dados que foram gravados. O bloco de média móvel descontínuo pode ser um bloco de passagem de modo que cada e64/113 vento descontínuo é passado através de uma saída descontínua correspondente.
Um bloco de estado pode receber um evento descontínuo em uma entrada descontínua e estimar um condicional para cada saída descontínua para determinar se o evento descontínuo deve ser proporcionado na saída descontínua. O bloco de estado pode ser utilizado para projetar uma máquina de estado que é um modelo de comportamento composto de um número finito de estados, transições entre estes estados, e ações, por exemplo. Múltiplos blocos de estado podem ser ligados similares a um gráfico de fluxo onde um usuário pode inspecionar o modo no qual a lógica funciona quando certas condições são encontradas. Devido a um estado corrente ser determinado pelos estados passados, ele pode essencialmente gravar informação sobre o passado. Uma transição indica um estado alterado e é descrita por uma condicional que necessitaria ser atendida para permitir a transição. O bloco de estado permite que o usuário defina uma ação de saída e a condicional que define a transição. Por exemplo, em um bloco de estado proporcionando duas saídas descontínuas, cada uma correspondendo a uma transição de estado diferente, o usuário especifica uma condicional para cada uma. Após um evento descontínuo ser recebido, o bloco de estado aguarda por uma ou mais dentre as condicionais associadas com cada transição para se tornar VERDADEIRO (se, quando o evento descontínuo for recebido, nenhuma das condicionais for VERDADEIRA). Quando a condicional associada com uma transição de estado particular é estimada para VERDADEIRA, o bloco de estado proporciona o evento descontínuo (que foi mantido desde que ele foi recebido) na saída associada com esta transição de estado particular. Uma condicional pode ser proporcionada em uma entrada Booleana contínua. Alternativamente, a condicional pode ser proporcionada por uma equação específica definida pelo usuário que estima um valor Booleano. A equação especificada pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de estado e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com a equação. A equação pode ser informada de
65/113 forma textual ou pela utilização de botões de bloco de construção similares aos botões de bloco de construção 215 discutidos acima, por exemplo. Um bloco de estado pode ser utilizado para estimar um padrão definido pelo usuário em um mercado tal como se existissem várias negociações consecutivas em preços que não são os mais baixos. Estes sinais podem ser utilizados como uma entrada condicional em um bloco de negociação tal como um bloco criador de mercado, por exemplo. Um bloco de estado também poderia estimar informação tal como se um evento descontínuo é uma mensagem de cumprimento de compra ou de venda, por exemplo. Expressões disponíveis para uso ao especificar a equação (que podem ser proporcionadas pelos botões de bloco de construção) podem incluir instrumento (proporcionando o instrumento associado com o evento descontínuo), preço de cumprimento (proporcionando o preço de cumprimento associado com o evento descontínuo), quantidade de cumprimento (proporcionando a quantidade de cumprimento associada com o evento descontínuo), quantidade da ordem (proporcionando a quantidade da ordem associada com o evento descontínuo), preço da ordem (proporcionando o preço da ordem associado com o evento descontínuo), quantidade executada (proporcionando a acumulação de cumprimentos com respeito à quantidade da ordem), quantidade em andamento (proporcionando a acumulação de uma quantidade da ordem não executada em um preço de ordem específico), quantidade de negociação (proporcionando a quantidade de uma negociação executada em uma bolsa), preço de negociação (proporcionando o preço de uma negociação executada em uma bolsa), e variável (proporcionando o valor de uma variável específica definida pelo usuário ou o valor de qualquer outra saída de bloco no algoritmo que não é parte de um bloco de grupo virtualizado).
Um bloco de ramificação pode receber um evento descontínuo em uma entrada descontínua e estimar uma condicional. Se a condicional for VERDADEIRA, então o evento descontínuo será proporcionado em uma primeira saída descontínua (o caminho SIM) e se a condicional for FALSA, então o evento descontínuo será proporcionado em uma segunda saída
66/113 descontínua (o caminho NÃO). A condicional pode ser proporcionada em uma entrada Booleana descontínua. Alternativamente, a condicional pode ser proporcionada pela equação especificada definida pelo usuário que estima um valor Booleano. A equação especificada pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de ramificação e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com a equação. A equação pode ser informada de forma textual ou utilizando botões de bloco de construção similares aos botões de bloco de construção 215 discutidos acima, por exemplo. Um bloco de ramificação pode ser utilizado para avaliar se o evento descontínuo é um evento de cumprimento de compra ou de venda, por exemplo. Um botão do bloco de construção compra? pode ser utilizado para construir tal equação. Outras expressões disponíveis para uso ao especificar a equação (as quais podem ser proporcionadas pelos botões do bloco de construção) podem incluir instrumento (proporcionando o instrumento associado com o evento descontínuo), preço de cumprimento (proporcionando o preço de cumprimento associado com o evento descontínuo), quantidade de cumprimento (proporcionando a quantidade de cumprimento associada com o evento descontínuo), quantidade da ordem (proporcionando a quantidade da ordem associada com o evento descontínuo), preço da ordem (proporcionando o preço da ordem associado com o evento descontínuo), quantidade executada (proporcionando a acumulação de cumprimentos com respeito à quantidade da ordem), quantidade em andamento (proporcionando a acumulação de uma quantidade da ordem não executada em um preço de ordem específico), quantidade de negociação (proporcionando a quantidade de uma negociação executada em uma bolsa), preço de negociação (proporcionando o preço de uma negociação executada em uma bolsa), e variável (proporcionando o valor de uma variável específica definida pelo usuário ou o valor de qualquer outra saída de bloco no algoritmo que não é parte de um bloco de grupo virtualizado).
Um bloco multiplexador pode receber um evento descontínuo em uma entrada descontínua e proporcionar o evento descontínuo em uma
67/113 saída descontínua particular. Por exemplo, o bloco multiplexador pode receber um evento descontínuo a partir de um bloco manipulador de ordem e baseado no tipo do evento descontínuo (por exemplo, cumprimento, alteração, ou apagamento), proporcionar o mesmo na saída descontínua apropriada do bloco multiplexador. Quando colocado, o usuário pode ser solicitado a especificar quais tipos de evento descontínuo para os quais as saídas são proporcionadas. Alternativamente, o bloco multiplexador pode ser preestabelecido para uma configuração predefinida para proporcionar uma saída para cada tipo de vento descontínuo. Os tipos de evento descontínuo especificados para os quais as saídas são proporcionadas podem ser alterados pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco multiplexador e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a especificar os tipos de evento descontínuo. O bloco multiplexador pode ser utilizado em conjunto com o bloco manipulador de ordem para gerenciar uma ordem, por exemplo.
Um bloco de funil pode receber eventos descontínuos em duas ou mais entradas descontínuas e proporcionar os mesmos em uma única saída descontínua. O bloco de funil não mantém um evento descontínuo, ele passa o mesmo adiante para a saída. O bloco de funil pode ser utilizado em conjunto com os blocos de estado que precisam múltiplas entradas, por exemplo.
Um bloco seqüenciador pode garantir a ordem na qual os eventos descontínuos são passados para as saídas. O bloco seqüenciador pode possuir uma entrada descontínua e duas ou mais saídas descontínuas. Quando um evento descontínuo é recebido na entrada, o bloco seqüenciador proporciona o evento descontínuo para cada saída na ordem. Ou seja, no processamento para um evento descontínuo recebido, o bloco seqüenciador primeiro irá proporcionar o evento descontínuo para a primeira saída, e então, o evento descontínuo será proporcionado para a segunda saída, e assim por diante. Isto pode permitir que um usuário precisamente determine em qual ordem os blocos que recebem entradas descontínuas são atualizados no algoritmo. Entretanto, se múltiplos blocos estiverem conectados com
68/113 a mesma saída descontínua do bloco seqüenciador, a ordem que estes blocos recebem o evento descontínuo não é especificada. Este bloco também pode ser referido como um bloco de sequência.
Um bloco de mínimo descontínuo pode comparar duas entradas descontínuas e proporcionar uma saída numérica contínua do valor mínimo de um atributo especificado (por exemplo, preço de negociação, quantidade de negociação, etc.). Quando um evento descontínuo é recebido em uma das entradas, o valor de atributo especificado é extraído a partir do evento e armazenado. O valor extraído é comparado com o valor mais recentemente armazenado para a outra entrada descontínua para determinar qual é o menor valor e este valor é proporcionado na saída numérica contínua. Se nenhum evento descontínuo tiver sido recebido para uma entrada, o valor extraído a partir da outra entrada pode sempre ser tratado como o maior valor. Como uma alternativa, o valor para uma entrada descontínua particular pode simplesmente ser preestabelecida para 0. O bloco de mínimo descontínuo pode ser um bloco de passagem de modo que cada evento descontínuo recebido é passado através de uma saída descontínua correspondente. O bloco de mínimo descontínuo pode incluir uma entrada descontínua de reinicialização que, quando do recebimento de um evento, irá reiniciar os valores armazenados para cada entrada descontínua e atualizar a saída mínima de forma correspondente.
Um bloco de máximo descontínuo pode comparar duas entradas descontínuas e proporcionar uma saída numérica contínua do valor máximo de um atributo especificado (por exemplo, preço de negociação, quantidade de negociação, etc.). Quando um evento descontínuo é recebido em uma das entradas, o valor do atributo especificado é extraído a partir do evento e armazenado. O valor extraído é comparado com o valor mais recentemente armazenado para a outra entrada descontínua para determinar qual é o maior valor e este valor é proporcionado na saída numérica contínua. Se nenhum evento descontínuo tiver sido recebido para uma entrada, o valor extraído a partir da outra entrada pode ser sempre tratado como o valor maior. Como uma alternativa, o valor para uma entrada descontínua particular pode
69/113 simplesmente ser preestabelecido para 0. O bloco de máximo descontínuo pode ser um bloco de passagem de modo que cada evento descontínuo recebido é passado através de uma saída descontínua correspondente. O bloco de máximo descontínuo pode incluir uma entrada descontínua de reinicialização que, quando recebendo um evento, irá reiniciar os valores armazenados para cada entrada descontínua e correspondentemente atualizar a saída máxima.
Os blocos de miscelânea podem incluir os blocos de mínimo, máximo, arredondamento, exibe para decimal, não, uma vez verdadeiro, é número, média móvel, f(x) condicional, f(x) numérico, média, temporizador, observação, número aleatório, raiz quadrada, logaritmo e de pausa, por exemplo.
Um bloco de mínimo pode comparar duas entradas numéricas contínuas para determinar qual é o menor valor e emitir o mesmo. O bloco de mínimo pode possuir um formato triangular com o texto MIN no meio, duas entradas numéricas contínuas no lado esquerdo e uma saída numérica contínua no lado direito.
Um bloco de máximo pode comprar duas entradas numéricas contínuas para determinar qual é o maior valor e emitir o mesmo. O bloco de máximo pode possuir um formato triangular com o texto MAX no meio, duas entradas numéricas contínuas no lado esquerdo e uma saída numérica contínua no lado direito.
Um bloco de arredondamento pode arredondar um número proporcionado por uma entrada numérica contínua para o incremento mais próximo proporcionado por uma entrada numérica contínua para produzir uma saída numérica contínua. Se nenhum valor de incremento for proporcionado, o bloco de arredondamento pode arredondar para o número inteiro mais próximo. Em adição, um usuário pode especificar uma das três opções para o bloco de arredondamento: arredondamento normal, arredondamento sempre para cima, e arredondamento sempre para baixo. O arredondamento normal utiliza as regras tradicionais de arredondamento (por exemplo, 0,5 arredonda para 1 e 0,49 arredonda para 0). O arredondamento sempre para
70/113 cima irá arredondar o número para o incremento maior se o valor se situar entre dois incrementos (por exemplo, 2,1 arredonda para 3 e 2 arredonda para 2). O arredondamento sempre para baixo irá arredondar o número para o menor incremento se os valores se situarem entre dois incrementos (por exemplo, 2,9 irá arredondar para 2 e 2 irá arredondar para 2). Se nenhuma opção for especificada, o bloco de arredondamento pode ser preestabelecido para arredondamento normal, por exemplo. O bloco de arredondamento pode possuir um formato retangular com o texto Round no meio, duas entradas numéricas contínuas no lado esquerdo, e uma saída numérica contínua no lado direito.
Um exibidor para bloco decimal pode utilizar um número proporcionado por uma entrada numérica contínua e um instrumento proporcionado por uma entrada de instrumento contínuo para emitir o número na forma decimal. Por exemplo, um exibidor para bloco decimal pode ser utilizado se um usuário desejar utilizar um bloco de número para alimentar um valor tal como um preço no resto do algoritmo (talvez como uma variável) sem ter que calcular o valor no formato decimal. O usuário pode ser utilizado para ver o preço do instrumento ZN como 117125, o que pode representar um preço de 117 e 12,5/32. Com o bloco exibe para decimal, o número 117125 pode ser proporcionado como uma entrada, junto com o instrumento, e o bloco exibe para decimal irá converter o número para o valor no formato decimal apropriado (aqui, 117,390625) para uso pelo resto do algoritmo. O exibidor para bloco decimal pode possuir um formato retangular com o texto D2Dec no meio, uma entrada de instrumento contínua e uma entrada numérica contínua no lado esquerdo, e uma saída numérica contínua no lado direito.
Um bloco NÃO pode executar uma negação lógica de uma entrada Booleana contínua que se o valor de entrada for VERDADEIRA a saída é FALSO e se o valor de entrada for FALSO a saída é VERDADEIRA. O bloco NÃO pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com um símbolo de negação (! ou -) no meio, uma entrada Booleana contínua no lado esquerdo, e uma saída Boo71/113 leana contínua no lado direito.
Um bloco de uma vez verdadeiro pode proporcionar uma saída Booleana contínua de VERDADEIRO para a vida do algoritmo quando uma entrada Booleana contínua vira VERDADEIRA. Até que o valor da entrada ser torne VERDADEIRO pelo menos uma vez, o valor da saída do bloco uma vez verdadeiro é FALSO. Uma vez que o valor da entrada se torna VERDADEIRO, o bloco de uma vez verdadeiro emite um valor de VERDADEIRO independente de se o valor da entrada subsequentemente alterar. O bloco de uma vez verdadeiro pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto T no meio, uma entrada Booleana contínua no lado esquerdo e uma saída Booleana contínua no lado direito. Este bloco também pode ser referido como bloco de uma vez verdadeiro sempre verdadeiro.
Um bloco de número pode proporcionar uma saída Booleana contínua de VERDADEIRO se o valor proporcionado em uma entrada numérica contínua for um número e a saída FALSO se o valor proporcionado for Não é Número (NaN). O bloco de número pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto IsNum? no meio, uma entrada numérica contínua no lado esquerdo e uma saída Booleana no lado direito.
O bloco de média móvel pode pegar um valor de dado (o qual pode estar se alterando com o tempo, tal como um preço ou quantidade) como uma entrada numérica contínua e um valor de número de minutos como uma entrada numérica contínua e proporcionar uma média móvel através do número de minutos especificado como uma saída numérica contínua. O bloco de média móvel pode gravar o valor de dado a cada segundo. Por exemplo, se um usuário deseja ter uma média móvel de um minuto, o bloco de média móvel irá gravar 60 pontos de dado e tirar a média dos mesmos para a saída. O bloco de média móvel também pode pegar um valor Booleano contínuo que indica se a entrada de valor de dado é válida. A entrada é opcional e é preestabelecida para VERDADEIRA. Quando o valor de dado está para ser gravado (pelo valor preestabelecido, uma vez por segundo), o
72/113 bloco de média móvel verifica para ver se a entrada válida é VERDADEIRA. Se for, o valor de dado é gravado como um ponto de dado. Se a entrada válida for FALSA, o valor de dado não é gravado como um ponto de dado. O bloco de média móvel também pode pegar uma entrada descontínua que é uma entrada de reinicialização. Quando um evento descontínuo é recebido pela entrada de reinicialização, os pontos de dado gravados são descartados. Dependendo do valor de dado sendo gravado, isto pode resultar na saída da média móvel sendo 0 ou Não é Número (NaN). O bloco de média móvel também pode proporcionar uma saída Booleana contínua OK que indica se um número suficiente de pontos de dados foi gravado para totalmente calcular a média móvel. A saída OK é FALSA até que o número necessário de pontos de dados tenha sido gravado VERDADEIRA depois disso (até a reinicialização). Por exemplo, se a entrada de número de minutos proporcionar um valor de 20 (para uma média móvel de 20 minutos), 1200 pontos de dado (1 ponto de dado para cada segundo através do período de 20 minutos) terão que ser gravados antes da saída OK ser tornar VERDADEIRA. O bloco de média móvel também pode proporcionar uma saída numérica contínua de número de pontos de dado que indica o número de pontos de dado que foram gravados. O bloco de média móvel pode possuir um formato retangular com o texto MvgAvg no meio, quatro entradas (2 entradas numéricas contínuas, 1 entrada Booleana contínua, e 1 entrada descontínua) no lado esquerdo, e três saídas (2 saídas numéricas contínuas e 1 saída Booleana contínua) no lado direito.
Um bloco de f(x) condicional pode avaliar uma equação definida pelo usuário que proporciona um valor para uma saída Booleana contínua. Quando colocado, o usuário pode ser solicitado a entrar com a equação a ser avaliada. Alternativamente, o bloco de f(x) condicional pode ser preestabelecido para um valor predefinido tal como VERDADEIRO. A equação especificada pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco f(x) condicional e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com uma equação. A equação pode ser informada textualmente ou utilizan73/113 do os botões de bloco de construção similares aos botões de bloco de construção 215 discutidos acima, por exemplo. Em algumas concretizações, o bloco f(x) condicional pode referenciar um valor a partir de outra saída do bloco. O valor pode ser referenciado utilizando um botão de bloco de construção 215 que especifica o bloco e a saída uo valor pode ser proporcionado para uma entrada de variável contínua do bloco f(x) condicional. O bloco f(x) condicional pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto f(x) no meio, nenhuma entrada no lado esquerdo (a não ser que valores sejam referenciados na equação definida pelo usuário, caso em que as entradas contínuas são proporcionadas correspondendo a cada variável), e uma saída Booleana contínua no lado direito.
Um bloco de f(x) numérico pode avaliar uma equação definida pelo usuário que proporciona um valor para uma saída numérica contínua. Quando colocado, o usuário pode ser solicitado e entrar com a equação a ser avaliada. Alternativamente, o bloco de f(x) numérico pode ser preestabelecido para um valor predefinido tal como 0. A equação especificada pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco f(x) numérico e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com uma equação. A equação pode ser informada textualmente ou utilizando os botões de bloco de construção similares aos botões de bloco de construção 215 discutidos acima, por exemplo. Em algumas concretizações, o bloco f(x) numérico pode referenciar um valor a partir de outra saída do bloco. O valor pode ser referenciado utilizando um botão de bloco de construção 215 que especifica o bloco e a saída ou valor pode ser proporcionado para uma entrada de variável contínua do bloco f(x) numérico. O bloco f(x) numérico pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto f(x) no meio, nenhuma entrada no lado esquerdo (a não ser que valores sejam referenciados na equação definida pelo usuário, caso em que as entradas contínuas são proporcionadas correspondendo a cada variável), e uma saída numérica contínua no lado direito.
74/113
Em algumas concretizações, o bloco f(x) condicional e o bloco f(x) numérico podem ser consolidados em um único bloco tal como um bloco f(x). Um bloco f(x) pode avaliar uma equação definida pelo usuário que proporciona um valor um valor Booleano ou numérico para uma saída variável contínua. Quando colocado, o usuário pode ser solicitado e entrar com a equação a ser avaliada. Alternativamente, o bloco de f(x) pode ser preestabelecido para um valor predefinido tal como 0. A equação especificada pode ser alterada pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco f(x) e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com uma equação. A equação pode ser informada textualmente ou utilizando os botões de bloco de construção similares aos botões de bloco de construção 215 discutidos acima, por exemplo. Em algumas concretizações, o bloco f(x) pode referenciar um valor a partir de outra saída do bloco. O valor pode ser referenciado utilizando um botão de bloco de construção 215 que especifica o bloco e a saída ou valor pode ser proporcionado para uma entrada de variável contínua do bloco f(x). O bloco f(x) pode possuir um formato retangular no lado esquerdo e um formato arqueado no lado direito com o texto f(x) no meio, nenhuma entrada no lado esquerdo (a não ser que valores sejam referenciados na equação definida pelo usuário, caso em que as entradas contínuas são proporcionadas correspondendo a cada variável), e uma saída de variável contínua no lado direito.
Um bloco de média pode tirar a média dos valores de duas ou mais entradas numéricas contínuas para produzir uma saída contínua numérica. Por exemplo, o bloco de média pode ter 10 entradas. Como outro exemplo, o bloco de média pode começar com uma entrada e cada vez que uma conexão é feita com uma entrada do bloco de média, uma nova entrada pode ser dinamicamente proporcionada. Os valores das entradas são somados e então divididos pelo número de entradas proporcionando valores para produzir a saída. O bloco de média pode possuir um formato retangular com o texto AVE ou AVG no meio, duas ou mais entradas numéricas contínuas no lado esquerdo, e uma saída numérica contínua no lado direito.
75/113
Um bloco temporizador pode proporcionar saídas numéricas contínuas para a hora, minuto ou segundo de um tempo. Por exemplo, o tempo pode ser o tempo corrente. O tempo corrente pode ser um tempo no dispositivo de computação proporcionando a interface de negociação com um usuário ou o tempo corrente em um servidor de algoritmo, por exemplo. Como outro exemplo, o tempo pode ser a partir de quando o algoritmo foi iniciado. Como outro exemplo, o tempo pode ser o tempo desde o início da sessão de negociação corrente. Como outro exemplo, o tempo pode ser a partir de 24:00 do tempo central padrão da sessão de negociação corrente. Como outro exemplo, o tempo pode ser um tempo proporcionado por uma bolsa. O bloco de temporizador pode possuir um formato retangular com o texto TIMER ou um símbolo de relógio no meio e três saídas numéricas contínuas no lado direito.
O bloco de observação pode proporcionar uma caixa de texto para usuários informarem comentários e observações sobre o algoritmo sendo projetado. Um bloco de observação pode não possuir qualquer entrada ou saída. Quando colocado, o usuário pode ser solicitado a entrar com o texto para o bloco de observação. Alternativamente, o bloco de observação pode ser preestabelecido para um valor predefinido tal como Adicione observações aqui. O valor especificado pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de observação e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitado a entrar com um valor. O bloco de observação não afeta a operação do algoritmo. O bloco de observação pode possuir um formato retangular com o valor do texto exibido no meio.
Um bloco de número aleatório pode proporcionar um número aleatório para uma saída numérica contínua. O número aleatório pode ser especificado para ser um número inteiro ou um valor de ponto flutuante quando o bloco de número aleatório é colocado ou posteriormente configurado. O bloco de número flutuante pode ser preestabelecido para proporcionar um valor de número inteiro. O número aleatório pode estar entre um valor mínimo especificado por uma entrada número contínua e um valor máxi76/113 mo especificado por uma entrada numérica contínua. Se a entrada mínima não for proporcionada, ela pode ser preestabelecida para 0, por exemplo. Se a entrada máxima não for proporcionada, ela pode ser preestabelecida para o número inteiro máximo suportado pelo dispositivo de computação para uma saída de número inteiro ou para 1 para uma saída de ponto flutuante. O bloco de número aleatório também pode possuir uma entrada descontínua para sinalizar quando um novo número aleatório deve ser proporcionado. Se uma entrada descontínua não for proporcionada, o bloco de número aleatório pode proporcionar um novo número aleatório uma vez por segundo, por exemplo. O bloco de número aleatório pode ser um bloco de passagem, de modo que cada evento descontínuo recebido é passado através uma saída descontínua correspondente. O bloco de número aleatório pode possuir um formato quadrado com um símbolo de interrogação ? ou o texto RAND no meio, duas entradas numéricas contínuas e uma entrada descontínua no lado esquerdo, e uma saída numérica contínua no lado direito.
Um bloco de raiz quadrada pode proporcionar um valor de raiz quadrada em uma saída numérica contínua para um valor proporcionado em uma entrada numérica contínua. A saída pode ser Não é Número (NaN) se a entrada for um número negativo. O bloco de raiz quadrada pode possuir um formato triangular com um símbolo de raiz quadrada (V) no meio, uma entrada numérica contínua no lado esquerdo, e uma saída numérica contínua no lado direito.
Um bloco de logaritmo pode proporcionar um valor de logaritmo em uma saída numérica contínua para um valor proporcionado em uma entrada numérica contínua. Um valor base para o logaritmo pode ser proporcionado em uma entrada numérica contínua. Se o valor de base não for proporcionado, ele pode ser preestabelecido para o logaritmo natural, por exemplo. O bloco de logaritmo pode possuir um formato quadrado com o texto Log no meio, duas entradas numéricas contínuas no lado esquerdo, e uma saída numérica contínua no lado direito.
Um bloco de pausa pode pausar todo o algoritmo se um evento descontínuo for recebido em uma entrada descontínua ou se um valor pro77/113 porcionado em uma entrada Booleana contínua se tornar VERDADEIRO. Em algumas concretizações, se o valor da entrada Booleana se tornar FALSO novamente, o algoritmo pode reiniciar a execução. Em algumas concretizações, uma vez que o algoritmo tenha pausado devido ao bloco de pausa, o algoritmo deve ser manualmente reiniciado. O bloco de pausa pode ser em formato de octógono com um fundo vermelho, o texto Stop no meio, uma entrada Booleana contínua e uma entrada descontínua no lado esquerdo.
Instruções ou lógica (referidas neste documento como código de programação) representando o algoritmo são geradas baseadas na definição do algoritmo. Em algumas concretizações, o código de programação é código fonte (tal como texto legível por humano e/ou compilador) que pode subsequentemente ser compilado. Em algumas concretizações, o código de programação está em uma linguagem intermediária. Em algumas concretizações, o código de programação inclui instruções executáveis por máquina. Em algumas concretizações, a geração do código de programação inclui a compilação do código fonte gerado e/ou do código da linguagem intermediária. Em algumas concretizações, a geração do código de programação não inclui a compilação do código fonte e/ou do código de linguagem intermediária gerados e tal compilação é um processo separado. O código de programação gerado (após a compilação, se apropriado) pode então ser simulado e/ou utilizado para negociar de acordo com o algoritmo definido. Como utilizado neste documento, onde código de programação é discutido para ser rodado, executado e/ou simulado, é assumido que o código de programação gerado foi adicionalmente compilado, se apropriado, para ser rodado, executado, e/ou simulado.
Em algumas concretizações, o código de programação é gerado à medida que o algoritmo está sendo projetado. Observe que enquanto o algoritmo está sendo projetado, a definição do algoritmo pode estar alterando à medida que os blocos e/ou as conexões são adicionados, modificados, e/ou removidos. Em algumas concretizações, o código de programação é gerado automaticamente quando uma alteração é feita junto à definição do algoritmo. Em algumas concretizações, o código de programação é gerado à
78/113 pedido do usuário.
Em algumas concretizações, o código de programação é gerado por um componente da aplicação de negociação algorítmica da interface de negociação 310 em um dispositivo cliente. Em algumas concretizações, o código de programação é gerado por um componente da aplicação de negociação algorítmica em outro dispositivo, tal como um dispositivo de geração de algoritmo, um servidor de algoritmo similar ao servidor de algoritmo 302 discutido acima, e/ou um dispositivo de interconexão de rede similar ao dispositivo de interconexão de rede 120 discutido acima, por exemplo. Em algumas concretizações, o código de programação é gerado por mais do que um componente. Por exemplo, múltiplos componentes da aplicação de negociação algorítmica podem trabalhar juntos para gerar o código. Tais componentes podem ser especializados para gerar diferentes aspectos ou funcionalidade do código de programação, por exemplo.
Em algumas concretizações, o código de programação é gerado por mais do que um dispositivo. Por exemplo, o código de programação pode ser gerado por um dispositivo cliente e por um servidor de algoritmo. O código de programação gerado baseado na definição do algoritmo pode ser diferente baseado em qual componente ou dispositivo está gerando o mesmo. Por exemplo, código de programação gerado no dispositivo cliente pode ser otimizado para execução pelo dispositivo cliente e/ou pode conter diferentes aspectos (por exemplo, funcionalidade relacionada com a interface com o usuário) do código de programação gerado em um servidor de algoritmo (o qual pode ou não incluir, por exemplo, a funcionalidade relacionada com a interface com o usuário). Por clareza, a não ser que de outro modo mencionado, a discussão seguinte é com respeito à geração de código de programação no dispositivo cliente, mas deve ser entendido que ações similares são feitas quando o código de programação é gerado em outro dispositivo tal como um servidor de algoritmo.
Em algumas concretizações, o código de programação gerado é feito de uma maneira orientada a objeto utilizando uma linguagem de programação tal como C# e estrutura .NET 4.0.
79/113
Em algumas concretizações, o código de programação é gerado por percorrer cada bloco e conexão na definição do algoritmo. Para cada bloco, o código de programação é gerado. Quando gerando código de programação, alguns blocos podem ser tornar variáveis primitivas. Por exemplo, um bloco adicionador pode ser tornar uma variável de ponto flutuante cujo valor é estabelecido para ser a soma dos valores das saídas conectadas com as entradas do bloco adicionador, as quais podem ser determinadas de forma recursiva. Outros blocos que podem possuir funcionalidade mais complexa podem ser gerados como subclasses derivadas a partir das classes base. A classe base pode proporcionar a funcionalidade principal associada com o bloco correspondente. A subclasse gerada pode então sobrepor métodos virtuais possuindo valores de retorno para proporcionar valores específicos para o bloco para o qual o código de programação está sendo gerado para a funcionalidade principal da classe base. Por exemplo, um bloco criador de mercado colocado na área de superfície de desenho do projeto 311 pode ter código de programação gerado que é uma subclasse de uma classe base de criador de mercado. A subclasse pode superar métodos virtuais para obter valores para várias entradas do bloco criador de mercado e para especificar se o bloco criador de mercado foi configurado para comprar ou vender. Diferente dos blocos básicos discutidos acima, o bloco criador de mercado é um bloco de negociação que proporciona funcionalidade mais complexa.
Conexões contínuas entre blocos especificam como os valores de saída conectados e os valores de entrada se relacionam. Continuando com o exemplo do adicionador acima, o valor de ponto flutuante representando a saída do bloco adicionador pode ser estabelecida para ser a soma dos valores de outras variáveis primitivas (representando ouros blocos / saídas) conectadas com as entradas contínuas do bloco adicionador. Em algumas concretizações, conexões contínuas podem ser utilizadas para mesclar o código de programação gerado de modo que múltiplos blocos (que gerariam variáveis primitivas) com conexões contínuas podem ser condensados para expressões simples sem utilizar múltiplas variáveis intermediárias.
80/113
Conexões descontínuas entre blocos são utilizadas para gerar gerados de evento e manipuladores de evento de modo que o método apropriado (manipulador) seja invocado quando um evento descontínuo é gerado. O vento descontínuo é passado a partir do gerador de evento para o manipulador de evento para ser processado.
Quando executando, o algoritmo responde a ações que causam que o estado do algoritmo altere. As ações podem incluir eventos externos tal como eventos de mercado (por exemplo, uma atualização de preço, atualização de quantidade, confirmação de ordem, confirmação de negociação, confirmação de cumprimento, ou notificação de negociação) ou eventos temporizadores (por exemplo, a partir de um relógio do sistema ou alarme). Estes eventos externos podem resultar em eventos descontínuos sendo gerados tais como eventos descontínuos de confirmação de ordem, eventos descontínuos de confirmação de negociação, eventos descontínuos de confirmação de cumprimento, ou eventos descontínuos de notificação de negociação e/ou valores contínuos tais como valores de preço ou de quantidade para um instrumento sendo atualizado. As ações também podem incluir eventos internos tais como eventos descontínuos gerados por blocos no algoritmo ou valores contínuos se alterando.
Quando ocorre um evento descontínuo interno ou externo (por exemplo, um evento descontínuo de confirmação de negociação ou um bloco gerador gera um evento descontínuo), cada bloco interessado no algoritmo possui um método manipulador de evento invocado de modo que o bloco pode executar sua funcionalidade especificada associada com o evento. Os manipuladores de evento podem ser avaliados em uma ordem especificada. Por exemplo, os manipuladores de evento podem ser avaliados baseado na ordem em que seus respectivos blocos foram colocados na definição do algoritmo. O processamento do manipulador de evento pode incluir executar a função do bloco baseado no evento recebido, atualizar valores de saída contínuos, e gerar um evento descontínuo e proporcionar o mesmo em uma saída para outros blocos conectados.
Quando um valor contínuo interno ou externo altera (por exem81/113 plo, os dados do mercado são atualizados ou o tempo do relógio do sistema altera), cada bloco interessado que está diretamente ou indiretamente conectado com a fonte dos dados (blocos à jusante) tem seu valor atualizado para refletir os novos dados. Variáveis primitivas que são um resultado de alguns blocos terão seus novos valores designados, por exemplo.
Se um valor de saída contínuo for atualizado por um evento descontínuo ou por uma alteração de valor contínuo, cada bloco diretamente ou indiretamente conectado para receber o valor atualizado é adicionado para uma lista de blocos a serem processados. Quando os blocos interessados no evento externos tiverem completado seu processamento, então, a lista de blocos é processada de modo que estes blocos possam então atuar em resposta ao evento interno. Os eventos internos são processados de uma maneira similar a um evento externo. Este processo pode então ser repetido à medica que cada processamento de bloco gera novas alterações para o estado do algoritmo.
As figuras 3D-1 até 3D-7 ilustram código de programação ilustrativo gerado de acordo com algumas concretizações. Observe que o código de programação ilustrado é somente uma parte do código de programação que pode ser gerado e é pretendido para ser ilustrativo e simplificado para enfatizar alguns aspectos para clareza.
O código de programação pode ser gerado mesmo quando nenhum bloco tiver sido colocado na área de superfície de desenho do projeto 311, como ilustrado na figura 3D-1. O código de programação gerado inclui uma nova classe (CustomAlgorithmO) que representa o algoritmo sendo projetado. Esta nova classe é uma subclasse de uma classe Algorithm, que proporciona interfaces básicas e funcionalidade para efetuar um algoritmo com a aplicação de negociação algorítmica. A classe CustomAlgorithmO pode sobrepor métodos virtuais da classe Algorithm de modo que funcionalidade específica para o algoritmo sendo projetado pode ser incorporada na estrutura da aplicação de negociação algorítmica e executada.
Continuando com o exemplo, como ilustrado na figura 3D-2, quando um bloco é colocado na área de superfície de desenho do projeto
82/113
311, código de programação adicional pode ser gerado. Como discutido acima, alguns blocos podem se tornar variáveis primitivas e as conexões contínuas entre os mesmos dizem como eles se relacionam. Por exemplo, como ilustrado, dos blocos de número constante (ConstantNumberBIockO e ConstantNumberBIockl) foram colocados na área de superfície de desenho do projeto 311 bem como um bloco adicionador (AdderBIockO). Observe que os blocos não forma conectados. A parte marcada do código de programação gerado ilustra que estes blocos básicos são representados no código de programação como variáveis primitivas (do tipo double).
Como ilustrado na figura 3D-3, conexões foram feitas a partir de ConstantNumberBIockO e ConstantNumberBIockl para AdderBIockO. Conexões especificam as relações entre os blocos. A parte marcada do código de programação gerado ilustra que o valor de AdderBIockO é igual ao valor de ConstantNumberBIockO mais o valor de ConstantNumberBIockl. Isto é devido à funcionalidade representada pelo bloco adicionador ser adicionar os valores das duas entradas.
Como ilustrado na figura 3D-4, um bloco criador de mercado foi colocado na área de superfície de desenho do projeto 311. Diferente dos blocos básicos discutidos acima, o bloco criador de mercado é um bloco de negociação que proporciona funcionalidade mais complexa. O código de programação gerado adiciona uma nova classe (CustomMarketMakerO) que representa a funcionalidade do bloco criador de mercado particular que foi colocado. CustomMarketMakerO é uma subclasse de MarketMaker, a qual proporciona a funcionalidade básica para o bloco criador de mercado. A classe CustomMarketMaker) pode sobrepor os métodos virtuais com um tipo de retorno da classe MarketMaker de modo que a funcionalidade específica para o bloco criador de mercado colocado pode ser incorporada na estrutura da aplicação de negociação algorítmica e executada. Neste caso, CustomMarketMaker) sobrepões os métodos que são invocados pela lógica na classe base MarketMaker para obter os valores para as várias entradas do bloco criador de mercado. Como ilustrado na figura 3D-5, a entrada de quantidade do bloco criador de mercado colocado foi conectada com a saída do bloco
83/113 adicionador discutido acima. A parte marcada do código de programação gerado ilustra que o método virtual GetQty da classe CustomMarketMakerO foi sobreposto para retornar o valor de AdderBIockO.
Continuando com o exemplo, como ilustrado na figura 3D-6, uma conexão foi feita entre uma saída descontínua e uma entrada descontínua. Em particular, uma conexão foi feita entre a saída de cumprimento descontínua do bloco criador de mercado e a entrada de reinicialização de um bloco acumulador de valor. O bloco acumulador de valor é um bloco descontínuo e similar ao bloco de negociação, uma nova classe (CustomValueAccumulatorO) é adicionada (não apresentada). As partes marcadas do código de programação gerado ilustram que as novas subclasses (CustomMarketMakerO e CustomValueAccumulatorO) são instanciadas e que o evento DiscreteObjectGenerated de MarketMakerBIockO está ligado com os manipuladores de evento para CustomAlgorithmO (InterceptOrderMessage) e ValueAccumulatorBIockO (ProcessResetMessage). Assim, quando MarketMakerO tiver uma mensagem de cumprimento, ela irá disparar o evento DiscreteObjectGenerated e todos os manipuladores que tiverem sido ligados serão notificados. Neste caso, quando o manipulador ProcessResetMessage for notificado, ele irá reiniciar o valor do acumulador para 0.
Continuando com o exemplo, como ilustrado na figura 3D-7, uma conexão foi feita entre um bloco de instrumento (SimplelnstrumentBlockO) e um bloco de atributo de instrumento (InstrumentFieldBlockO). O bloco de instrumento é gerado para ser uma instância da classe InstrumentSnapShot que atualiza suas saídas contínuas baseada nos dados do mercado recebidos para o instrumento ESZO. A classe InstrumentSnapShot proporciona variáveis ou propriedades membro que podem ser referenciadas para se obter o valor correspondente para este atributo do instrumento. Por exemplo, quando os métodos SetAIIVariables (estabelecendo todos os valores no algoritmo) ou HandleUpdate (estabelecendo valores que são afetados pela atualização de um valor contínuo particular) são invocados, o bloco de atributo de instrumento estabelece seu valor para ser a propriedade .Bid do bloco de instrumento.
84/113
A figura 3Ε ilustra uma interface de negociação 310 de acordo com algumas concretizações. Alguns blocos podem ser especificados como sendo variável. Por exemplo, os blocos de número constante, os blocos de Booleano constante, e os blocos de instrumento podem ser especificados como sendo variáveis.
A área de variável 313 proporciona a modificação dos blocos de variável. A área de variável 313 exibe cada nome de bloco de variável e seu valor preestabelecido. A área de variável pode ser selecionada para alterar um nome de bloco de variável e/ou seu valor preestabelecido. As variáveis também pode ser referidas como parâmetros do algoritmo.
Como ilustrado, a área de superfície de desenho do projeto 31 inclui dois blocos que foram especificados como variável, o bloco de instrumento 321 e o bloco de constante 322. Um bloco pode ser especificado como variável quando ele está sendo colocado ou após ele ser colocado, por exemplo. Por exemplo, um cursor pode ser utilizado para selecionar o bloco e então, uma opção de menu pode ser selecionada para especificar se o bloco deve ser feito variável. Um bloco especificado variável pode ser indicado com uma cor diferente, borda diferente, fundo diferente, padrão diferente e/ou texto diferente, por exemplo. Aqui, o texto [Variable] foi anexado para o nome do bloco exibido.
Como discutido acima, a área de variável 313 inclui uma coluna de nome 323 com entradas para cada bloco de variável 321 e 32 e uma coluna de valor preestabelecido 324 com entradas de valor preestabelecido correspondentes para cada bloco de variável. Por exemplo, o bloco de instrumento 321 é denominado InstrumentBlockO e possui um valor preestabelecido de ESZO e o bloco de constante 322 é denominado ConstantBlockO e possui um valor preestabelecido de 5.
Um usuário pode selecionar uma entrada de valor preestabelecido na coluna 324 para alterar o valor preestabelecido do bloco de variável, de modo que o novo valor preestabelecido é utilizado na avaliação do algoritmo. De forma similar, o usuário pode selecionar uma entrada de nome na coluna de nome 323 para alterar o nome do respectivo bloco de variável. Os
85/113 blocos de variável 321 e 322 podem permitir que um usuário manipule o comportamento do algoritmo, ao invés da lógica subjacente, por alterar o valor do bloco de variável, o qual atua como parâmetro para o algoritmo, por exemplo.
A área de controle 314 proporciona controles para uso ao projetar o algoritmo. A área de controle 314 pode incluir um botão de execução e um botão de pausa para iniciar a pausar a simulação do algoritmo. A simulação do algoritmo pode ser utilizada para indicar como a lógica do algoritmo irá se comportar. Em adição, a área de controle 314 pode incluir um botão gera (não apresentado) que irá causar que o código de programação seja gerado baseado no algoritmo. O botão gera pode ser utilizado quando o código de programação não está sendo gerado automaticamente baseado nas alterações para o algoritmo. Isto pode ser desejável quando o algoritmo sendo projetado é complexo e a geração do código de programação (e a subseqüente compilação deste código de programação, se apropriado) após cada modificação para o algoritmo levar um tempo longo indesejado. Em algumas concretizações, a área de controle 314 pode incluir um botão compila (não apresentado) que irá causar que o código de programação gerado baseado no algoritmo seja compilado. O botão compila pode ser utilizado quando o código de programação não está sendo gerado e/ou compilado automaticamente baseado nas alterações para o algoritmo. Isto pode ser desejável quando o algoritmo sendo projetado é complexo e a compilação do código de programação após cada modificação para o algoritmo leva um tempo longo indesejável.
As figuras 3F até 3G ilustram uma interface de negociação 310 de acordo com algumas concretizações. A interface de negociação 310 proporciona um aspecto de realimentação dinâmica. O aspecto de realimentação dinâmica proporciona, para um bloco particular na área de superfície de desenho do projeto 311, uma exibição de um valor para o bloco particular. Por exemplo, um valor de realimentação dinâmico pode ser exibido para uma ou mais entradas e/ou saídas deste bloco. O valor de realimentação dinâmica pode ser exibido em relação ao bloco ou à entrada e/ou saída cor86/113 respondente, por exemplo. A realimentação dinâmica pode ser atualizada sempre que o valor de uma entrada ou de uma saída para um bloco alterar. Observe que a alteração em uma saída para um bloco pode resultar em uma alteração na saída de outro bloco que pega a saída do primeiro bloco como uma entrada (diretamente ou indiretamente), resultando na realimentação dinâmica para ambos os blocos sendo atualizados.
Como ilustrado na figura 3F, vários blocos 331 foram colocados na área de superfície de desenho do projeto 311. Para cada saída dos blocos 331, a realimentação dinâmica 332 é proporcionada apresentando o valor da saída. Observe que os blocos 333 são blocos de número e a realimentação dinâmica não é proporcionada devido ao valor da saída ser apresentado na exibição dos próprios blocos 333. Em algumas concretizações, a realimentação dinâmica é proporcionada para ambas as entradas e saídas de um bloco particular colocado. Em algumas concretizações, a realimentação dinâmica é proporcionada para todos os blocos na área de superfície de desenho do projeto 311.
A realimentação dinâmica para o bloco de instrumento exibe um valor de GCJ1. A realimentação dinâmica para o bloco de atributo de instrumento, o qual é configurado para proporcionar a quantidade de venda, exibe um valor de 3, representando que a quantidade de venda para o instrumento GCJ1 é 3. A realimentação dinâmica para o bloco adicionador exibe um valor de 13, o qual é a soma dos dois valores de entrada 3 (a partir do bloco de atributo de instrumento) e 10 (a partir do primeiro bloco de número). A realimentação dinâmica para o bloco de divisão exibe um valor de 6,5, o qual é o resultado da divisão do primeiro valor de entrada 13 (a partir do bloco adicionador) pelo segundo valor de entrada 2 (a partir do segundo bloco de número).
A realimentação dinâmica pode não ser proporcionada para alguns blocos a não ser que o algoritmo esteja sendo simulado. Por exemplo, como ilustrado na figura 3G, a realimentação dinâmica é não proporcionada para as saídas do bloco criador de mercado 335. Isto é devido, a não ser que o algoritmo esteja rodando (por exemplo, sendo simulado), ao bloco cri87/113 ador de mercado 335 não operar e interagir com um mercado. Assim, o bloco criador de mercado 335 não proporciona qualquer valor descontínuo baseado em sua operação (devido a ele não estar operando) nem gera quaisquer eventos descontínuos (novamente, devido a ele não estar operando). A realimentação dinâmica também não é proporcionada para as saídas do bloco extrator de valor 336. Isto é devido ao bloco extrator de valor 336 possuir uma entrada descontínua e assim, suas saídas somente possuem valores quando um evento descontínuo é recebido. Entretanto, a não ser que o algoritmo esteja rodando, eventos descontínuos não são recebidos.
Os valores de realimentação dinâmica a serem exibidos são proporcionados a partir do próprio algoritmo. Por exemplo, o código de programação gerado para o algoritmo sendo projetado pode incluir instruções adicionais para atualizar a exibição de uma interface de negociação tal como a interface de negociação 310. Em algumas concretizações, o código de programação gerado para o algoritmo não inclui instrumentos adicionais para atualizar a exibição de uma interface de negociação devido, por exemplo, a nenhuma interface de negociação poder estar presente, tal como em um servidor de algoritmo 302. Como ilustrado nas figuras 3D-2 e 3D-3, o método SetAIIVariables, quando invocado, invoca uma método SendUpdate O método SendUpdate proporciona para a interface com o usuário uma identificação do bloco para o qual a atualização é para ser feita, o índice de saída particular para o qual a atualização é para ser feita, e o valor (aqui, o valor do bloco adicionador). Assim, sempre que o valor para um bloco alterar, a atualização é proporcionada para a interface com o usuário para atualizar a realimentação dinâmica. O método SendUpdate também pode ser invocado pelas classes de base de blocos que geram para classes derivadas para proporcionar os valores atualizados da interface com o usuário. De forma similar, como ilustrado na figura 3D-6, o manipulador de evento InterceptOrderMessage foi registrado para ser invocado quando o evento DiscreteObjectGenerated ocorre. O método InterceptOrderMessage proporciona para a interface com o usuário a notificação do evento descontínuo correspondente. Assim, sempre que este evento descontínuo for gerado, a interfa88/113 ce com o usuário proporcionar realimentação dinâmica.
Quando um algoritmo está rodando (tal quando ele está sendo simulado), a realimentação dinâmica pode ser proporcionada para todos os blocos na área de superfície de desenho do projeto 311. Devido aos eventos descontínuos ocorrerem em pontos no tempo particulares, um indicador da ocorrência de um evento descontínuo pode ser exibido quando o evento ocorre. Por exemplo, uma entrada e/ou saída descontínua pode piscar, alterar a cor, o tamanho ou o formato, quando um evento descontínuo ocorre na entrada / saída. Como outro exemplo, uma conexão entre uma entrada e saída descontínua pode piscar, mudar a cor, o tamanho, ou o formato, quando um evento descontínuo é proporcionado através da conexão. Como outro exemplo, uma animação ao longo da conexão pode ser proporcionada para representar um evento descontínuo sendo proporcionado a partir da saída para a entrada ao longo da conexão. A animação pode ser, por exemplo, um ícone, tal como um círculo vermelho, se movendo ao longo da conexão ou a conexão pode pulsar.
O aspecto de realimentação dinâmica proporciona realimentação para um usuário quando um algoritmo está sendo projetado e quando um algoritmo está sendo executado. A realimentação dinâmica pode permitir que o usuário avalie como a lógica do algoritmo se comporta, incluindo a segurança operacional e a integridade do algoritmo, tendências gerais e possibilidades de lucros / perdas.
As figuras 3H até 3L ilustram uma interface de negociação 310 de acordo com algumas concretizações. A interface de negociação 310 proporciona aspectos de segurança para reduzir erros potenciais quando um algoritmo é projetado.
Como ilustrado na figura 3H, o bloco de instrumento 341 foi colocado na área de superfície de desenho do projeto 311. Entretanto, quando o bloco de instrumento 341 foi colocado, nenhum instrumento foi especificado, o que é uma configuração inválida devido ao bloco de instrumento não poder emitir o nome do instrumento se o instrumento não foi especificado. Um indicador de aviso 342 (aqui, um ícone com um ponto de exclamação
89/113 (!) em um círculo vermelho) é exibido próximo do bloco de instrumento 341 para indicar que existe um problema e uma explicação 343 do problema é exibida quando um cursor é colocado próximo do bloco de instrumento 341. Em algumas concretizações, outros (ou adicionais) indicadores podem ser exibidos para indicar um problema tal como o fundo da área de superfície de desenho do projeto 311 sendo pintada de vermelho e/ou uma mensagem de aviso ou de erro sendo exibida em uma barra de condição, por exemplo.
Como ilustrado na figura 3I, o bloco de atributo de instrumento 344 foi colocado na área de superfície de desenho do projeto 311. Entretanto, o bloco de atributo do instrumento 344, configurado para proporcionar o melhor preço de venda para um instrumento, não foi proporcionado com uma entrada requerida: o nome do instrumento para o qual proporcionar o melhor preço de venda. Ou seja, o bloco de atributo de instrumento 344 não foi conectado com um bloco de instrumento (ou outro bloco que possa proporcionar um nome de instrumento). Por conseqüência, a definição do algoritmo é inválida. Um indicador de aviso e uma explicação também são exibidos, similar a estes nas figura 3H.
Como ilustrado na figura 3J, um bloco de atributo de instrumento
344 e um bloco criador de mercado 345 foram colocados na área de superfície de desenho do projeto 311. Um usuário está tentando conectar a saída do bloco de atributo de instrumento 344 (uma saída contínua com um tipo de valor numérico) com a entrada de instrumento do bloco criador de mercado
345 (uma entrada contínua com um tipo de valor de instrumento). Os tipos de valor para estas entradas e saídas são incompatíveis e, portanto, resultariam em uma definição inválida de algoritmo. Um indicador 346 (aqui, um círculo com uma barra invertida através do mesmo) é exibido na linha de conexão tentada para indicar que a conexão não é válida. Em adição, uma explicação 347 também é exibida. Realimentação similar também pode ser proporcionada se uma conexão for tentada entre uma saída contínua e uma entrada descontínua.
Como ilustrado na figura 3K, o bloco adicionador 348a e o bloco adicionador 348b foram colocados na área de superfície de desenho de pro90/113 jeto 311. Um usuário tentando conectar a saída do bloco adicionador 348b com a entrada do bloco adicionador 348a. Entretanto, a saída do bloco adicionador 348a já está conectada como uma entrada para o bloco adicionador 348b. Permitir a conexão tentada resultaria em uma dependência cíclica no código de programação gerado. Especificamente, ao tentar gerar o código de programação para determinar o valor para o bloco adicionador 348a resultaria em uma repetição infinita. Assim, tal definição de algoritmo é inválida e, similar à realimentação proporcionada na |figura 3J, a conexão é indicada como sendo inválida e uma explicação é exibida.
Como ilustrado na figura 3L, o bloco gerador 349a, o bloco de funil 349b, o bloco extrator de valor 349c, e o bloco acumulador de valor 349d foram colocados na área de superfície de desenho do projeto 311. Um usuário está tentando conectar a saída descontínua do bloco acumulador de valor 349d com uma entrada descontínua do bloco de funil 348b. Entretanto, cada um dentre o bloco de funil 349b, o bloco extrator de valor 349c e o bloco acumulador de valor 349d são blocos de passagem, de modo que cada evento descontínuo recebido é distribuído através de uma saída descontínua correspondente. Assim, quando um evento descontínuo é proporcionado pelo bloco gerador 349a (também conectado com o bloco de funil 349b), ele será passado através de cada bloco conectado. Permitir a conexão tentada resultaria em uma repetição infinita no código de programação gerado. Especificamente, o código de programação gerado, no processamento do evento descontínuo proporcionado pelo bloco gerador, infinitamente passar o evento descontínuo para cada bloco por sua a vez a ser processado, onde este processamento inclui proporcionar o evento descontínuo para o próximo bloco no ciclo. Assim, tal definição de algoritmo é inválida, similar à realimentação proporcionada na figura 3J, a conexão é indicada como sendo inválida e uma explicação é exibida.
Em algumas concretizações, mensagens de aviso e/ou de erro podem ser proporcionadas em uma área separada da interface de negociação 310. Isto pode permitir que um usuário prontamente veja todos os avisos e erros pertinentes ao invés de individualmente examinar cada bloco, por
91/113 exemplo.
As figuras 3M até 3R ilustram uma interface de negociação 310 de acordo com algumas concretizações. A interface 310 proporciona aspectos de grupamento para permitir, por exemplo, reduzir aglomeração, permitir a reutilização de partes de algoritmos (incluindo criar módulos que podem ser compartilhados entre os algoritmos), e permitir o aspecto de virtualização. A aglomeração reduzida e a reutilização de partes de algoritmos pode levar a melhores algoritmos devido ao fato de que isto reduz a probabilidade de enganos no projeto do algoritmo. Vantagens do aspecto de virtualização são discutidos abaixo.
Como ilustrado na figura 3M, uma definição para um algoritmo simples de escalpe foi projetada. Como uma vista geral, o algoritmo de escalpe irá comprar no melhor preço de fenda e então vender em um incremento de negociação acima do preço de cumprimento, conseguindo um lucro de um incremento de negociação por unidade comprada e vendida. Mais particularmente, o algoritmo inclui um bloco criador de mercado de compra 351 e um bloco criador de mercado de venda 352. O bloco criador de mercado de compra 351 é proporcionado com um instrumento para comprar (ESZ0) especificado por um bloco de instrumento. O bloco criador de mercado de compra 351 é proporcionado com um preço para comprar no especificado por um bloco de campo de instrumento que proporciona o melhor preço de venda para o instrumento. O bloco criador de mercado de compara 351 é proporcionado com uma quantidade fixa de 10 para compra especificada por um bloco de número. Quando o bloco criador de mercado de compra 351 recebe as confirmações de cumprimento para a ordem de compra que ele está trabalhando, um evento descontínuo é gerado.
O bloco criador de mercado de venda 352 irá trabalhar as ordens de venda para cobrir a posição assumida pelo bloco criador de mercado de compra 351. O bloco criador de mercado de venda 352 é proporcionado com o mesmo instrumento (ESZ0) para vender. O bloco criador de mercado de venda 352 é proporcionado com um preço para vender no especificado por um bloco adicionador que adiciona o incremento mínimo de preço
92/113 para o instrumento (proporcionado por um bloco de campo de instrumento) para o preço de cumprimento (proporcionado por um bloco extrator de valor a partir do evento descontínuo gerado pelo bloco criador de mercado de compra 351 quando uma confirmação de cumprimento é recebida). O bloco criador de mercado de venda 352 é proporcionado com uma quantidade para venda especificada por um bloco acumulador que proporciona a quantidade acumulada que foi comprada pelo bloco criador de mercado de compra 351, a qual é extraída a partir dos eventos descontínuos gerados quando as confirmações de cumprimento são recebidas pelo bloco criador de mercado de compra.
Assim, quando o algoritmo é executado, o bloco criador de mercado de compra 351 irá comprar uma quantidade de 10 no melhor preço de venda e vender (talvez através de múltiplas ordens de venda) uma quantidade de 10 no preço de cumprimento mais o incremento mínimo de preço.
Como ilustrado na figura 3N, os blocos associados com a parte de lógica de cobertura do algoritmo foram selecionados pelo desenho de uma caixa 353 ao redor dos mesmos. Outras técnicas de interface com o usuário também podem ser utilizadas para selecionar os blocos de interesse para o usuário tal como selecionar com um cursor em combinação com a tecla shift ou control sendo pressionada, por exemplo.
Uma vez que os blocos tenham sido selecionados, eles podem ser agrupados por uma ação tal como seleção de um item de menu.
Como ilustrado na figura 30, os blocos agrupados são então exibidos em um bloco de grupo 353 com uma imagem em miniatura dos blocos contidos no mesmo. O bloco de grupo 353 reduz a aglomeração da área de superfície de desenho do projeto 311 por reduzir o número de blocos e das conexões apresentadas. Em adição, um bloco de grupo pode ser salvo em uma biblioteca de módulos de modo que ele pode ser carregado em outro algoritmo e reutilizado. Um bloco de grupo também pode ser referido como um bloco agrupado. Os blocos dentro do bloco de grupo podem ser referidos como uma parte do algoritmo definido, como um sub-algoritmo, ou como uma sub-rotina, por exemplo.
93/113
O bloco de grupo 353 pode ser criado com as entradas 354 correspondendo às entradas de blocos no bloco de grupo 353 que são valores proporcionados pelas saídas de blocos que não estão no bloco de grupo 353. Por exemplo, como ilustrado na figura 30, o bloco de grupo 353 possui uma entrada de instrumento contínua e uma entrada descontínua. A entrada de instrumento contínua corresponde às entradas de instrumento contínuas do bloco criador de mercado de venda 352 e ao bloco de campo de instrumento que determina o incremento mínimo de preço. A entrada descontínua corresponde à entrada descontínua do bloco acumulador e do bloco de extração de valor.
O bloco de grupo 353 pode ser selecionado e então utilizando uma ação, tal como seleção de um item de menu ou clique duplo, os blocos incluídos no bloco de grupo 353 podem ser editados. Como ilustrado na figura 3P, uma nova janela com uma área de superfície de desenho de projeto similar à área de superfície de desenho de projeto 311 pode ser exibida e manipulada da mesma maneira. O bloco de grupo 353 inclui dois novos blocos de entrada 355 e 356, os quais correspondem às entradas do bloco de grupo 353. O bloco de entrada 355 corresponde à entrada de instrumento contínua do bloco de grupo 353 e o bloco de entrada 356 corresponde à entrada descontínua do bloco de grupo 353. Cada bloco de entrada 355 e 356 possui uma única saída proporcionando o valor que é proporcionado para a respectiva entrada do bloco de grupo 353.
Apesar de não apresentado na figura 3P devido a nenhum dos blocos no bloco de grupo 353 possuir uma saída conectada com um bloco fora do bloco de grupo 353, um bloco de grupo também pode incluir blocos de saída. Similar aos blocos de entrada discutidos acima, os blocos de saída correspondem às saídas do bloco de grupo. Os blocos dentro do bloco de grupo que possuem saídas conectadas com um bloco de saída irão proporcionar valores para blocos fora do bloco de grupo que estão conectados com a saída correspondente do bloco de grupo.
Quando projetando um bloco de grupo, os blocos de entrada e os blocos de saída podem ser colocados para criarem uma entrada ou saída
94/113 para o bloco de grupo. Quando colocados, o usuário pode ser solicitado a especificar o tipo da entrada ou saída. Alternativamente, o bloco de entrada ou de saída pode ser preestabelecido para um tipo predefinido tal como um numérico contínuo. O tipo do bloco de entrada ou de saída pode ser alterado pelo usuário durante o projeto do algoritmo, por exemplo, pela seleção do bloco de entrada ou de saída e pela utilização de uma ação tal como um item de menu ou clique duplo para ser solicitador a entrar com um tipo. De forma similar, o usuário também pode especificar um nome para o bloco de entrada ou de saída (e, assim, a entrada ou saída correspondente do bloco de grupo).
Um bloco de grupo pode conter outro bloco de grupo. Este aninhamento de blocos de grupo permite menos aglomeração e potencialmente maior reutilização de várias partes de algoritmos.
Quando gerando um código de programa, um bloco de grupo é gerado como uma subclasse da classe Algorithm que está aninhada dentro da classe principal CustomAlgorithmO para o algoritmo sendo projetado. Quando blocos de grupo são aninhados dentro de outros blocos de grupo, o código de programação gerado de forma similar aninha cada subclasse gerada. Adicionalmente, quaisquer blocos que não sejam primitivos são declarados e definidos em seu pai bloco de grupo mais próximo. Assim, por exemplo, se um bloco de grupo for aninhado dentro de três blocos de grupo e ele possuir um bloco criador de mercado (um exemplo de um bloco que não é primitivo) dentro do mesmo, a subclasse do bloco criador de mercado irá residir na classe de algoritmo derivada dentro dos três.
Retornando para o algoritmo de escalpe discutido acima, como ilustrado na figura 3M, este algoritmo possui uma imperfeição. Lembre-se que o algoritmo de escalpe almeja comprar o melhor preço de venda e então vender em um incremento de negociação acima do preço de cumprimento, obtendo um lucro de um incremento de negociação por unidade comprada e vendida. Se o bloco criador de mercado de compra 351 receber um único cumprimento para toda a quantidade de 10 para a ordem de compra que ele executa, então, o algoritmo irá operar como pretendido. Entretanto, se mais
95/113 do que uma confirmação de cumprimento for recebida e mais do que um nível de preço, então, o algoritmo não irá funcionar como desejado. Por exemplo, assuma que o bloco criador de mercado de compra 351 trabalha uma ordem para comprar uma quantidade de 10 no melhor preço de venda de 114125. Então, uma primeira confirmação de cumprimento é recebida para uma quantidade de 3 (assim, o primeiro cumprimento foi para uma quantidade de 3 no preço de cumprimento de 114125). Em resposta a este cumprimento, o bloco criador de mercado de venda 352 irá trabalhar uma ordem para vender uma quantidade de 3 em um preço de 114150 (114125 (preço de cumprimento) + 25 (incremento mínimo de preço)). Agora assuma que o melhor preço de venda diminui para 114100. O bloco criador de mercado de compra 351 então irá cotar novamente sua ordem em andamento para o novo (e agora, inferior) melhor preço de venda para uma quantidade de 7. Então, uma segunda confirmação de cumprimento é recebida para uma quantidade de 7 (assim, o segundo cumprimento foi para uma quantidade de 7 em um preço de cumprimento de 114100). Portanto, o comportamento desejado do algoritmo de escalpe é que uma primeira ordem de venda para uma quantidade de 3 (para cobrir o primeiro cumprimento) deva ser colocada em um preço de 114150 (14125 + 25) e uma segunda ordem de venda para uma quantidade de 7 (para cobrir o segundo cumprimento) deva ser colocada em um preço de 114125 (114100 + 25).
Entretanto, o algoritmo ilustrado na figura 3M não irá trabalhar apropriadamente as ordens para obter o comportamento desejado. Quando o primeiro cumprimento é recebido, o bloco criador de mercado de venda 352 irá fazer uma primeira ordem de cobertura para vender uma quantidade de 3 em um preço de 114125 + 25. Entretanto, se o segundo cumprimento for recebido antes da primeira ordem de cobertura ser cumprida, o bloco criador de mercado de venda 352, recebendo uma nova quantidade para cotar a partir do bloco acumulador (que é atualizado para refletir que uma quantidade de 10 foi agora cumprida), irá executar sua ordem de cobertura para uma quantidade de 10 em um preço de 114100 + 25 (o preço do cumprimento mais recente (o segundo cumprimento) mais o incremento mínimo de pre96/113 ço). Por conseqüência, o primeiro cumprimento não será coberto no preço desejado (o que é um comportamento não pretendido e/ou não desejável). Aqui, se a ordem de cobertura for cumprida completamente, toda a quantidade de 10 para a ordem de cobertura será cumprida no mesmo preço, mesmo que no entanto o comportamento desejado do algoritmo seria para as ordens de cobertura serem trabalhadas em um preço e quantidade particular para cada cumprimento recebido.
O aspecto de virtualização da aplicação de negociação 300 endereça problemas desta natureza. Um bloco de grupo pode ser selecionado e então utilizando uma ação, tal como seleção de um item de menu, o bloco de grupo pode ser especificado para ser virtualizado. Como ilustrado na figura 3Q, o bloco de grupo 353 foi virtualizado e isto é indicado pela alteração da borda do bloco de grupo 353 a partir de uma linha contínua para uma linha tracejada. Em algumas concretizações, um bloco de grupo pode ser designado como virtualizado de outros modos, tal como anexando texto para o nome do bloco, alterando a cor da borda, a cor do fundo, ou o padrão do fundo, por exemplo.
Uma instância de um bloco de grupo virtualizado é criada para cada evento descontínuo que é proporcionado para o bloco de grupo virtualizado. Ou seja, cada vez que um evento descontínuo é recebido em um bloco de grupo virtualizado, uma nova instância do bloco de grupo virtualizado é criada para manipular o evento descontínuo. Isto endereça o comportamento desejado discutido acima: que cada evento descontínuo seja manipulado pela lógica do bloco de grupo baseado na informação particular para este evento descontínuo. Continuando com o exemplo acima, mas especificando o bloco de grupo 353 para ser virtualizado, cada evento descontínuo gerado pelo bloco criador de mercado de compra 351 para um cumprimento irá resultar em uma nova instância do bloco de grupo virtualizado 353 sendo criada para manipular este evento descontínuo particular.
Portanto, cada bloco de grupo a ser virtualizado deve possuir uma entrada de evento descontínuo devido ao mesmo ser a notificação do evento descontínuo para o bloco de grupo virtualizado que causa que uma
97/113 nova instância seja criada. Uma vez que um bloco de grupo virtualizado tenha sido instanciado, esta instância particular não recebe mais eventos descontínuos a partir do exterior de seu escopo (ou seja, a partir de blocos que não estão dentro do bloco de grupo virtualizado). Ao invés disso, quaisquer eventos descontínuos subseqüentes a partir do exterior do escopo do bloco de grupo virtualizado resultariam na criação de uma nova instância do bloco de grupo virtualizado. Entretanto, eventos descontínuos ainda podem ser gerados e processados por blocos dentro do bloco de grupo virtualizado e um evento descontínuo gerado dentro do bloco de grupo virtualizado pode ser proporcionado para uma entrada descontínua do bloco de grupo virtualizado. A figura 3R ilustra conceitualmente como a lógica do algoritmo trabalharia quando três eventos descontínuos fossem gerados pelo bloco criador de mercado de compra 351. Três instâncias do bloco de grupo 353 foram instanciadas em resposta a cada um dos três eventos descontínuos a partir do bloco criador de mercado de compra 351. Observe que o algoritmo exibido somente realmente apresentaria o bloco de grupo virtualizado único 353 como ilustrado na figura 3Q e que as três instâncias apresentadas na figura 3R são apresentados somente para indicar o conceito de virtualizar um bloco de grupo. Em algumas concretizações, o número de instâncias de um bloco de grupo pode ser indicado. Por exemplo, o número de instâncias pode ser indicado graficamente de uma maneira similar a esta apresentada na figura 3R por apresentar uma pilha de bloco de grupos virtualizados, onde o tamanho da pilha representa o número de instâncias do bloco de grupo virtualizado que foram instanciadas. Como outro exemplo, o número de instâncias pode ser indicado por um número exibido no bloco de grupo (tal como em um canto) que representa uma contagem do número de instâncias do bloco de grupo virtualizado que foram instanciadas.
Em adição, um bloco de grupo virtualizado não pode possuir uma saída contínua (entretanto, ele pode possuir saídas descontínuas) devido ao fato de que o valor de tal saída seria semanticamente indefinido. Isto é devido ao fato de que podem existir mais do que uma instância do bloco de grupo virtualizado (ou, potencialmente, nenhuma instância se um evento
98/113 descontínuo ainda não tiver sido recebido para o mesmo) e assim, tal saída contínua poderia possuir diferentes valores simultaneamente (ou nenhum valor). Adicionalmente, um bloco de grupo virtualizado pode não conter um bloco específico para ser variável devido ao fato de que a variável poderia não existir até que o bloco de grupo virtualizado fosse instanciado.
Um bloco de grupo virtualizado pode conter outro bloco de grupo ou outro bloco de grupo virtualizado, da mesma forma que blocos de grupo podem ser aninhados como discutido acima.
Quando gerando código de programa, um bloco de grupo virtualizado é gerado como uma subclasse da classe Algorithm, como um bloco de grupo não virtualizado, como discutido acima. Entretanto, ao invés de ser instanciado quando a classe principal CustomAlgorithmO, ,uma lista de subclasses inicialmente vazia para o bloco de grupo virtualizado é mantida e quando um evento descontínuo é para ser proporcionado para a subclasse correspondendo ao bloco de grupo virtualizado, uma nova instância da subclasse do bloco de grupo virtualizado é criada.
A conexão de rede entre um dispositivo cliente e um servidor de algoritmo pode ser interrompida inesperadamente. Por exemplo, o provedor de serviço Internet (ISP) utilizado pelo dispositivo cliente para conectar o servidor de algoritmo pode ter uma falha de roteador ou uma ligação e comunicação fisicamente interrompida que pode interromper a comunicação entre o dispositivo cliente e o servidor de algoritmo. Como outro exemplo, um nó intermediário na rede pode falhar, também interrompendo a comunicação entre o dispositivo cliente e o servidor de algoritmo. Como outro exemplo, o dispositivo cliente pode quebrar, interrompendo a conexão com o servidor de algoritmo. Nos sistemas atuais, quanto tal conexão é interrompida, o algoritmo é paralisado ou continua a funcionar sem conhecimento de que a conexão foi interrompida. No primeiro caso, um negociador pode ser deixado com posições abertas que não podem ser deixadas facilmente (ou potericialmente de modo algum, desde que sua conexão está fora de operação). No último caso, um negociador pode ficar inapto a modificar os parâmetros para desligar, ou parar um algoritmo que não está mais operando
99/113 corretamente ou que pode estar impróprio para alterações nas condições no mercado. Frequentemente os negociadores executam algoritmos que podem ser muito arriscados, e eles pode desejar estar aptos a desativa os mesmos ou a alterar os parâmetros quando de uma informação momentânea.
Em algumas concretizações, um ou mais blocos podem ser especificados para ficarem cientes do estado da conexão entre um dispositivo cliente e um servidor de algoritmo. Por exemplo, quando colocado, pode ser apresentada para o usuário uma opção para especificar que o bloco deve continuar a executar mesmo se a conexão entre o dispositivo cliente e o servidor de algoritmo executando o algoritmo for desconectada. A opção também pode ser especificada pela seleção do bloco e pela utilização de uma ação tal como um item de menu ou comando por teclado. Por valor preestabelecido, um algoritmo pode pausar ou parar quando a conexão entre o dispositivo cliente e o servidor de algoritmo é interrompida. Em algumas concretizações, todo o algoritmo é especificado para continuar a executar mesmo se a conexão entre o dispositivo cliente e o servidor de algoritmo executando o algoritmo for interrompida.
Por exemplo, um bloco criador de mercado pode possuir uma opção para manter as ordens geradas pelo bloco criador de mercado no mercado mesmo se a conexão entre o dispositivo cliente e o servidor de algoritmo for interrompida. Um bloco criador de mercado sendo utilizado em uma parte de ordem de cobertura do algoritmo pode ser configurado desta maneira de modo que qualquer posição assumida por outra parte do algoritmo será coberta como desejado, mesmo se a parte do algoritmo executando estas ordens não estiver mais executando devido à conexão estar interrompida.
Em algumas concretizações, um bloco de entrada pode ser adicionado para o algoritmo sendo projetado, o qual proporciona saída Booleana contínua representando o estado da conexão entre o dispositivo cliente e o servidor de algoritmo. Os blocos então podem pegar o valor a partir dês bloco de entrada de estado da conexão como uma entrada para controlar seu comportamento. Por exemplo, o bloco de entrada de estado da conexão
100/113 pode ser conectado com a entrada condicional de um bloco criador de mercado de modo que o bloco criador de mercado somente trabalha uma ordem quando o estado da conexão é VERDADEIRO (representando conectado).
Uma vez que um algoritmo tiver sido definido na interface de negociação 310, ela pode ser salvo. Também pode ser dado um nome para um algoritmo (por exemplo, enquanto o algoritmo está sendo construído e/ou quando o algoritmo é salvo). O algoritmo salvo pode então ser novamente chamado ou referenciado no tempo futuro com a interface de negociação 310 ou com outra interface de negociação. Por exemplo, o algoritmo salvo pode ser carregado com a interface de negociação 310 de modo que ele pode ser editado ou reutilizado em outra ordem. Como outro exemplo, o algoritmo salvo pode ser referenciado como um tipo de ordem a partir de outra interface de negociação como discutido abaixo.
Os componentes, elementos, e/ou funcionalidade da interface de negociação 310 discutidos acima podem ser implementados sozinhos ou em combinação em várias formas em hardware, firmware, e/ou como um conjunto de instruções em software, por exemplo. Algumas concretizações podem ser proporcionadas como um conjunto de instruções residindo em um meio legível por computador, tal como uma memória, disco rígido, CD-ROM, DVD, EPROM, e/ou servidor de arquivo, para execução em um computador de propósito geral ou em outro dispositivo de processamento.
IV. Algoritmos de Inicialização e Gerenciamento
Algumas concretizações proporcionam iniciar a feitura de uma ordem a ser gerenciada por um algoritmo selecionado como um tipo de ordem. Algumas concretizações proporcionam iniciar a feitura de uma ordem a ser Gerenciada por um algoritmo de negociação selecionado definido pelo usuário a partir de um eixo geométrico valor. Algumas concretizações proporcionam alterar uma variável para um algoritmo enquanto o algoritmo está gerenciando uma ordem. Algumas concretizações proporcionam manualmente modificar uma ordem sendo gerenciada por um algoritmo. Algumas concretizações proporcionam designar para uma ordem não gerenciada um algoritmo para gerenciar a ordem. Algumas concretizações proporcionam
101/113 exibir ordens de trabalho sendo gerenciadas por diferentes algoritmos de negociação definidos pelo usuário em um eixo geométrico de valor.
As figuras 4A até 4F ilustram interfaces de negociação de acordo com algumas concretizações. Como ilustrado na figura 4A, a interface de negociação 410 é um boleto de ordem que permite um algoritmo salvo ser selecionado como um tipo de ordem. Os algoritmos salvos podem ter sido salvos utilizando uma interface de negociação similar às interfaces de negociação 200 e 310 discutidas acima, por exemplo.
O algoritmo salvo pode ser selecionado utilizando a interface de seleção 415, a qual, como ilustrado, proporciona uma lista suspensa que inclui tanto tipos de ordem padrão (tal como limite e mercado) como algoritmos salvos. Em algumas concretizações, a interface de seleção 415 inclui outros elementos para seleção a partir dos algoritmos salvos disponíveis. Por exemplo, a interface de seleção 415 pode abrir um navegador de arquivo para navegar um algoritmo particular. Como outro exemplo, a interface de seleção 415 pode incluir uma vista de árvore de algoritmos salvos que foi categorizada em uma hierarquia baseada no tipo de algoritmo.
A interface de negociação 420 é um boleto de ordem simplificado que também permite que um algoritmo salvo seja selecionado como um tipo de ordem com uma interface de seleção 415.
Quando uma ordem é iniciada a partir da interface de negociação 410 ou 420 e um algoritmo salvo foi selecionado como o tipo de ordem, a ordem é gerenciada de acordo com o algoritmo selecionado. Se o algoritmo selecionado tiver sido configurado para pegar parâmetros a partir da interface de negociação (tal como o preço ou a quantidade do boleto de ordem), os valores especificados na interface de negociação 410 ou 420 serão proporcionados para o algoritmo quando ele for executado.
Como ilustrado nas figuras 4B e 4C, a interface de negociação 430 (uma interface de negociação do estilo boleto de ordem similar à interface de negociação 410 discutida acima) e a interface de negociação 440 (uma interface de negociação do estilo escada de profundidade de mercado ou de eixo geométrico) são apresentadas após um tipo de ordem de algoritmo
102/113 ter sido selecionado utilizando a interface de seleção 4154. Aqui, o algoritmo selecionado é similar ao ilustrado na figura 2I. A interface de negociação 440 pode incluir um eixo de valores que inclui valores correspondendo ou baseados nos níveis de preço para um objeto negociável. Os valores podem ser preços para o objeto negociável (tal como um eixo de preços), por exemplo. A informação relacionada com o objeto negociável, tal como quantidade disponível nos níveis de preço correspondendo aos valores no eixo de valores, também pode ser exibida ao longo do eixo geométrico de valores. As variáveis do algoritmo são apresentadas nas áreas de variável 435 e 445, respectivamente, e podem ser alteradas antes de iniciar uma ordem. A área de variável 435 é incorporada na interface de negociação 430 como parte da mesma janela. A área de variável 445 é incorporada na interface de negociação 440 como uma janela separada. As variáveis na área de variável 435 e 445 são preestabelecidas para os valores especificados na coluna de valor preestabelecido 272 da área de variável 206, como ilustrado na figura 2I. Quando alterada, uma ordem iniciada será trabalhada de acordo com o algoritmo selecionado com os valores variáveis alterados.
Como ilustrado na figura 4D, a interface de negociação 450 é um livro de ordens apresentando ordens em andamento no mercado. Aqui, uma ordem 451 estando em andamento de acordo com um algoritmo (também similar a uma ilustrada na figura 2I) é selecionada. As variáveis do algoritmo são apresentadas na área de variável 455 (similar às áreas de variável 435 e 445) e podem ser alteradas. Quando alteradas (e a alteração é aplicada), o algoritmo irá continuar a funcionar de acordo com os valores alterados da variável. A alteração junto às variáveis se torna efetiva sem pausar ou parar o algoritmo.
Em algumas concretizações, a interface de negociação 450 permite que um usuário manualmente modifique uma ordem sendo gerenciada por um algoritmo. Por exemplo, um usuário pode alterar o preço ou a quantidade da ordem ou remover a ordem. Em resposta, o algoritmo gerenciando a ordem pode alterar o preço da ordem, ele pode alterar a quantidade da ordem, ele pode não fazer nada, ou ele pode não executar nova ação,
103/113 mas meramente ter novas informações ou limites baseados na modificação manual para utilizar de acordo com a definição do algoritmo, por exemplo.
Em algumas concretizações, a interface de negociação 450 pode incluir uma ordem que não está sendo gerenciada por um algoritmo (por exemplo, uma ordem manualmente informada). Esta ordem não gerenciada pode ser selecionada e um algoritmo pode ser aplicado para a mesma. Por exemplo, um usuário pode selecionar a ordem não gerenciada e, utilizando uma ação, tal como um item de menu ou comando de teclado, receber uma lista de algoritmos disponíveis para aplicar para a ordem não gerenciada selecionada. A lista de algoritmos disponíveis pode incluir algoritmos salvos que incluem um bloco de ordem, por exemplo. Quando aplicado para a ordem não gerenciada selecionada, o algoritmo selecionado pode então gerenciar a ordem de acordo com o algoritmo. Como outro exemplo, um usuário pode selecionar uma ordem não gerenciada boa até que cancelada (GTC) e aplicar um algoritmo selecionado para a mesma de modo que o algoritmo pode gerenciar a ordem através de sessões futuras de negociação.
Como ilustrado na figura 4E, a interface de negociação 460 é uma interface de negociação do estilo escada de profundidade do mercado ou de eixo geométrico similar à interface de negociação 440 discutida acima. Várias ordens foram iniciadas e são ilustradas trabalhando em diferentes níveis de preço. As ordens 461 foram iniciadas para serem gerenciadas com um primeiro algoritmo e as ordens 462 foram iniciadas para serem gerenciadas com um segundo algoritmo. Assim, a interface de negociação 460 proporciona uma única interface exibindo múltiplas ordens em andamento sendo gerenciadas de acordo com o mesmo algoritmo. Adicionalmente, a interface de negociação 460 proporciona uma única interface exibindo ordens em andamento sendo gerenciadas de acordo com múltiplos algoritmos.
Em algumas concretizações, as ordens em andamento sendo gerenciadas de acordo com um algoritmo particular são normalmente identificadas. Por exemplo, cada ordem em andamento associada com um primeiro algoritmo pode ser identificada graficamente, por exemplo, com uma cor
104/113 de fundo, cor de primeiro plano, padrão de fundo, cor de borda, estilo de borda, formato, símbolo, número, texto e/ou fonte particulares. Ordens em andamento associadas com um segundo algoritmo podem então ser identificadas utilizando uma cor, padrão, borda, formato, símbolo, número, texto e/ou fonte diferentes, poro exemplo.
Em algumas concretizações, as ordens em andamento sendo gerenciadas de acordo com um algoritmo particular são individualmente identificadas. Por exemplo, cada ordem em andamento associada com uma instância diferente do mesmo algoritmo pode ser distinguida de outras or10 dens em andamento associadas com instâncias diferentes deste algoritmo com um identificador tal como uma cor, padrão, borda, formato, símbolo, número, texto e/ou fonte. Ordens sendo gerenciadas de acordo com uma primeira instância de um algoritmo podem possuir um número 1 no canto de seus indicadores de ordem em andamento ao passo que a ordem sendo gerenciada de acordo com uma segunda instância do algoritmo pode possuir um número 2 no canto de seus indicadores de ordem em andamento. A indicação de ordens em andamento sendo gerenciadas por diferentes instâncias de um algoritmo particular pode ser aplicada em combinação com a indicação de ordens em andamento sendo gerenciadas por diferentes algo20 ritmos discutidos acima.
Como ilustrado na figura 4F, a interface de negociação 470 é um gerenciador de algoritmo. A interface de negociação 470 também pode ser referida como uma cabine de piloto ou painel de instrumentos. A interface de negociação 470 inclui uma lista 471 de algoritmos disponíveis. Um algoritmo particular pode ser selecionado a partir da lista 471. Quando um algoritmo é selecionado, uma visão de um algoritmo selecionado é exibida na área de vista 472 e uma lista 473 de instâncias em execução do algoritmo selecionado também é exibida. Como ilustrado, a área de vista 472 pode apresentar uma definição de algoritmo feita utilizando uma interface de negociação simi30 lar à interface de negociação 310 discutida acima. Entretanto, a área de vista 472 também pode exibir uma vista de um algoritmo definido utilizando uma interface de negociação similar à interface de negociação 200 discutida aci105/113 ma. A lista 473 de instâncias em execução do algoritmo selecionado pode incluir informação sobre a instancia em execução tal como a hora em que ela foi iniciada, sua posição, condição, lucro e perda, número de ordens em andamento, número de ordens cumpridas, instrumento para o qual a ordem mais recente foi executada e/ou um cumprimento que foi recebido para a mesma, e/ou informação de conta da ordem, por exemplo.
Em adição, a área de variável 474 exibe as variáveis do algoritmo selecionado e os valores destas variáveis para uma instancia selecionada do algoritmo selecionado. A área de variável 474 é similar às áreas de variável 435, 445 e 455 discutidas acima. As variáveis para a instância selecionada do algoritmo selecionado podem ser alteradas. Quando alterado (e a alteração é aplicada), o algoritmo irá continuar a executar de acordo com os valores alterados de variável. A alteração para as variáveis se torna efetiva sem pausar ou parar o algoritmo.
Em algumas concretizações, uma interface de negociação, tal como as interfaces de negociação 200, 290, 310, 410, 420, 430, 440, 450, 460 e/ou 470, é adaptada para permitir que um usuário especifique o comportamento quando uma ordem está sendo gerenciada por um algoritmo não é cumprida no fechamento de uma sessão de negociação. Por exemplo, uma interface de negociação pode permitir que o usuário especifique que uma ordem não cumprida sendo gerenciada por um algoritmo deve ser cancelada e o algoritmo paralisado. Como outro exemplo, uma interface de negociação pode permitir que o usuário especifique que uma ordem não cumprida sendo gerenciada por um algoritmo deve continuar a ser gerenciada no início da próxima sessão de negociação. Como outro exemplo, uma interface de negociação pode permitir que o usuário especifique que uma ordem não cumprida sendo gerenciada por um algoritmo deve ser pausada no início da próxima sessão de negociação e reinicie sendo gerenciada pelo algoritmo quando não pausada pelo usuário.
Os componentes, elementos, e/ou funcionalidade das interfaces de negociação 410, 420, 430, 440, 450, 460 e 470 discutidos acima podem ser implementados sozinhos ou em combinação em várias formas em hard106/113 ware, firmware e/ou como um conjunto de instruções em software, por exemplo. Algumas concretizações podem ser proporcionadas como um conjunto de instruções residindo em um meio legível por computador, tal como uma memória, disco rígido, CD-ROM, DVD, EPROM, e/ou servidor de arquivo, para execução em um computador de propósito geral ou em outro dispositivo de processamento.
V. Ferramenta de Classificação
A figura 5 ilustra uma ferramenta de classificação 500 de acordo com algumas concretizações. A ferramenta de classificação 500 pode ser utilizada para classificar opções de cobertura, por exemplo. Na negociação de futuros, uma das estratégias mais comuns é negocia margem, que é um método pelo qual um negociador com exposição de risco direcional de mercado em um instrumento está desejando cobrir seu risco por executar um negócio em um ou mais instrumentos similares para deslocar, minimizar, ou diminuir a variação do risco do negociador. Os dois preços nos quais as duas posições são iniciadas criam uma combinação ou preço de margem. O negociador pode então eventualmente tentar executar negociações que relaxem a posição aberta, de preferência em um preço de margem diferencial que produz um lucro a partir dos preços nos quais ele iniciou a posição.
Para alguns programas automáticos de negociação, uma técnica de cobertura pode ser implementada que automaticamente cobre o risco Para o negociador. Esta técnica de cobertura pode ser automática para cobrir em um instrumento particular, ou pode ser programada para escolher entre várias escolhas de instrumento de acordo com um método préprogramado. Entretanto, os sistemas atuais não proporcionam cobrir negociadores que não estão amarrados com escolhas predeterminadas de instrumento.
A dificuldade em iniciar uma posição de negociação de margem não automática, particularmente para um criador de mercado, é que, devido aos ganhos de velocidade na tecnologia, oportunidades de cobrir negociações de uma pessoa mais eficientemente se tornaram mais difíceis. Devido à natureza de seu papel de aprovisionamento de liquidez nos mercados, um
107/113 criador de mercado frequentemente é notificado sem aviso ou preparação de que eles estão proporcionando liquidez (isto é, estão recebendo uma execução de negociação) para uma contra-parte. Para o criador de mercado ou qualquer negociador que pode repentinamente adquirir uma posição de negociação aberta, o espaço de tempo entre quando uma primeira perna de uma margem é iniciada e quando o negociador pode cobrir sua negociação se tornou um detrimento sério para gerenciamento de cobertura e de risco. Um negociador que não está apto a rapidamente cobrir uma negociação pode perder centenas, milhares, ou mesmo milhões de dólares. O negociador deve não somente gastar o tempo para decidir qual instrumento é seu melhor instrumento com o qual cobrir, mas eles também devem executar a negociação de cobertura.
Algumas concretizações proporcionam uma ferramenta de classificação 500 que proporciona duas vantagens distintas de velocidade em manualmente cobrir uma negociação para de forma ideal criar (mas não limitado a criar) uma posição de margem. O primeiro aspecto deixa um usuário pré-selecionar um grupo de instrumentos que são constantemente analisados por um método pré-programado de parâmetros para determinar, em ordem preferencial, qual contrato(s) é o instrumento mais vantajoso para comprar ou vender em qualquer momento particular. Em uma concretização, esta técnica pode ser implementada para analisar vários níveis de venda / compra nos mercados existentes de margem em um instrumento que o programa está considerando. Em outra concretização, isto pode olhar o inventário da posição de negociação do negociador para decidir qual negociação de cobertura irá ajudar ao negociante em na melhor diminuição de seu risco geral. Na verdade, os métodos por trás do processo de execução do sistema são sem limites. Esta informação pode ser utilizada pelo negociador para eliminar o tempo requerido para decidir qual instrumento com qual cobrir seu risco.
Outro aspecto da ferramenta de classificação 500, em adição à habilidade de automaticamente analisar qual instrumento proporciona a cobertura ideal, é que ela pode ser utilizada para realmente automaticamente
108/113 entrar com uma ordem de compra ou de venda ou com um grupo de ordens para executar a melhor cobertura ou grupo de coberturas disponíveis no mercado de acordo com o método de cobertura pré-programado mencionado acima. As únicas ações potenciais do negociador requeridas são préselecionar os instrumentos sob consideração, entrar com a quantidade desejada (a qual pode ser preestabelecida) e clicar em um cabeçalho de execução de compra ou de venda na interface de negociação. Este dispositivo de cobertura automático deixa o negociador com vários estoques de negociação coberta que devem ser acumulados em preço de margem vantajosa que se alinham com o método de classificação desejado do negociador. A ferramenta de classificação 500 é útil para qualquer negociante que corre o risco de executar uma negociação que poderia se tornar difícil de cobrir sob uma ampla variedade de circunstâncias do mercado.
A ferramenta de classificação 500 inclui uma área de seleção 510 com uma listagem de objetos negociáveis que um usuário pode identificar ou selecionar para análise. Neste exemplo, os objetos negociáveis listados são futuros Eurodólar para vários meses. As colunas melhor (melhores comprar 520 e melhores vendas 530) exibem uma classificação dos instrumentos selecionados em ordem, com as compras 520 neste exemplo sendo classificadas baseadas no preço de compra corrente e as vendas sendo classificadas baseadas no preço de venda corrente.
A parte de boleto de ordem 540 da ferramenta de classificação 500 permite que o usuário entre com uma quantidade para comprar ou vender de acordo com o sistema de classificação. Os botões Buy e Sell permitem a execução automática de um instrumento desejado. Neste sistema, um usuário possui várias escolhas 550, incluindo a escolha de somente comprar / vender o instrumento classificado como número um, cumprir todos os instrumentos selecionados, ou repetir se necessário. Por exemplo, no evento em que uma quantidade desejada do negociador não é satisfeita pela quantidade disponível com o instrumento na posição número um, a ferramenta de classificação 500 pode trabalhar uma ordem de limite neste instrumento no preço inicial. Uma abordagem mais agressiva é executar qualquer quantida109/113 de que esteja disponível para o instrumento na posição número um, e se necessário, prosseguir para a cobertura automática para os próximos contratos. A execução automática somente irá funcionar para a parte de baixo da lista (a classificação número 5 neste exemplo), e trabalhar uma ordem de limite se a quantidade associada com a mesma ainda não tiver sido satisfeita pela negociação através de todos os meses mais bem classificados listados. A ferramenta de classificação 500 pode repetir se necessário, tal como onde existe uma ordem de mercado pura e a aplicação irá continuar para o próximo preço disponível enquanto reiniciando na parte de cima da lista.
Os componentes, elementos, e/ou funcionalidade da ferramenta de classificação discutidos acima podem ser implementados sozinhos ou em combinação em várias formas em hardware, firmware, e/ou como um conjunto de instruções em software, por exemplo. Algumas concretizações podem ser proporcionadas como um conjunto de instruções residindo em um meio legível por computador, tal como memória, disco rígido, CD-ROM, DVD, EPROM, e/ou servidor de arquivo, para execução em um computador de propósito geral ou em outro dispositivo de processamento.
VI. Dispositivo de Computação Ilustrativo
A figura 6 ilustra um diagrama de blocos de um dispositivo de computação 600 de acordo com algumas concretizações. O dispositivo cliente 110 pode incluir um ou mais dispositivos de computação 600, por exemplo. O dispositivo cliente 301 pode incluir um ou mais dispositivos de computação 600, por exemplo. O servidor de algoritmo 302 pode incluir um ou mais dispositivos de computação 600, por exemplo. O dispositivo de interconexão de rede 120 pode incluir um ou mais dispositivos de computação 600, por exemplo. A bolas 130 pode incluir um ou mais dispositivos de computação 600, por exemplo. A bolsa 303 pode incluir um ou mais dispositivos de computação 600, por exemplo.
O dispositivo de computação 600 inclui um barramento 610, um processador 620, uma memória 630, uma interface de rede 640, um dispositivo de vídeo 650, um dispositivo de entrada 660, e um dispositivo de saída 670. O dispositivo de computação 600 pode incluir componentes adicionais,
110/113 componentes diferentes ou menos componentes. Por exemplo, múltiplos barramentos, múltiplos processadores, múltiplos dispositivos de memória, múltiplas interfaces de memória, múltiplos dispositivos de vídeo, múltiplos dispositivos de entrada, múltiplos dispositivos de saída, ou qualquer combinação dos mesmos, podem ser proporcionados. Como outro exemplo, o dispositivo de computação 600 pode não incluir um dispositivo de saída 670 separado do dispositivo de vídeo 650. Como outro exemplo, o dispositivo de computação 600 pode não incluir um dispositivo de vídeo 650. Como outro exemplo, o dispositivo de computação 600 pode não incluir um dispositivo de entrada 660. Ao' invés disso, por exemplo, o dispositivo de computação 600 pode ser controlado por um dispositivo de entrada externo ou remoto via a interface de rede 640.
O barramento 610 pode incluir um barramento de comunicação, canal, rede, circuito, chave, estrutura, ou outro mecanismo para comunicar dados entre os componentes no dispositivo de computação 600. O barramento 610 pode estar comunicativamente acoplado com e transferir dados entre quaisquer componentes do dispositivo de computação 600. Por exemplo, durante um processo de instalação de uma aplicação de negociação, uma ou mais instruções legíveis por computador que são para ser executadas pelo processador 620 podem ser transferidas a partir de um dispositivo de entrada 660 e/ou da interface de rede 640 para a memória 630. Quando o dispositivo de computação 600 está executando ou se preparando para executar a aplicação de negociação armazenada na memória 630, o processador 620 pode recuperar as instruções a partir da memória 630 via o barramento 610.
O processador 620 pode incluir um processador geral, processador de sinal digital, circuito integrado de aplicação específica, arranjo de portas programável em campo, circuito analógico, circuito digital, processador programado, combinações dos mesmos, ou outro dispositivo de processamento atualmente conhecido ou posteriormente desenvolvido. O processador 620 pode ser um único dispositivo ou uma combinação de dispositivos, tal como associado com uma rede ou processamento distribuído. Qual111/113 quer estratégia de processamento pode ser utilizada, tal como multiprocesamento, multitarefa, processamento paralelo, e/ou processamento remoto, por exemplo. O processamento pode ser local ou remoto e pode ser movido de um processador para outro processador.
O processador 620 pode ser operável para executar lógica codificada em um ou mais meios tangíveis, tais como memória 630 e/ou via o dispositivo de rede 640. Como utilizado neste documento, lógica codificada em um ou mais meios tangíveis inclui instruções que são executáveis pelo processador 620 ou por um processador diferente. A lógica pode ser armazenada como parte de software, hardware, circuitos integrados, firmware, e/ou microcódigo, por exemplo. A lógica pode ser recebida a partir de um dispositivo de comunicação externo via uma rede de comunicação, por exemplo, conectada com a Internet. O processador 620 pode executar a lógica para executar as funções, atos, ou tarefas ilustradas nas figuras ou descritas neste documento.
A memória 630 pode ser meio tangível, tal como meio de armazenamento legível do computador, por exemplo. O meio de armazenamento legível do computador pode incluir vários tipos de meio de armazenamento volátil e não volátil, incluindo, mas não limitado à memória de acesso aleatório, memória somente para leitura, memória somente para leitura programável, memória somente para leitura eletricamente programável, memória somente para leitura que pode ser eletricamente apagada, memória flash, fia ou disco magnético, meio ótico, qualquer combinação dos mesmos, ou qualquer outro dispositivo de armazenamento de dados tangível atualmente conhecido ou posteriormente desenvolvido. A memória 630 pode incluir um único dispositivo ou múltiplos dispositivos. Por exemplo, a memória 630 pode incluir memória de acesso aleatório e armazenamento em unidade de disco rígido. A memória 630 pode ser adjacente a, parte de, programada com, ligada em rede com, e/ou remota a partir do processador 620, de modo que os dados armazenados na memória 630 possam ser recuperados e processados pelo processador 620, por exemplo.
A memória 630 pode armazenar instruções que são executáveis
112/113 pelo processador 620. As instruções podem ser executadas para executarem um ou mais dentre os atos ou funções descritas neste documento ou apresentadas nas figuras.
A interface de rede 640 pode ser um acoplamento de comunicação unidirecional ou bidirecional. Por conseqüência, a interface de rede 640 pode comunicativamente se conectar com uma, duas, ou mais redes ou dispositivos de comunicação. Por exemplo, o barramento 610 pode ser acoplado com um dispositivo de interconexão de rede similar ao dispositivo de interconexão de rede 120 discutido acima via a interface de rede 640, de modo que um, alguns, ou todos os componentes do dispositivo de computação 600 são acessíveis ou podem ser comunicar com o dispositivo de interconexão de rede. Como outro exemplo, a interface de rede 640 pode acoplar o barramento 610 com ouras redes de comunicação. A interface de rede 640 pode ser, por exemplo, uma placa de rede digital de serviços integrados (ISDN) ou um modem para proporcionar uma conexão de comunicação de dados. Como outro exemplo, a interface de rede 640 pode ser uma placa de rede de área local (LAN) para proporcionar uma conexão de comunicação de dados para uma LAN compatível, por exemplo, conectada com a Internet. Ligações sem uso de fios também podem ser implementadas. A interface de rede 640 pode enviar e receber sinais elétricos, eletromagnéticos, ou óticos que transportam fluxos de dados analógicos ou digitais representando vários tipos de informações, por exemplo.
O dispositivo de vídeo 650 pode incluir um dispositivo de saída visual, vídeo de tubo de raio catódico (CRT), vídeo eletrônico, papel eletrônico, vídeo de tela plana, vídeos de diodo de emissão de luz (LED), vídeo eletroluminescente (ELD), painéis de vídeo de plasma (PDP), vídeo de cristal líquido (LCD), vídeo de transistor de película fina (TFT), vídeos de diodo de emissão de luz orgânico (OLED), vídeo emissor de elétron por condução na superfície (SED), televisão a laser, nano tubos de carbono, vídeos de nano cristal, capacetes de visualização, vídeo tridimensional, dispositivo de vídèo transparente, e/ou outro vídeo atualmente conhecido ou posteriormente desenvolvido, por exemplo.
113/113
O dispositivo de vídeo 650 é adaptado para exibir uma tela de negociação. A tela de negociação pode ser similar às telas de negociação discutidas acima, por exemplo. A tela de negociação pode ser interativa. Uma tela de negociação interativa pode permitir, por exemplo, que uma ou mais ações de negociação sejam executadas utilizando a tela de negociação. Por exemplo, uma tela de negociação interativa pode permitir que um ou mais parâmetros de entrada de ordem seja estabelecidos e/ou enviados utilizando uma ou mais ações de entrada de ordem. O dispositivo de vídeo 650 e/ou o dispositivo de entrada 660 podem ser utilizados para interagir com a tela de negociação, por exemplo.
O dispositivo de entrada 660 pode incluir um teclado, mouse, microfone, tela sensível ao toque, trackball, teclado numérico, joystick, e/ou outro dispositivo para proporcionar entrada, por exemplo. O dispositivo de entrada 660 pode ser utilizado, por exemplo, para proporcionar seleções de comando para o processador 620. Por exemplo, o dispositivo de entrada 660 pode ser um mouse que é utilizado para controlar um cursor exibido em uma tela de negociação. O mouse pode incluir um ou mais botões para seleção e controle, por exemplo.
O dispositivo de saída 670 pode incluir um teclado, mouse, altofalante, tela sensível ao toque, trackball, teclado numérico, dispositivo ou sistema háptico, e/ou outro dispositivo para proporcionar saída, por exemplo. Por exemplo, o dispositivo de saída 670 pode ser utilizado para emitir um ou mais sinais, tal como um sinal háptico ou um sinal de áudio, para um usuário.
Enquanto as presentes invenções foram descritas com referência a algumas concretizações, será entendido pelos versados na técnica que várias alterações podem ser feitas e equivalentes podem ser substituídos sem afastamento do escopo das invenções. Em adição, várias modificações podem ser feitas para adaptar uma situação ou material particular às instruções das invenções sem afastamento de seu escopo. Portanto, é pretendido que as invenções não sejam limitadas às concretizações particulares reveladas, mas que as invenções incluam todas as concretizações se situando dentro do escopo das reivindicações.
1/6

Claims (13)

  1. REIVINDICAÇÕES
    1. Sistema (302) compreendendo um processador (620) configurado para executar um código de programa de computador definindo um algoritmo de negociação configurado para realizar uma ou mais funções, caracterizado pelo fato de que as uma ou mais funções são proporcionadas por uma ou mais partes executáveis do código de programa de computador que cada corresponde a um bloco criado dentro de um ambiente de programação visual (200, 290, 310, 410, 420, 430, 440, 450, 460, 470), em que:
    a) uma ou mais partes do código são primeiras partes do código que compreendem:
    i) pelo menos um método manipulador de evento configurado para receber dados indicativos de um evento externo na forma de um mercado ou por ação de tempo que provoca um estado no algoritmo para mudar para o processamento pelas ditas primeiras partes do código, e ii) pelo menos uma saída configurada para enviar dados indicativos de um evento interno que é gerado em resposta ao processamento do dito evento externo pelas ditas primeiras partes de código; e
    b) uma ou mais das ditas partes de código são segundas partes de código que compreendem pelo menos uma entrada conectada a saída das primeiras partes de código e configuradas para receber os dados indicativos do evento interno gerado, em que cada uma das primeira e segunda parte de código compreende um método de manipulação de evento que pode ser registrado para a notificação de eventos externos e/ou internos específicos de modo que quando um evento externo ou interno é gerado, cada método de manipulador de evento que foi registrado para o gerado evento é invocado, para permitir que cada respectiva primeira ou segunda parte do código e desempenhe suas uma ou mais funções de acordo com o evento gerado; e em que, em resposta ao dito evento externo, o processador é configurado para:
    invocar cada método de manipulação de eventos que foi registrado para o evento externo de modo executar as respectivas primeiras par2/6 tes do código, em que pelo menos uma das primeiras partes do código de evento cujo manipuladores de evento foram invocados gera um evento interno;
    adicionar as segundas partes de código cujos métodos de manipulação de eventos foram registrado para o evento interno para uma lista no caso em que o ou cada primeira parte de código cujos manipuladores de evento foram invocadas em relação ao evento externo estão atualmente executando sua(s) respectiva(s) função(ões) para gerar o evento interno, e após a conclusão da execução do ou de cada uma das ditas primeiras partes de código, invocar cada método de manipulação de evento registrado para o evento interno gerado de modo a executar a(s) função(ões) das segundas partes de código listadas em relação ao evento interno.
  2. 2 . Sistema (302), de acordo com a reivindicação 1, caracterizado pelo fato de que:
    o evento interno gerado é um primeiro evento interno; as segundas partes de código executam suas funções em relação ao primeiro evento interno para, então, gerar um segundo evento interno, as segundas partes do código compreendendo pelo menos uma saída configurada gerar como saída dados indicativos do segundo evento interno gerado;
    as uma ou mais partes de código executáveis de código de programa de computador incluem terceiras partes do código que compreendem um método de manipulação de evento que pode ser registrado para notificação do segundo evento interno gerado e que compreende pelo menos uma entrada ligada à saída da dita segundas partes de código por meio de que recebe dados indicativos do segundo evento interno gerado; e em que, na execução o dito código de programa de computador, o processador (620) está configurado para:
    adicionar as ditas terceiras partes de código cujos manipuladores de evento se registraram para o segundo evento interno de uma lista no caso em que a ou cada segunda parte de código cujos manipuladores de evento foram invocados para o primeiro evento interno estão atualmente e3/6 xecutando suas respectivas funções para gerar o segundo evento interno, e após a conclusão da dita execução da ou de cada uma das ditas segundas partes de código, invocar cada método de manipulação de evento registrado para o segundo evento interno gerado, de modo a executar as funções das terceiras partes de código listadas em relação ao segundo evento interno.
  3. 3. Sistema (302), de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que os métodos de manipulação de evento que estão registrados para um determinado evento gerado são invocados em uma ordem não especificada em relação ao determinado evento.
  4. 4 . Sistema (302), de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que os métodos de manipulação de evento registrados para um determinado evento gerado são invocados com base na ordem pela qual os seus respectivos blocos são colocados no ambiente de programação visual (200, 290, 310, 410, 420, 430, 440, 450, 460, 470).
  5. 5. Sistema (302), de acordo com a reivindicação 1 ou 2, caracterizado pelo fato de que os eventos externos e internos são eventos distintos correspondentes a ações específicas que ocorrem em determinado momento no tempo.
  6. 6. Sistema (302), de acordo com a reivindicação 5, caracterizado pelo fato de que o algoritmo de negociação compreende um bloco sequenciador que compreende uma entrada e pelo menos duas saídas, cada uma das saídas sendo conectada a uma ou mais das primeiras e/ou segunda partes executáveis do código, o bloco sequenciador sendo configurado para controlar a sequência em que os métodos de manipulação de evento das partes executáveis do código que se registraram para notificação do evento discreto são invocadas pelo controle da ordem em que o evento discreto é proporcionado para as saídas.
  7. 7. Método para a execução de código de programa de computador que define um algoritmo de negociação configurado para executar uma ou mais funções, caracterizado pelo fato de que as ditas uma ou mais funções são proporcionadas por uma ou mais partes executáveis do código de
    4/6 programa de computador, que cada uma corresponde a um bloco criado dentro de um ambiente de programação visual (200, 290, 310, 410, 420, 430, 440, 450, 460, 470), em que:
    a) uma ou mais das partes de código são primeiras partes de código que compreendem:
    i) pelo menos um método de manipulação de evento configurado para receber dados indicativos de um evento externo na forma de um mercado ou por ação de tempo que causa um estado no algoritmo para mudar para o processamento pelas ditas primeiras partes de código, e ii) pelo menos uma saída configurada para enviar dados indicativos de um evento interno que é gerado em resposta ao processamento do referido evento externo pelas ditas primeiras partes de código; e
    b) uma ou mais das ditas partes de código são segundas partes de código que compreendem pelo menos uma entrada conectada a dita saída das primeiras partes de código e configuradas para receber os dados indicativos do evento interna gerado, em que cada uma das ditas primeira e segunda partes de código compreende um método de manipulação de evento registrado para a notificação de eventos externos e/ou internos específicos de modo que quando um evento externo ou interno é gerado, cada método manipulação de evento que se registrou para o evento gerado é invocado, para permitir que cada respectiva primeira ou segunda parte do código execute suas uma ou mais funções de acordo com o evento gerado; e em que, em resposta ao evento externo, o método compreende as etapas de:
    invocar cada método de manipulação de evento que se registrou para o evento externo, de modo a executar as respectivas primeiras partes de código, em que pelo menos uma das primeiras partes de código cujos manipuladores de eventos foram invocadas gera o evento interno;
    adicionar as segunda partes de código cujos métodos de manipulação de evento se registraram para o evento interno para uma lista no caso em que o ou cada uma das primeiras partes de código cujo manipula5/6 dores de evento foi invocado em relação ao evento externo estão atualmente executando sua respectiva função para gerar o evento interno, e após a conclusão da referida execução da ou de cada uma das ditas primeiras partes do código, invocar cada método de manipulação de evento registrado para o evento interno gerado, de modo a executar a(s) função(ões) das segundas partes listadas do código em relação ao evento interno.
  8. 8. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que:
    o evento interno gerado é um primeiro evento interno; as segundas partes de código de executam suas funções em relação ao primeiro evento interno para gerar um segundo evento interno, as segundas partes de código compreendem pelo menos uma saída configurada para gerar como saída dados indicativos do segundo evento interno gerado;
    as uma ou mais partes de executáveis de código de programa de computador incluem terceiras partes de código compreendendo um método de manipulação de evento registrado para notificação do segundo evento interno gerado e compreendendo pelo menos uma entrada conectada à saída das segundas partes de código por meio do que recebe dados indicativos do segundo evento interno gerado; e em que, na execução o código de programa de computador, o método compreende:
    adicionar as terceiras partes de código, cujos manipuladores de evento se registraram para o segundo evento interno de uma lista no caso em que a ou cada segunda parte de código cujos manipuladores de evento foram invocados para o primeiro evento interno estão atualmente executando a sua respectiva função para gerar o segundo evento interno, e após a conclusão da execução da ou de cada segunda parte de código, invocar cada método de manipulação de evento registrado para o segundo evento interno gerado, de modo a executar as funções nas terceiras partes listadas de código em relação ao segundo interno evento.
    6/6
  9. 9. Método, de acordo com a reivindicação 7 ou 8, caracterizado pelo fato de que os métodos de manipulação de evento que estão registrados para um determinado evento gerado são invocados em uma ordem não específica em relação ao determinado evento .
  10. 10. Método, de acordo com a reivindicação 7 ou 8, caracterizado pelo fato de que os métodos de manipulação de evento registrados para um determinado evento gerado são invocados com base na ordem pela qual os seus respectivos blocos são colocados no ambiente de programação visual (200, 290, 310, 410, 420, 430, 440, 450, 460, 470).
  11. 11. Método, de acordo com a reivindicação 7 ou 8, caracterizado pelo fato de que os eventos externos e internos são eventos distintos correspondentes a ações específicas que ocorrem em determinado momento no tempo.
  12. 12. Método, de acordo com a reivindicação 11, caracterizado pelo fato de que o algoritmo de negociação compreende um bloco sequenciador que compreende uma entrada e pelo menos duas saídas, cada saída sendo conectada a uma ou mais das primeiras e/ou segunda partes executáveis de código, e o bloco seqüenciador controla a sequência em que os métodos de manipulação de evento das partes executáveis de código que se registraram para a notificação de um evento discreto são invocados, controlando a ordem em que o evento discreto é proporcionado para as saídas.
  13. 13. Programa de computador, ou de um conjunto de programas de computador, caracterizado pelo fato de que, quando executado por um sistema de processamento (302), faz com que o sistema de processamento execute um método como definido na reivindicação 7 ou 8.
    1/43
    2/43 ο
BR122013024230-9A 2009-10-20 2010-10-19 Negociação eletrônica com algoritmo definido pelo usuário BR122013024230A2 (pt)

Applications Claiming Priority (20)

Application Number Priority Date Filing Date Title
US25332409P 2009-10-20 2009-10-20
US25331509P 2009-10-20 2009-10-20
US61/253,324 2009-10-20
US61/253,315 2009-10-20
US26330009P 2009-11-20 2009-11-20
US61/263,300 2009-11-20
US31200310P 2010-03-09 2010-03-09
US61/312,003 2010-03-09
US31868510P 2010-03-29 2010-03-29
US61/318,685 2010-03-29
US32006110P 2010-04-01 2010-04-01
US61/320,061 2010-04-01
US39331310P 2010-10-14 2010-10-14
US61/393,313 2010-10-14
US12/905,709 2010-10-15
US12/905,726 US9652803B2 (en) 2009-10-20 2010-10-15 Virtualizing for user-defined algorithm electronic trading
US12/905,726 2010-10-15
US12/905,709 US10096066B2 (en) 2009-10-20 2010-10-15 User-defined algorithm electronic trading
PCT/US2010/053172 WO2011049936A2 (en) 2009-10-20 2010-10-19 User-defined algorithm electronic trading
BR112012009233A BR112012009233A2 (pt) 2009-10-20 2010-10-19 negociação eletrônica com algoritmo definido pelo usuário

Publications (1)

Publication Number Publication Date
BR122013024230A2 true BR122013024230A2 (pt) 2018-03-27

Family

ID=43880042

Family Applications (3)

Application Number Title Priority Date Filing Date
BR112012009233A BR112012009233A2 (pt) 2009-10-20 2010-10-19 negociação eletrônica com algoritmo definido pelo usuário
BR122013024235-0A BR122013024235A2 (pt) 2009-10-20 2010-10-19 Negociação eletrônica com algoritmo definido pelo usuário
BR122013024230-9A BR122013024230A2 (pt) 2009-10-20 2010-10-19 Negociação eletrônica com algoritmo definido pelo usuário

Family Applications Before (2)

Application Number Title Priority Date Filing Date
BR112012009233A BR112012009233A2 (pt) 2009-10-20 2010-10-19 negociação eletrônica com algoritmo definido pelo usuário
BR122013024235-0A BR122013024235A2 (pt) 2009-10-20 2010-10-19 Negociação eletrônica com algoritmo definido pelo usuário

Country Status (11)

Country Link
US (13) US10096066B2 (pt)
EP (1) EP2545514A4 (pt)
JP (5) JP5485405B2 (pt)
KR (4) KR101862801B1 (pt)
CN (2) CN111539815B (pt)
AU (1) AU2010308296B2 (pt)
BR (3) BR112012009233A2 (pt)
CA (3) CA2774398C (pt)
MX (3) MX2012004691A (pt)
SG (2) SG10201405879QA (pt)
WO (1) WO2011049936A2 (pt)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11100582B2 (en) 2003-09-22 2021-08-24 Trading Technologies International, Inc. System and method for dynamically determining quantity for risk management
US8620629B1 (en) * 2004-09-20 2013-12-31 The Mathworks, Inc. Identification and simulation of multiple subgraphs in multi-domain graphical modeling environment
US10096066B2 (en) 2009-10-20 2018-10-09 Trading Technologies International, Inc. User-defined algorithm electronic trading
US8386368B2 (en) * 2009-12-14 2013-02-26 Trading Technologies International, Inc. Cover-OCO for legged order
US8682773B1 (en) * 2010-05-03 2014-03-25 KnowVera, LLC Methods and system for visually designing trading strategies and execution thereof
WO2012073075A2 (en) * 2010-12-02 2012-06-07 Integrated Transaction Systems Ltd Method for monitoring and controlling of messages in a trading system
US8566220B2 (en) 2011-01-26 2013-10-22 Trading Technologies International, Inc. Block placing tool for building a user-defined algorithm for electronic trading
US9792652B2 (en) * 2012-01-04 2017-10-17 Broadway Technology Llc User interface for computer-implemented trading system
US10755351B2 (en) 2012-03-29 2020-08-25 Trading Technologies International, Inc. Controlling operation of a trading algorithm based on operating condition rules
US20150332398A1 (en) * 2012-09-04 2015-11-19 Slav Brkic Risk management system and method for monitoring and controlling of messages in a trading system
US10417707B2 (en) 2012-09-13 2019-09-17 Chicago Mercantile Exchange Inc. Futures exchange support of spot trading
US10007949B2 (en) 2012-10-19 2018-06-26 Trading Technologies International, Inc. Visual depiction of warnings and errors
US10068290B2 (en) * 2012-10-30 2018-09-04 Trading Technologies International, Inc. System and method for determining a stable quoting quantity for use in a trading strategy
US20140180892A1 (en) * 2012-12-20 2014-06-26 Trading Technologies International, Inc. Mitigating Communication Risks in an Electronic Trading System
US20140279360A1 (en) * 2013-03-15 2014-09-18 FastMatch, Inc. Factor based matching
US20140316961A1 (en) * 2013-04-23 2014-10-23 Chicago Mercantile Exchange, Inc. Dynamic Tick Size Order Aggregator
US20140330688A1 (en) * 2013-05-01 2014-11-06 Bonaire Software Solutions, Llc System and method for creating and managing a charging condition matrix
CA2895354C (en) 2013-06-24 2018-08-28 Aequitas Innovations Inc. System and method for automated trading of financial interests
US10628884B1 (en) * 2014-04-16 2020-04-21 Liquidnet Holdings, Inc. Database-driven processing of algorithmic trading plans utilizing specialized user interface methods, computer systems and computer programs
US11195230B2 (en) * 2014-07-25 2021-12-07 Clearingbid, Inc. Systems including a hub platform, communication network and memory configured for processing data involving time-stamped/time-sensitive aspects and/or other features
CA2958845C (en) 2014-08-22 2022-11-08 Iex Group, Inc. Dynamic peg orders in an electronic trading system
CN106296241B (zh) * 2015-05-21 2019-12-03 中国联合网络通信集团有限公司 划分网格的方法及装置
KR101711112B1 (ko) * 2015-07-30 2017-03-07 주식회사 셈웨어 알고리즘 거래 시스템
US10416842B1 (en) * 2015-09-22 2019-09-17 The Mathworks, Inc. Clarity in model-based design
EP3398155A1 (en) * 2015-12-30 2018-11-07 Chicago Mercantile Exchange, Inc. Execution of co-dependent transactions in a transaction processing system
CN105787656A (zh) * 2016-02-25 2016-07-20 王聪东 一种阶梯刻度相交法替代循环处理供求关系系统
US10809978B2 (en) * 2017-06-02 2020-10-20 Texas Instruments Incorporated Merge sort accelerator
US11941225B1 (en) * 2018-10-04 2024-03-26 United Services Automobile Association (Usaa) Systems and methods for self-directed investing
WO2020110933A1 (ja) 2018-11-28 2020-06-04 株式会社トラスト・テクノロジー プログラミング装置、およびプログラム
JP7184006B2 (ja) 2019-10-01 2022-12-06 三菱電機株式会社 半導体チップのピックアップ治具、半導体チップのピックアップ装置およびピックアップ治具の調節方法
CN111191413B (zh) * 2019-12-30 2021-11-12 北京航空航天大学 一种基于图排序模型的事件核心内容自动标记方法、装置及系统
CN111242735B (zh) * 2020-01-10 2024-03-15 深圳市家之思软装设计有限公司 数值模板生成方法及数值模板生成装置
US20210350426A1 (en) * 2020-05-07 2021-11-11 Nowcasting.ai, Inc. Architecture for data processing and user experience to provide decision support
US20220101437A1 (en) * 2020-07-23 2022-03-31 Fmr Llc Machine Learning Portfolio Simulating and Optimizing Apparatuses, Methods and Systems
US11354741B1 (en) * 2021-02-15 2022-06-07 Chicago Mercantile Exchange Inc. User interface enabling unconstrained data inputs to a constrained system
US20230267538A1 (en) * 2022-02-22 2023-08-24 Jpmorgan Chase Bank, N.A. Method and system for proxy event visualization

Family Cites Families (183)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5677156A (en) * 1979-11-28 1981-06-25 Ricoh Co Ltd Ink jet recorder
US5270922A (en) 1984-06-29 1993-12-14 Merrill Lynch & Company, Inc. System for distributing, processing and displaying financial information
US4674044A (en) 1985-01-30 1987-06-16 Merrill Lynch, Pierce, Fenner & Smith, Inc. Automated securities trading system
US4914568A (en) 1986-10-24 1990-04-03 National Instruments, Inc. Graphical system for modelling a process and associated method
US5168446A (en) 1989-05-23 1992-12-01 Telerate Systems Incorporated System for conducting and processing spot commodity transactions
US5136501A (en) 1989-05-26 1992-08-04 Reuters Limited Anonymous matching system
US5101353A (en) 1989-05-31 1992-03-31 Lattice Investments, Inc. Automated system for providing liquidity to securities markets
US5297031A (en) 1990-03-06 1994-03-22 Chicago Board Of Trade Method and apparatus for order management by market brokers
US5245535A (en) 1991-04-05 1993-09-14 Citibank, N.A. System for demonstrating financial concepts and displaying financial data
US5692233A (en) 1992-05-28 1997-11-25 Financial Engineering Associates, Inc. Integrated system and method for analyzing derivative securities
US6167386A (en) 1998-06-05 2000-12-26 Health Hero Network, Inc. Method for conducting an on-line bidding session with bid pooling
US6553346B1 (en) 1996-09-04 2003-04-22 Priceline.Com Incorporated Conditional purchase offer (CPO) management system for packages
CA2119921C (en) 1994-03-23 2009-09-29 Sydney H. Belzberg Computerized stock exchange trading system
US5809483A (en) 1994-05-13 1998-09-15 Broka; S. William Online transaction processing system for bond trading
EP0686926A3 (en) 1994-05-24 1996-06-12 Ron S Dembo Process and apparatus for optimal replication of portfolios
IL117424A (en) 1995-04-27 1999-09-22 Optimark Tech Inc Crossing network utilizing satisfaction density profile
US5689652A (en) 1995-04-27 1997-11-18 Optimark Technologies, Inc. Crossing network utilizing optimal mutual satisfaction density profile
WO1997008640A1 (en) 1995-08-28 1997-03-06 Ebs Dealing Resources, Inc. Anonymous trading system with improved quote input capabilities
US6519574B1 (en) 1995-12-12 2003-02-11 Reuters Limited Electronic trading system featuring arbitrage and third-party credit opportunities
US5819238A (en) 1996-12-13 1998-10-06 Enhanced Investment Technologies, Inc. Apparatus and accompanying methods for automatically modifying a financial portfolio through dynamic re-weighting based on a non-constant function of current capitalization weights
US7058617B1 (en) * 1996-05-06 2006-06-06 Pavilion Technologies, Inc. Method and apparatus for training a system model with gain constraints
US5787402A (en) 1996-05-15 1998-07-28 Crossmar, Inc. Method and system for performing automated financial transactions involving foreign currencies
US6014643A (en) 1996-06-28 2000-01-11 Minton; Vernon F. Interactive securities trading system
US6061662A (en) 1997-08-15 2000-05-09 Options Technology Company, Inc. Simulation method and system for the valuation of derivative financial instruments
US6195647B1 (en) 1996-09-26 2001-02-27 The Nasdaq Stock Market, Inc. On-line transaction processing system for security trading
US5963923A (en) 1996-11-12 1999-10-05 Garber; Howard B. System and method for trading having a principal market maker
US5959621A (en) 1996-12-06 1999-09-28 Microsoft Corporation System and method for displaying data items in a ticker display pane on a client computer
AU4060502A (en) 1996-12-20 2002-06-27 Financial Services Technology Consortium Method and system for processing electronic documents
US6112189A (en) 1997-03-19 2000-08-29 Optimark Technologies, Inc. Method and apparatus for automating negotiations between parties
JP2001524236A (ja) 1997-04-30 2001-11-27 トラストマーク インターナショナル リミテッド ネットワークコンピュータ取引システム
US5873071A (en) 1997-05-15 1999-02-16 Itg Inc. Computer method and system for intermediated exchange of commodities
US6996540B1 (en) 1997-10-14 2006-02-07 Blackbird Holdings, Inc. Systems for switch auctions utilizing risk position portfolios of a plurality of traders
US6421653B1 (en) 1997-10-14 2002-07-16 Blackbird Holdings, Inc. Systems, methods and computer program products for electronic trading of financial instruments
JP3415009B2 (ja) 1997-11-14 2003-06-09 沖電気工業株式会社 プログラム開発装置および記録媒体
EP1067471A1 (en) 1997-12-08 2001-01-10 Nippon Steel Corporation Commodity exchanging apparatus, commodity exchanging system, commodity exchanging method and storage medium
US5918217A (en) 1997-12-10 1999-06-29 Financial Engines, Inc. User interface for a financial advisory system
US6064985A (en) 1998-01-21 2000-05-16 Assured Equities, Inc. Automated portfolio management system with internet datafeed
US6229534B1 (en) 1998-02-27 2001-05-08 Sabre Inc. Methods and apparatus for accessing information from multiple remote sources
US6161098A (en) 1998-09-14 2000-12-12 Folio (Fn), Inc. Method and apparatus for enabling small investors with a portfolio of securities to manage taxable events within the portfolio
US6317728B1 (en) 1998-10-13 2001-11-13 Richard L. Kane Securities and commodities trading system
US6233566B1 (en) 1998-12-31 2001-05-15 Ultraprise Corporation System, method and computer program product for online financial products trading
US6272474B1 (en) 1999-02-08 2001-08-07 Crisostomo B. Garcia Method for monitoring and trading stocks via the internet displaying bid/ask trade bars
AU3362000A (en) 1999-02-12 2000-08-29 State Street Corporation Processing orders to a computerized trading market
AU761350B2 (en) 1999-02-24 2003-06-05 Min Ho Cha Automatic ordering method and system for trading of stock, bond, item, future index, option, index, current and so on
US6408282B1 (en) 1999-03-01 2002-06-18 Wit Capital Corp. System and method for conducting securities transactions over a computer network
AU3247600A (en) 1999-03-01 2000-09-21 Wit Capital Corporation A system and method for conducting securities transactions over a computer network
US7212999B2 (en) 1999-04-09 2007-05-01 Trading Technologies International, Inc. User interface for an electronic trading system
US6278982B1 (en) 1999-04-21 2001-08-21 Lava Trading Inc. Securities trading system for consolidation of trading on multiple ECNS and electronic exchanges
AU4369100A (en) 1999-04-22 2000-11-10 Trading Technologies, Inc. Electronic securities trading system
US6418419B1 (en) 1999-07-23 2002-07-09 5Th Market, Inc. Automated system for conditional order transactions in securities or other items in commerce
US7155410B1 (en) * 1999-08-03 2006-12-26 Woodmansey Robert J Systems and methods for linking orders in electronic trading systems
AU1250001A (en) 1999-08-30 2001-03-26 Epit Inc. User interface for semi-fungible trading
US7685048B1 (en) 1999-09-01 2010-03-23 Bloomberg L.P. Electronic trading system for forwards spread trades
US8311926B1 (en) 1999-09-23 2012-11-13 The Nasdaq Omx Group, Inc. Montage for automated market system
AU7712200A (en) 1999-09-23 2001-04-24 Daniel R. Bornstein For user interface for a financial trading system
US6691094B1 (en) 1999-09-28 2004-02-10 Lee N. Herschkorn Bank loan trading system and method
US20020038279A1 (en) 1999-10-08 2002-03-28 Ralph Samuelson Method and apparatus for using a transaction system involving fungible, ephemeral commodities including electrical power
CN1353381A (zh) * 1999-11-02 2002-06-12 昂耐股份有限公司 自动计算机网络交易信息管理系统和方法
AU1363301A (en) 1999-12-01 2001-06-12 Automated Power Exchange, Inc. Method and apparatus of managing ephemeral, fungible commodities based upon real-time forward prices
US20020055899A1 (en) 1999-12-06 2002-05-09 Williams Joseph C. Display system and method for displaying and organizing financial information
US7356499B1 (en) 2000-02-09 2008-04-08 Dean Amburn Method and apparatus for automated trading of equity securities using a real time data analysis
US6938011B1 (en) 2000-03-02 2005-08-30 Trading Technologies International, Inc. Click based trading with market depth display
US7447655B2 (en) 2000-03-02 2008-11-04 Trading Technologies International, Inc. System and method for automatic scalping of a tradeable object in an electronic trading environment
US7228289B2 (en) 2000-03-02 2007-06-05 Trading Technologies International, Inc. System and method for trading and displaying market information in an electronic trading environment
US7127424B2 (en) 2000-03-02 2006-10-24 Trading Technologies International, Inc. Click based trading with intuitive grid display of market depth and price consolidation
US7389268B1 (en) 2000-03-02 2008-06-17 Trading Technologies International, Inc. Trading tools for electronic trading
US6772132B1 (en) 2000-03-02 2004-08-03 Trading Technologies International, Inc. Click based trading with intuitive grid display of market depth
US7246092B1 (en) 2000-05-12 2007-07-17 The Nasdaq Stock Market, Inc. Montage for an electronic market
US8069106B2 (en) 2000-06-01 2011-11-29 Pipeline Financial Group, Inc. Block trading system and method providing price improvement to aggressive orders
US7437325B2 (en) 2002-03-05 2008-10-14 Pablo Llc System and method for performing automatic spread trading
US8924277B2 (en) 2000-08-17 2014-12-30 Nyse Group, Inc. Method and system for automatic execution of a securities transaction
AUPQ966400A0 (en) 2000-08-24 2000-09-21 Xemplex Pty Ltd Method of graphically defining a formula
US20020069156A1 (en) 2000-09-01 2002-06-06 Kerry Adam Electronic trading platform for agricultural commodities
US7089205B1 (en) 2000-09-29 2006-08-08 Unx, Inc. Basket trading system having an interface for user specification of goods to be traded as a unit
US20020046156A1 (en) 2000-10-14 2002-04-18 Goldman, Sachs & Company Apparatus, methods and articles of manufacture for executing computerized transaction processes
US20020049661A1 (en) 2000-10-14 2002-04-25 Goldman, Sachs & Company Apparatus, methods and articles of manufacture for constructing and executing computerized transaction processes and programs
US20020046146A1 (en) 2000-10-14 2002-04-18 Otero Hernan G. Apparatus, methods and articles of manufacture for constructing and executing computerized transaction processes and programs
US7305361B2 (en) 2000-10-14 2007-12-04 Goldman Sachs & Co. Apparatus, methods and articles of manufacture for constructing and executing computerized transaction processes and programs
US7496535B2 (en) 2000-10-14 2009-02-24 Goldman Sachs & Co. Computerized interface for constructing and executing computerized transaction processes and programs
US20030088495A1 (en) 2000-12-07 2003-05-08 Gilbert Andrew C. Systems and methods for linking bids and offers in a trading interface
JP2002229783A (ja) 2001-01-31 2002-08-16 Toshiba Corp ソフトウェア構築支援システム、その方法およびソフトウェア構築支援プログラム
US6693651B2 (en) 2001-02-07 2004-02-17 International Business Machines Corporation Customer self service iconic interface for resource search results display and selection
US20020120551A1 (en) 2001-02-27 2002-08-29 Clarkson Jones Visual-kinesthetic interactive financial trading system
US7146336B2 (en) 2001-03-08 2006-12-05 Oanda Corporation Currency trading system, methods, and software
US20020128950A1 (en) 2001-03-12 2002-09-12 Michael Wu Artificial intelligence based trading system
US8145557B2 (en) 2001-03-30 2012-03-27 Bgc Partners, Inc. Bid/offer spread trading
US6983260B2 (en) 2001-04-06 2006-01-03 Omx Technology Ab Automated exchange system for trading orders having a hidden volume
US7243083B2 (en) 2001-06-14 2007-07-10 Trading Technologies International, Inc. Electronic spread trading tool
US7418416B2 (en) 2001-06-20 2008-08-26 Morgan Stanley Gamma trading tool
US20030004853A1 (en) 2001-06-28 2003-01-02 Pranil Ram Graphical front end system for real time security trading
CA2403300A1 (en) * 2002-09-12 2004-03-12 Pranil Ram A method of buying or selling items and a user interface to facilitate the same
US8196056B2 (en) * 2001-07-24 2012-06-05 The Mathworks, Inc. Handling parameters in block diagram modeling
US7653873B2 (en) 2001-08-31 2010-01-26 Siemens Medical Solutions Health Services Corporation System and user interface supporting task schedule configuration
US20030093352A1 (en) 2001-10-15 2003-05-15 Muralidhar Sanjay P. Method, apparatus and program for evaluating financial trading strategies and portfolios
US7512555B2 (en) * 2001-11-13 2009-03-31 Gregory M Finn Investment management tool
US7672895B2 (en) 2002-02-19 2010-03-02 Trading Technologies International, Inc. System and method for simulating an electronic trading environment
US7813995B2 (en) 2002-03-05 2010-10-12 Trading Technologies International, Inc. System and method for estimating a spread value
WO2003107121A2 (en) 2002-06-18 2003-12-24 Tradegraph, Llc System and method for analyzing and displaying security trade transactions
US9805417B2 (en) 2002-06-19 2017-10-31 Trading Technologies International, Inc. System and method for automated trading
FI20021655A (fi) 2002-06-19 2003-12-20 Nokia Corp Menetelmä lukituksen avaamiseksi ja kannettava elektroninen laite
US20040006534A1 (en) 2002-06-20 2004-01-08 Fung Ka Shun Kevin Method and system for managing credit-related and exchange rate-related risk
US7168045B2 (en) 2002-06-28 2007-01-23 Sap Aktiengesellschaft Modeling business objects
JP2004046657A (ja) 2002-07-15 2004-02-12 Answer:Kk 計算支援方法とその装置、及び計算支援ソフト
FI20021736A (fi) 2002-09-30 2004-03-31 Nokia Corp Menetelmä ja järjestely lukituksen toiminnan ohjaamiseksi
US7610237B1 (en) 2002-09-30 2009-10-27 Trading Technologies International Inc. System and method for creating trade-related annotations in an electronic trading environment
US7694272B2 (en) 2002-10-21 2010-04-06 Sungard (Israel) Ltd Method, a language and a system for the definition and implementation of software solutions by using a visualizable computer executable modeling language
US7418422B2 (en) 2002-11-13 2008-08-26 Trading Technologies International, Inc. Method, apparatus and interface for trading multiple tradeable objects
US7523064B2 (en) 2002-11-13 2009-04-21 Trading Technologies International, Inc. System and method for facilitating trading of multiple tradeable objects in an electronic trading environment
US7571134B1 (en) 2002-11-13 2009-08-04 Trading Technologies International, Inc. Trading interface for facilitating trading of multiple tradeable objects in an electronic trading environment
JP2004178584A (ja) 2002-11-26 2004-06-24 Asulab Sa 機能、装置、又は所定の場所にアクセスするためのタッチスクリーンによるセキュリティコードの入力方法、及びその方法を実行するためのデバイス
AU2002953011A0 (en) * 2002-12-02 2002-12-12 Xemplex Pty Ltd Method of componentisation of a graphically defined formula
US20050080701A1 (en) 2002-12-23 2005-04-14 Ge Corporate Financial Services, Inc. Methods and systems for managing risk management information
US7844536B1 (en) * 2003-01-31 2010-11-30 Trading Technologies International, Inc. System and method for linking and managing linked orders in an electronic trading environment
US7752117B2 (en) 2003-01-31 2010-07-06 Trading Technologies International, Inc. System and method for money management in electronic trading environment
US7587357B1 (en) 2003-06-30 2009-09-08 Trading Technologies International Inc. Repositioning of market information on trading screens
US7512557B1 (en) 2003-06-30 2009-03-31 Trading Technologies International, Inc. System and method for timed order entry and modification
US20050004852A1 (en) 2003-07-03 2005-01-06 Whitney Scott M. System, method and computer medium for trading interface
US11100582B2 (en) 2003-09-22 2021-08-24 Trading Technologies International, Inc. System and method for dynamically determining quantity for risk management
US7861185B1 (en) 2003-12-30 2010-12-28 Trading Technologies International, Inc. System and method for dynamically determining quantity for risk management
US7702568B1 (en) 2003-09-22 2010-04-20 Trading Technologies International, Inc. System and method for icon oriented representation of trading strategies
US20050071243A1 (en) * 2003-09-30 2005-03-31 Anandhi Somasekaran Non-disruptive business process debugging and analysis
US7739164B1 (en) 2003-10-07 2010-06-15 Trading Technologies International, Inc. System and method for displaying risk data in an electronic trading environment
US20080109785A1 (en) 2004-01-16 2008-05-08 Bailey Bendrix L Graphical Program Having Graphical and/or Textual Specification of Event Handler Procedures for Program Objects
US8046289B2 (en) 2004-01-29 2011-10-25 New York Mercantile Exchange, Inc. Electronic pitcard for wireless financial exchange
US20050203826A1 (en) 2004-03-12 2005-09-15 Chicago Mercantile Exchange, Inc. Implied spread trading system
US20050256799A1 (en) 2004-04-01 2005-11-17 Wave Rules, Llc. User interface for electronic trading
US7296233B2 (en) 2004-05-10 2007-11-13 Microsoft Corporation Spy-resistant keyboard
US7599867B1 (en) 2004-06-30 2009-10-06 Trading Technologies International, Inc. System and method for chart pattern recognition and analysis in an electronic trading environment
US20060010066A1 (en) 2004-07-12 2006-01-12 Rosenthal Collins Group, L.L.C. Method and system for providing a graphical user interface for electronic trading
US20070083456A1 (en) * 2004-08-10 2007-04-12 Akers Wayne S Algorithmic trading
WO2006063016A2 (en) 2004-12-09 2006-06-15 Rosenthal Collins Group, Llc Method and system for providing configurable features for graphical user interfaces for electronic trading
US7542938B1 (en) 2004-12-28 2009-06-02 Trading Technologies International, Inc. System and method for quick quote configuration
US7848991B1 (en) 2004-12-30 2010-12-07 Trading Technologies International, Inc. System and method for modifying trading strategies based on message usage
US20060195817A1 (en) * 2005-02-28 2006-08-31 Microsoft Corporation Visual workflow modeling tools for user interface automation
GB2423838A (en) 2005-02-28 2006-09-06 Patsystems Electronic trading system
US7634437B1 (en) 2005-03-31 2009-12-15 Trading Technologies International, Inc. System and method for displaying trading data
US7590576B1 (en) 2005-03-31 2009-09-15 Trading Technologies International Inc. Visual representation and configuration of trading strategies
US7596528B1 (en) 2005-03-31 2009-09-29 Trading Technologies International, Inc. System and method for dynamically regulating order entry in an electronic trading environment
US20060253582A1 (en) 2005-05-03 2006-11-09 Dixon Christopher J Indicating website reputations within search results
USD539297S1 (en) 2005-05-05 2007-03-27 Noviello Joseph C User interface for an electronic trading system for a computer screen
US20060265453A1 (en) 2005-05-19 2006-11-23 International Business Machines Corporation Method and system of applying a template to a message
US7921072B2 (en) 2005-05-31 2011-04-05 Alcatel-Lucent Usa Inc. Methods and apparatus for mapping source schemas to a target schema using schema embedding
US7711630B2 (en) 2005-06-06 2010-05-04 Trading Technologies International. Inc. System and method for trading multiple tradeable objects using a single trading interface
US7577600B1 (en) 2005-06-30 2009-08-18 Trading Technologies International, Inc. System and method for regulating order entry in an electronic trading environment
US20070011081A1 (en) 2005-07-11 2007-01-11 Lehman Brothers Inc. Systems and methods for delivering parameters to automated security order execution systems
KR20080059577A (ko) 2005-09-29 2008-06-30 씨-그립 코포레이션 리미티드 컴퓨터 프로그램의 프로그래밍 방법 및 프로그래밍용프로그램
EP1952330A1 (en) 2005-11-21 2008-08-06 Saxo Bank A/S A financial trading system
US7711631B2 (en) * 2005-12-29 2010-05-04 Trading Technologies International, Inc. System and method for a trading interface incorporating a chart
US20070168275A1 (en) 2006-01-13 2007-07-19 Andrew Busby Method for trading using volume submissions
US20070174173A1 (en) 2006-01-21 2007-07-26 Brucato Steven J Method for displaying market data and entering trading orders
US20070250783A1 (en) 2006-04-24 2007-10-25 Ehealthinsurance Services, Inc. Method and system to provide online application forms
US20070250769A1 (en) 2006-04-24 2007-10-25 Ehealthinsurance Services, Inc. Method and system to provide online application forms
US7904376B2 (en) * 2006-04-28 2011-03-08 Pipeline Financial Group, Inc. Rich graphical control interface for algorithmic trading engine
US7870059B2 (en) 2006-04-28 2011-01-11 Pipeline Financial Group, Inc. Display of selected items in visual context in algorithmic trading engine
US7908203B2 (en) 2006-04-28 2011-03-15 Pipeline Financial Group, Inc. Coordination of algorithms in algorithmic trading engine
US7882014B2 (en) 2006-04-28 2011-02-01 Pipeline Financial Group, Inc. Display of market impact in algorithmic trading engine
US7882013B2 (en) * 2006-04-28 2011-02-01 Pipeline Financial Group, Inc. Drag-and-drop graphical control interface for algorithmic trading engine
SG161288A1 (en) 2006-04-28 2010-05-27 Pipeline Financial Group Drag-and-drop graphical control interface for algorithmic trading engine
US20070265953A1 (en) 2006-05-09 2007-11-15 Cunningham William D Smooth scrolling for software application
US7577608B1 (en) 2006-07-07 2009-08-18 Trading Technologies International Inc. System and method for providing a linear spread
JP4374013B2 (ja) 2006-10-31 2009-12-02 株式会社東芝 中継装置、並びに中継方法
WO2008064275A2 (en) 2006-11-20 2008-05-29 Codestreet, Llc Fixed-income system for managing pre-trade activity
GB0624033D0 (en) 2006-12-01 2007-01-10 Iti Scotland Ltd Dynamic intervention with software applications
US8769485B2 (en) 2006-12-04 2014-07-01 Tibco Software, Inc. Data parallelism and parallel operations in stream processing
US9038041B2 (en) 2006-12-04 2015-05-19 Tibco Software, Inc. Stream processor with compiled programs
US8739068B2 (en) * 2007-06-15 2014-05-27 Microsoft Corporation Dynamic user interface for in-diagram shape selection
JP5367237B2 (ja) 2007-06-18 2013-12-11 ソニー株式会社 サーバ
WO2009015387A2 (en) 2007-07-26 2009-01-29 Pipeline Financial Group, Inc. Block trading system and method providing price improvement to aggressive orders
US20090089202A1 (en) 2007-09-28 2009-04-02 Fidessa Corporation Algorithmic order management tool for trading financial instruments
US20090144186A1 (en) 2007-11-30 2009-06-04 Reuters Sa Financial Product Design and Implementation
US20090157501A1 (en) 2007-12-16 2009-06-18 Rolland Russell Martel Integrated Exchange for 24 hour real time trading of fungibles & continuous cash T+0 settlement
US8442885B1 (en) * 2008-02-14 2013-05-14 Jpmorgan Chase Bank, N.A. Algorithmic trading management system and method
US7945505B2 (en) * 2008-03-12 2011-05-17 Liquidity Development, Llc Methods and systems for trading contracts and operating exchanges
US20100057602A1 (en) * 2008-08-28 2010-03-04 Armutcu Ercan S Electronic trading GUI
US20100161821A1 (en) 2008-12-18 2010-06-24 Slamkovic Richard D Midleware broker
US20110040669A1 (en) 2009-08-17 2011-02-17 Darren Lee Automated spread trading system
US20110040668A1 (en) 2009-08-17 2011-02-17 Darren Lee Automated spread trading system
US10096066B2 (en) 2009-10-20 2018-10-09 Trading Technologies International, Inc. User-defined algorithm electronic trading
US20110208670A1 (en) 2010-02-19 2011-08-25 Jpmorgan Chase Bank, N.A. Execution Optimizer
US8510206B2 (en) * 2010-07-26 2013-08-13 Trading Technologies International, Inc. Consolidated price level expansion
US8566220B2 (en) 2011-01-26 2013-10-22 Trading Technologies International, Inc. Block placing tool for building a user-defined algorithm for electronic trading
US10007949B2 (en) * 2012-10-19 2018-06-26 Trading Technologies International, Inc. Visual depiction of warnings and errors
US10438285B1 (en) * 2013-03-15 2019-10-08 Charles Schwab & Co., Inc. System and method for displaying order status and receiving and changing orders

Also Published As

Publication number Publication date
CN111539815B (zh) 2024-04-05
US20170186087A1 (en) 2017-06-29
US20220138854A1 (en) 2022-05-05
BR112012009233A2 (pt) 2016-08-23
CA3234139A1 (en) 2011-04-28
EP2545514A4 (en) 2013-09-11
US20210279801A1 (en) 2021-09-09
AU2010308296B2 (en) 2013-10-31
US10572942B2 (en) 2020-02-25
BR122013024235A2 (pt) 2019-08-06
CA3152686C (en) 2024-05-14
US20200160448A1 (en) 2020-05-21
JP2013508862A (ja) 2013-03-07
US11449939B2 (en) 2022-09-20
US20110093379A1 (en) 2011-04-21
CN111539815A (zh) 2020-08-14
US20110093378A1 (en) 2011-04-21
US11055782B2 (en) 2021-07-06
CA2774398C (en) 2022-06-21
MX344724B (es) 2017-01-05
KR20180121690A (ko) 2018-11-07
US10504182B2 (en) 2019-12-10
US20240054561A1 (en) 2024-02-15
JP6104329B2 (ja) 2017-03-29
JP6513110B2 (ja) 2019-05-15
WO2011049936A3 (en) 2012-11-15
US11823270B2 (en) 2023-11-21
US20200051169A1 (en) 2020-02-13
US20220405842A1 (en) 2022-12-22
JP2019071112A (ja) 2019-05-09
JP5961198B2 (ja) 2016-08-02
US9652803B2 (en) 2017-05-16
WO2011049936A2 (en) 2011-04-28
CN102947853A (zh) 2013-02-27
MX2012004691A (es) 2012-08-30
KR20190103488A (ko) 2019-09-04
KR101862801B1 (ko) 2018-05-31
JP6775615B2 (ja) 2020-10-28
KR20120102644A (ko) 2012-09-18
JP2017117473A (ja) 2017-06-29
JP2016021242A (ja) 2016-02-04
CA3152686A1 (en) 2011-04-28
JP2014160466A (ja) 2014-09-04
US11842401B2 (en) 2023-12-12
CA2774398A1 (en) 2011-04-28
KR101915257B1 (ko) 2018-11-06
SG10201705134SA (en) 2017-07-28
KR20180053774A (ko) 2018-05-23
MX2021002806A (es) 2021-05-31
AU2010308296A1 (en) 2012-04-12
US20190236703A1 (en) 2019-08-01
US11568491B2 (en) 2023-01-31
US20190012738A1 (en) 2019-01-10
EP2545514A2 (en) 2013-01-16
JP5485405B2 (ja) 2014-05-07
SG10201405879QA (en) 2014-11-27
US20240013304A1 (en) 2024-01-11
KR102047374B1 (ko) 2019-11-21
US11257156B2 (en) 2022-02-22
US10096066B2 (en) 2018-10-09
US20230130695A1 (en) 2023-04-27
KR102017877B1 (ko) 2019-09-03
US10296975B2 (en) 2019-05-21

Similar Documents

Publication Publication Date Title
JP6513110B2 (ja) ユーザ定義のアルゴリズム電子取引
AU2019213331B2 (en) User-defined algorithm electronic trading
AU2014200235A1 (en) User-defined algorithm electronic trading

Legal Events

Date Code Title Description
B03A Publication of a patent application or of a certificate of addition of invention [chapter 3.1 patent gazette]
B08F Application dismissed because of non-payment of annual fees [chapter 8.6 patent gazette]
B08G Application fees: restoration [chapter 8.7 patent gazette]
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B09B Patent application refused [chapter 9.2 patent gazette]